Code super simple mais php plante

Alexandretest
Invité n'ayant pas de compte PHPfrance

26 août 2013, 10:49

Bonjour !

Truc de fou sur lequel je bloque depuis 1 semaine

J'ai un code tout simple qui récupère des valeurs dans une base de données Oracle.
Mon problème survient lorsque je traite ces données.

Code : Tout sélectionner

<?php $matched = $row['MATCHED']; echo "valeur: " .$matched; if ($matched != 'NOMATCH') { ?>résultat: PENDING<?php } else { ?>résultat: CLOSED<?php } ?>
Donc je stocke la valeur dans la variable $matched et selon le contenu, j'affiche PENDING ou CLOSED.

Sauf que lorsque le contenu est 'NOMATCH' il passe quand même dans la condition et affiche PENDING au lieu de CLOSED.

c'est frappant lorsque j'ai ajouté le echo pour vérifier le contenu et que j'ai affiché:

valeur: NOMATCH
résultat: PENDING

Dingue non ?

Quelqu'un pour m'aider ?

ViPHP
xTG
ViPHP | 7331 Messages

26 août 2013, 11:55

Fais un var_dump() plutôt de ta variable contenant NO MATCH.
Je ne serai pas étonné d'y retrouver une taille indiquant un caractère non imprimable ou bien un espace. ;)

Alexandretest
Invité n'ayant pas de compte PHPfrance

26 août 2013, 12:07

Merci, en effet le var_dump indique un espace. Mais la base de données contient bien NOMATCH sans espace.

D'où peut-il provenir ?

Code : Tout sélectionner

string(8) "NOMATCH "
Le code utilisé pour récupérer la valeur est le suivant:

Code : Tout sélectionner

while ($row = oci_fetch_array ($stid, OCI_BOTH+OCI_RETURN_NULLS)) { $matched = $row['MATCHED']; }

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

26 août 2013, 12:46

salut,

ton code n'ajoute rien, est tu certain qu'il n'y a pas d'espace dans la base ?
les éditeurs SQL affiche la donnée tu ne vois pas l'espace (par exemple avec pl dev tu ne le verra pas).
Par contre s'il t'indique le nombre de caractère tu pourras comparer avec ce que tu vois.

cela peux aussi venir de la requête SQL si tu fait quelque chose de plus moins simple.


@+
Il en faut peu pour être heureux ......

Mammouth du PHP | 571 Messages

26 août 2013, 12:54

Merci, en effet le var_dump indique un espace. Mais la base de données contient bien NOMATCH sans espace.

D'où peut-il provenir ?

Code : Tout sélectionner

string(8) "NOMATCH "
Le code utilisé pour récupérer la valeur est le suivant:

Code : Tout sélectionner

while ($row = oci_fetch_array ($stid, OCI_BOTH+OCI_RETURN_NULLS)) { $matched = $row['MATCHED']; }
l'espace provient sans doute de la BD et à été introduit au moment de l'insertion de NOMATCH à partir du formulaire. Pour vérifier que l'espace est bien dans la BD il suffit de vérifier la taille de la chaîne depuis SQL * Plus:
SELECT length(MATCHED) FROM LA_TABLE;
si cette requête retourne 8 ça confirme bien que l'espace est dans la BD.

Pour éviter d'avoir des espaces sur des string il faut nettoyer les espaces à chaque ajout d'une chaîne en appliquant la fonction trim() sur la donnée reçue du formulaire