2010-03-30 4 views
1

Comment faire une instruction if basée sur la valeur d'une cellule de table mysql. Par exemple, j'ai une table de personnes avec une colonne appelée marital_status. Cette colonne a l'une des deux valeurs: oui ou non. Mais cela ne fonctionne pas:Comment faire une instruction IF basée sur la valeur d'une cellule de table MySQL?

$query = mysql_query("SELECT marital_status FROM people WHERE first_name = 'John'"); 

while ($row = mysql_fetch_assoc($query)) { 

    $maritalStatus = $row['marital_status']; 

} 

if ($maritalStatus == "yes") { 
    echo "This person is married."; 
} 
else { 
    echo "This person is NOT married."; 
} 

$ maritalStatus == « oui » ne retourne pas vrai même si c'est exactement la valeur dans cette cellule.

+0

Que faites-vous si vous faites « echo $ maritalStatus » au lieu du si? –

+0

Je reçois la valeur réelle: "Oui". – Susan

+1

Note: "yes"! = "Yes" – Pickle

Répondre

4

Si vous souhaitez travailler sur chaque ligne de données renvoyées par votre requête SQL, vous devez placer votre condition dans la boucle while - qui effectue une itération sur les lignes retournées par la excution de la requête:

$query = mysql_query("SELECT marital_status FROM people WHERE first_name = 'John'"); 

while ($row = mysql_fetch_assoc($query)) { 
    $maritalStatus = $row['marital_status']; 
    if ($maritalStatus == "yes") { 
     echo "This person is married."; 
    } 
    else { 
     echo "This person is NOT married."; 
    } 
} 


Si cela ne fonctionne pas, il pourrait être utile de vérifier:

  • Si la requête renvoie effectivement des résultats
  • Si ces résultats sont réellement ce que vous pensez qu'ils sont.

Cela peut être fait en utilisant var_dump, pour vider le contenu d'une variable. Par exemple, dans votre situation, vous pouvez utiliser:

$query = mysql_query("SELECT marital_status FROM people WHERE first_name = 'John'"); 
while ($row = mysql_fetch_assoc($query)) { 
    var_dump($row);  // Will display the content of $row 
} 



En tant que sidenote, vous avez dit dans un commentaire que l'écho $ maritalStatus vous obtient "Yes".

S'il y a une Y en majuscules dans votre base de données, qui est la raison pour laquelle votre code échoue: vous testez pour « yes » en minuscules.

En PHP, en utilisant l'opérateur == pour les comparaisons de chaînes, les majuscules et les minuscules sont considérées comme des caractères différents.

Si vous voulez comparer d'une manière insensible à la casse, vous devez soit:

  • Convertir toutes les chaînes à la même affaire (supérieur ou inférieur, à vous de choisir)
  • utiliser une fonction de comparaison insensible à la casse, comme strcasecmp
+0

Le déplacer dans la boucle while n'aide pas. Var dump révèle ceci: array (1) {["marital_status"] => string (3) "Oui"} – Susan

+0

Je vois que j'ai écrit oui avec un minuscule y dans ma question initiale. Mais dans mon code actuel, les cas sont corrects. Toujours pas de chance. – Susan

+0

@Susan: Si vous avez '" Oui "' avec un ** Y "majuscule" dans votre base de données, et que vous le testez par "" oui "' en ** minuscule ** dans votre code, c'est pourquoi votre code échoue: ** majuscules et minuscules ne sont pas le même caractère ** - J'ai édité ma réponse avec quelques informations supplémentaires * (beaucoup mieux qu'un commentaire ^^) * –

1

Vous devez déplacer votre bloc if à l'intérieur de la boucle while.
Et assurez-vous de prendre en compte les lettres.

$query = mysql_query("SELECT marital_status FROM people WHERE first_name = 'John'"); 

while ($row = mysql_fetch_assoc($query)) { 

    $maritalStatus = strtolower($row['marital_status']); 

    if ($maritalStatus == "yes") { 
     echo "This person is married."; 
    } 
    else { 
     echo "This person is NOT married."; 
    } 
} 
Questions connexes