Page 1 sur 2

Problème de champ à NULL

Posté : 03 mai 2011, 16:02
par Al PiGiNo
Bonjour,
je savais pas trop où poster mon sujet, mais vu que ça à l'air d'être un problème simple, que je n'arrive bien sûr pas à résoudre, je suis venu ici.

Voici mon code simplifié :
$query='SELECT nom
            FROM `depot`
            ORDER BY nom';
$requete=mysql_query($query)or die (mysql_error());
while ($result=mysql_fetch_assoc($requete) {
if ($result['nom'] == null) {
echo '0';
}
else {
echo '1';
}
}
Voilà en gros mon code largement simplifier.
En fait, même quand le champ `nom`est null, il ne rentre pas dans le if et je n'ai "que des 1".
J'ai essayé :
- != null
- empty()
- isnull
- == "NULL"
- === null
...

Et comme vous vous en doutez, rien n'y fait, et dans la liste que je veux afficher, des Null s'affiche au lieu des espaces voulus.
Toutes les idées sont évidemment les bienvenues.

Bien cordialement, Cédric.

Re: Problème de champ à NULL

Posté : 03 mai 2011, 16:11
par xTG
C'est bien un null et pas un vide ? Car ce n'est pas la même chose.

Re: Problème de champ à NULL

Posté : 03 mai 2011, 16:21
par Al PiGiNo
"NULL" c'est ce qui est écrit dans la base de donnée.

Re: Problème de champ à NULL

Posté : 03 mai 2011, 21:40
par moogli
peut tu nous montrer le create table de la table dépôt et un dump de données (5 lignes devraient suffire).

suivant le champ de la table, ça peut être null, ou une chaine de caractère (a tu testé == 'null' ?).


@+

Re: Problème de champ à NULL

Posté : 04 mai 2011, 09:52
par Al PiGiNo
En fait je n'ai pas à proprement dis fais un create table en SQL, je l'ai créé avec phpmyadmin colonne par colonne.
A la base, cette colonne est un varchar(100), null --> non, Defaut --> aucun.
Elle est mise à jour tous les jours avec un fichier .txt où il est écrit parfois NULL.

Et j'ai essayé == 'null' evidemment ;)
Vu que les NULL sont dans le fichier texte, j'ai evidemment pensé qu'il les prennait pour une chaine de caractères, mais bon même en essayant, cela ne fonctionne pas...
Voici les 5 premières lignes affiché grâce à SELECT dif_civilite, dif_nom, dif_prenom, dif_denomi FROM `diffuseur` WHERE `dif_denomi`='null'

dif_civilite dif_nom dif_prenom dif_denomi
MR DUPONT DUPONT NULL
MR DUPONT YANNICK NULL
MR DUPONT FREDERIC NULL
MR DUPONT PASCAL NULL
MR DUPONT NULL NULL


Voici mon php :
if (isset($_POST['rech_depot'])) {
$depot=$_POST['depot'];
$nil=$_POST['nil'];
$query='SELECT dif_nil, dif_civilite, dif_nom, dif_prenom, dif_adresse, dif_nim, dif_cp, dif_denomi, dif_designation, dif_deposi_nim
	FROM `diffuseur`
	WHERE dif_deposi_nim LIKE \'%'.$depot.'%\'
	AND dif_nil LIKE \''.$nil.'\'
	ORDER BY dif_denomi, dif_nom, dif_prenom';
$requete=mysql_query($query);
echo '<form method="post" action="#" name="select_nil" />';
echo '<select name="choix_nil">';
while ($result=mysql_fetch_assoc($requete)) {

if ($result['dif_denomi'] == "NULL") {
$var='&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '.$result['dif_nom'].' '.$result['dif_prenom'].' '.$result['dif_adresse'].' '.$result['dif_cp'].' ';
echo '<option value="'.$result['dif_nim'].'" label="'.$var.'" >'.$var.'</option>';
}
else {
$var=''.$result['dif_denomi'].' '.$result['dif_nom'].' '.$result['dif_prenom'].' '.$result['dif_adresse'].' '.$result['dif_cp'].' ';
echo '<option value="'.$result['dif_nim'].'" label="'.$var.'" >'.$var.'</option>';
}
}
echo '</select>';
echo '<input type="submit" name="valid_nil" value="Valider mon commerce" />';
echo '</form>';

}

Re: Problème de champ à NULL

Posté : 04 mai 2011, 11:42
par olivierg
essaye avec 3 === et sans guillemets, ou avec isnull, comme ça :
if ($result['dif_denomi'] === NULL)
ou alors avec isnull comme ça :
if (isnull($result['dif_denomi']))
bon courage

Re: Problème de champ à NULL

Posté : 04 mai 2011, 13:39
par xTG
Si dans PhpMyAdmin le NULL est en italique c'est un NULL.
S'il n'est pas en italique c'est que c'est une chaîne de caractère et dans ce cas il faut faire attention à la casse : null != NULL ;)

Re: Problème de champ à NULL

Posté : 04 mai 2011, 13:45
par Al PiGiNo
Le null n'est pas en italique et est écrit "NULL".

Or comme mentionné plus haut, ...
if ($result['dif_denomi'] == "NULL")
... ne fonctionne pas, il va directement dans le else.
J'ai essayer de passer par une variable tierce du genre ...
$var = $result['dif_denomi']
if ($var] == "NULL")
... mais sans succès également, je pensais que c'était tout simple et finalement :|

Re: Problème de champ à NULL

Posté : 04 mai 2011, 21:44
par Ryle
Et si tu fais un var_dump($result['dif_denomi']), et un strlen($result['dif_denomi']) histoire que l'on voit à quoi ressemble cette variable une fois récupérée par php ?

Re: Problème de champ à NULL

Posté : 05 mai 2011, 09:20
par olivierg
al_pagino : tu as testé ce que je t'ai mis ? ça devrait fonctionner.. (si c'est un champ NULL et non une chaine de caractères)

Re: Problème de champ à NULL

Posté : 05 mai 2011, 10:44
par Al PiGiNo
@olivierg : Oui, regarde mon premier message, testé sans succès

@Ryle :
- var_dump : Renvoie rien du tout
- strlen : Renvoie 32 à chaque fois pour des villes differentes

Re: Problème de champ à NULL

Posté : 05 mai 2011, 10:53
par Al PiGiNo
En fait, lorsque j'importe mon fichier .txt, les colonnes ont un nombre fixe de caractères, soit 32.
Merci à Ryle de m'avoir fait découvrir cette fonction.

La solution parait si bête ... :
if ($result['dif_denomi'] == "NULL                            ")
NULL (4 caractères) + 28 espaces !...

Re: Problème de champ à NULL

Posté : 05 mai 2011, 13:00
par xTG
Ah ouais fallait y penser. :p

Petit truc pour te simplifier la vie pour de futurs fichiers qui viendraient tout foutre en l'air si changement du nombre d'espaces :
if ( strtolower(substr($result['dif_denomi'],0,4)) == "null")

Re: Problème de champ à NULL

Posté : 05 mai 2011, 17:20
par Al PiGiNo
Je prend ta solution xTG, merci de votre aide en tout cas.

Re: Problème de champ à NULL

Posté : 05 mai 2011, 17:25
par popy
trim ?