2012-06-19 1 views
0

J'essaie de créer un formulaire avec un menu déroulant. Les valeurs du formulaire sont ensuite stockées dans une base de données. Je veux être en mesure de changer les valeurs du formulaire plus tard, et ce faisant en revenant au formulaire, qui est rempli avec les valeurs entrées dans la base de données.Comparaison d'une chaîne dans une base de données SQL avec une chaîne "normale"

Tout semble fonctionner, sauf pour le menu déroulant. Comme je veux que tous les champs soient remplis avec les valeurs correctes, cela vaut également pour le menu. J'ai donc essayé d'utiliser la comparaison de chaînes dans les clauses if-else pour déterminer quelle option choisir comme sélectionnée. Mais la comparaison de chaînes ne fonctionne pas. Voici un exemple de code:

$query = mysql_query(SELECT * FROM data); 
$result = mysql_fetch_assoc($query); 

if(strcmp($result['pet'],"Dog")==0) 
{ 
    echo " 
     <option value='Dog' selected>Dog</option> 
     <option value='Cat'>Cat</option> 
     <option value='Bird'>Bird</option> 
    "; 
} 
elseif(strcmp($result['pet'],"Cat")==0) 
{ 
    echo " 
     <option value='Dog'>Dog</option> 
     <option value='Cat' selected>Cat</option> 
     <option value='Bird'>Bird</option> 
    "; 
} 

J'ai aussi essayé:

if(result['pet']=="Dog") 
{ 
    ..... 
} 
elseif(result['pet']=="Cat") 
{ 
    ..... 
} 

et

if(strcmp(trim(reuslt['pet']),trim("Dog"))==0) 
{ 
    ..... 
} 
elseif(strcmp(trim(result['pet']),trim("Cat"))==0) 
{ 
    ..... 
} 

Mais rien ne fonctionne. Je soupçonne qu'il a à faire avec le classement, donc j'ai essayé de changer quand je sélectionne les valeurs suivantes:

$query = mysql_query("SELECT * COLLATE latin_1 FROM data"); 
$result = mysql_fetch_assoc($query); 

Cela me donne le message d'erreur « Attention: mysql_fetch_assoc() attend le paramètre 1 à être ressource, booléenne donnée dans /opt/lampp/htdocs/PHP/control.php sur la ligne 12 ".

Alors, qu'est-ce qui ne va pas, et comment le réparer?

EDIT: J'ai changé ma requête un peu:

$query = mysql_query("SELECT * FROM data WHERE user='$user' COLLATE uft8_general_ci") or die(mysql_error()); 

A partir de ce que j'obtiens l'erreur suivante:

COLLATIONNEMENT 'utf8_general_ci' est pas valable pour le caractère SET 'latin1'

et quand je change la collation latin1_general_ci Je le ce qui suit:

mélange illégale des classements (utf8_swedish_ci, IMPLICIT) et (latin1_general_ci, explicit) pour un fonctionnement '='

Le classement que j'utilise pour la colonne dans la base de données est utf8_swedish_ci, si ce aide.

+0

double possible de [Attention: mysql_fetch_ * 1 paramètre attend d'être ressource , erreur donnée booléenne] (http: // stackoverflow.com/questions/11674312/warning-mysql-fetch-attend-parameter-1-to-be-ressource-boolean-given-error) – j0k

Répondre

1

Vous obtenez cette erreur, car mysql_query retourne un booléen (false) lorsque la requête échoue, procédez comme suit pour une meilleure explication du problème

$result = mysql_query('SELECT * COLLATION latin_1 FROM data'); 
if (!$result) { 
    die('Invalid query: ' . mysql_error()); 
} 

Le problème est que votre requête isnt valide - vous devriez utiliser COLLATE pas COLLATION ... voir ce qui suit pour une bonne explication sur la façon dont COLLATE works - vous utilisez essentiellement COLLATE contre une seule colonne et non un groupe (*)

+0

Je crains que cela n'ait pas été trop utile: ** "Vous avez une erreur dans votre syntaxe SQL, consultez le manuel qui correspond à votre version du serveur MySQL pour la bonne syntaxe à utiliser près de 'COLLATE latin_1 FROM data' à la ligne 1 "** Il ne me dit pas vraiment pourquoi cela ne fonctionne pas. En outre, j'utilise "COLLATE" et non "COLLATION", juste une faute de frappe, je vais corriger cela. – Psyberion

+0

voir ma mise à jour - vous n'avez pas spécifié 'COLLATE' correctement - vous devez utiliser l'assemblage sur une colonne pas toutes les colonnes – ManseUK

+0

OK, j'ai presque tout compris, mais j'ai encore quelques erreurs que je ne trouve pas de solutions pour. S'il vous plaît regardez ma modification. Merci! – Psyberion

Questions connexes