2009-04-20 8 views
0

Je retreiving une Feild à partir d'une base de données, dans subcat $. Si $ subcat est nul, je veux montrer le formulaire à ajouter à une catégorie, sinon je veux afficher la catégorie. $ subcat existe et est correctement récupéré. C'est soit une valeur nulle, soit une chaîne.si la condition d'autre pour la base de données variables

if ($subcat != null) { 
$showCategory = "<p><strong>Auction Category: </strong> ".$tmp['subcat']; 
} 
else 
{ 
$showCategory = "<form name=\"categoryForm\"> 
    <input name=\"radiobutton\" type=\"radio\" value=\"fakeapproved\" />Fake (Approved)<p> 
    <input name=\"radiobutton\" type=\"radio\" value=\"fakesuspected\" />Fake (Suspected)<p> 
    <input name=\"radiobutton\" type=\"radio\" value=\"keyword\" />Forbidden Keywords<p> 
    <input name=\"radiobutton\" type=\"radio\" value=\"parallelimport\" />Parallel Imports 
    <input name=\"Submit\" type=\"submit\" value=\"Update\" onclick=\"handleClick(".$pk.");return false\"/> 
</form>"; 
} 

Cependant, tout ce qui est montré est la forme. Lorsque $ subcat est definitly, sans doute pas nul, le formulaire est toujours affiché. J'ai essayé d'échanger les clauses else, mais la catégorie était affichée, même si $ subcat était nullement vérifiable.

+0

Pouvez-vous donner un vardump de subcat $ pour le cas que $ subcat est censé être nul? –

Répondre

2

est null fonctionne si la variable est en fait NULL. Si la variable est la chaîne vide (""), zéro, false ou un tableau vide, is_null est évalué à false. Ceci est quelque peu contre-intuitif, donc je suggère toujours d'utiliser empty() à la place.

vide() retourne true 0, chaîne vide, tableau vide, Boolean false ou NULL. Essayez donc:

if(!empty($subcat)){ do something; } 

Utilisez uniquement is_null si vous êtes 100% sûr de vouloir seulement faire quelque chose si la variable est NULL. Vide est généralement préférable de vérifier si vous êtes sur le point d'appeler une méthode de classe sur quelque chose d'inattendu.

Edit: Oh aussi, NULL parfois la récupération à partir d'une base de données vous donne la chaîne « NULL » qui est pas le même comme une valeur NULL réelle. Cela dépend de la base de données que vous utilisez et de la façon dont vous avez sauvegardé la valeur dans la base de données en premier lieu. C'est très facile à manquer et peut prendre une éternité à comprendre. Essayez var_dump() de votre variable subcat pour voir si c'est une chaîne "NULL" (4) ou littéralement une valeur NULL. Cela peut expliquer un comportement inattendu dans votre autre segment de code mentionné dans les commentaires.

+0

Hmm, $ subcat renvoie la chaîne (0) "". J'utilise == null dans une autre classe cependant, et cela fonctionne bien, avec la même chaîne retournée. Impair. Je suis passé à l'utilisation vide selon votre exmaple, cependant le problème se produit toujours, et le $ showCategory plus court est toujours sélectionné. –

+1

Si votre sous-chaîne est la chaîne vide, vide l'évaluera toujours à vrai. Ce sera seulement faux s'il y a une valeur dans subcat (une sous-catégorie réelle). Avez-vous essayé de tester avec une ligne de la base de données avec une chaîne non vide comme subcat? Je n'ai aucune expérience en utilisant l'opérateur == pour évaluer le mot clé null, mais je ne le suggérerais en aucun cas. Il y a de bonnes raisons de croire que les fonctions natives empty() et is_null() existent explicitement pour cette raison. –

+0

Je suis en train de tester des enregistrements dont le sous-paramètre est défini sur 'Faux'. J'ai la catégorie imprimée en haut de la page. Il affiche soit "" pour une sous-catégorie vide, soit le texte de la sous-catégorie. Dans les deux cas, showCategory est défini sur le html le plus court. –

0

en php, vous pouvez vérifier pour une valeur nulle variable être en utilisant is_null

Il faut donc utiliser:

if (!is_null($subcat)) { 
+0

J'utilise la même logique dans une autre classe et cela fonctionne parfaitement. Pourquoi cela ne fonctionnerait-il pas ici? –

Questions connexes