Page 1 sur 4

Pb: requête bonne mais pas d'affichage

Posté : 27 sept. 2010, 11:10
par nisigor
Bonjour à tous,

Je bloque depuis 3j sur un code qui me parait pourtant bon et je me casse la tête pour le faire marcher correctement.
Il s'agit d'une fonction php qui recherche si la valeur passée en paramètre existe dans la base, et qui retourne son id si c'est le cas.

Voici mon code :

Code : Tout sélectionner

function existmag($nommag){ //echo 'nom mag : --'. $nommag.'--<br />'; $query_existmag = "SELECT * FROM `mp_magasin` WHERE `titremag` LIKE '$nommag'"; $mysql_existmag = mysql_query($query_existmag); //echo $query_existmag.'<br />'; $id_mag = 0; if (!$mysql_existmag) { echo "Impossible d'exécuter la requête ($query_existmag) dans la base : " . mysql_error(); //echo '<br />'; exit; } else { while ($rowmagasin = mysql_fetch_assoc($mysql_existmag) ) { echo $rowmagasin['titremag'].'<br />'; $id_mag = $rowmagasin['idmag']; } } return $id_mag; }
Le problème est que la fonction me retourne tout le temps 0 donc que la valeur passée en paramètre n'existe pas dans la base, alors qu'elle existe dans la base. La preuve est que si je fais un echo de la requête et que je l'exécute dans phpmyadmin, je trouve bien des résultats. Il semblerait que ma boucle while ne soit alors pas correcte mais pourquoi ? mystère. :?: :?:

J'ai vérifié partout la syntaxe, et elle est pourtant bonne.
Merci de me venir en aide, je craque...

Re: Pb: requête bonne mais pas d'affichage

Posté : 27 sept. 2010, 12:36
par xTG
Le lien vers la base de donnée peut être qui n'est pas retrouvé du fait que tu te trouves dans une fonction.
Rajoutes un or die(mysql_error()) à ton mysql_query() et tu seras fixé.

Re: Pb: requête bonne mais pas d'affichage

Posté : 27 sept. 2010, 20:33
par nisigor
Bonjour Xtg,

j'ai rajouté le "die", pas de changement : toujours 0 partout et pas de message d'erreur.
En mettant cette fonction directement dans mon code principal, j'obtiens la même chose.
Vraiment je sais plus quoi faire.
Merci de votre aide

Re: Pb: requête bonne mais pas d'affichage

Posté : 28 sept. 2010, 17:18
par christele
Bonjour,
Je ne comprends rien a ton LIKE,
essais ceci

Code : Tout sélectionner

function existmag($nommag) { $query_existmag = "SELECT * FROM `mp_magasin` WHERE `titremag` LIKE '$nommag%' "; $mysql_existmag = mysql_query($query_existmag); $id_mag = 0; if (!$mysql_existmag) { echo "Impossible d'exécuter la requête ($query_existmag) dans la base : " . mysql_error(); exit; } else { while ($rowmagasin = mysql_fetch_assoc($mysql_existmag) ) { echo $rowmagasin['titremag'].''; $id_mag = $rowmagasin['idmag']; } } return $id_mag; }

Re: Pb: requête bonne mais pas d'affichage

Posté : 28 sept. 2010, 17:22
par stealth35
Bonjour,
Je ne comprends rien a ton LIKE,
essais ceci

Code : Tout sélectionner

$query_existmag = "SELECT * FROM `mp_magasin` WHERE `titremag` LIKE $nommag% ";
ca marchera pas, faut mettre des quotes

Re: Pb: requête bonne mais pas d'affichage

Posté : 28 sept. 2010, 17:25
par christele
Oui merci j'avais corrigé :D

Re: Pb: requête bonne mais pas d'affichage

Posté : 28 sept. 2010, 20:58
par nisigor
Bonjour et merci à tous les 2,

En fait j'ai repéré d'où vient le problème.
Ma variable $nommag étant un nom de magasin (qui peut être composé de plusieurs mots) issu d'un champ d'un fichier excel, ce sont les espaces qui posent problème.

A l'exportation de cette variable $nommag, Excel rajoute des "\n" et des " " intempestifs et du coup $nommag avait parfois 2 ou 3 espaces de suite. Chose, bien sûr que je ne pouvais pas voir côté web puisque n-espaces correspond à 1 espace.

Je suis sûr que vous me conseillerez alors d'utiliser la fonction str_replace pour palier à ça, seulement les champs dans ma base contiennent des espaces aussi.
Ex:
SELECT * FROM `mp_magasin` WHERE titremag LIKE 'Monjolimagasin'
($nommag avec la fonction str_replace), seulement pas de résultat car dans ma base c'est enregistré sous le nom de "Mon joli magasin"

SELECT * FROM `mp_magasin` WHERE titremag LIKE ' Mon joli magasin '
($nommag sans la fonction str_replace), seulement pas de résultat non plus car dans ma base c'est toujours enregistré sous le nom de "Mon joli magasin" avec 1 espace entre chaque mot, alors que dans la requête il y en a partout : 1 au début, 1 entre "Mon" et "joli", 2 entre "joli" et "magasin", et 1 à la fin.

Le problème est détecté, maintenant quant à le résoudre, j'attends vos conseils.
(J'ai essayé avec la requête avec '%$nommag%', pas mieux)

Merci

Re: Pb: requête bonne mais pas d'affichage

Posté : 28 sept. 2010, 21:01
par stealth35
Ma variable $nommag étant un nom de magasin (qui peut être composé de plusieurs mots) issu d'un champ d'un fichier excel, ce sont les espaces qui posent problème.
c'est toi qui fais l'import ?

Re: Pb: requête bonne mais pas d'affichage

Posté : 28 sept. 2010, 21:32
par nisigor
Oui pourquoi ??
J'ai adapté un script qui le fais très bien. (Excel reader)

Re: Pb: requête bonne mais pas d'affichage

Posté : 28 sept. 2010, 21:36
par stealth35
Oui pourquoi ??
J'ai adapté un script qui le fais très bien. (Excel reader)
il fait de trim lui ?

Re: Pb: requête bonne mais pas d'affichage

Posté : 28 sept. 2010, 21:43
par nisigor
Je viens de rechercher et en fait non.
Mais trim c'est pas une fonction qui ne supprime qu'uniquement les espaces au début et à la fin d'une valeur (ou de chaine) ?
ça ne gère pas les doublons (ou les n-espaces) dans la valeur ?

Re: Pb: requête bonne mais pas d'affichage

Posté : 28 sept. 2010, 21:47
par stealth35
Je viens de rechercher et en fait non.
Mais trim c'est pas une fonction qui ne supprime qu'uniquement les espaces au début et à la fin d'une valeur (ou de chaine) ?
ça ne gère pas les doublons (ou les n-espaces) dans la valeur ?
si justement :wink:

Re: Pb: requête bonne mais pas d'affichage

Posté : 28 sept. 2010, 22:10
par Cyrano
Je viens de rechercher et en fait non.
Mais trim c'est pas une fonction qui ne supprime qu'uniquement les espaces au début et à la fin d'une valeur (ou de chaine) ?
ça ne gère pas les doublons (ou les n-espaces) dans la valeur ?
si justement :wink:
Pas obligatoirement : tu peux lui passer un second paramètre précisant les caractères que tu veux éliminer à chaque extrémité de la chaîne.

Exemple : je prends une url à laquelle je veux pouvoir ajouter une page spécifique, disons http://www.monsite.com/rubrique/ et ajouter /messcripts.php : j'ai un problème avec le "/" final de l'utrl de base : dans ce cas je fais ceci :
<?php
//...
$base_url = rtrim($url, "/");
$chemin = $base_url ."/messcripts.php";
Et là, ça retire le "/" final et mon url est correcte en sortie.

Lisez la doc de temps en temps, c'Est utile pour découvrir ce genre d'option pratique.

Re: Pb: requête bonne mais pas d'affichage

Posté : 28 sept. 2010, 22:28
par stealth35
Je viens de rechercher et en fait non.
Mais trim c'est pas une fonction qui ne supprime qu'uniquement les espaces au début et à la fin d'une valeur (ou de chaine) ?
ça ne gère pas les doublons (ou les n-espaces) dans la valeur ?
si justement :wink:
Pas obligatoirement : tu peux lui passer un second paramètre précisant les caractères que tu veux éliminer à chaque extrémité de la chaîne.
lui il veux les espaces et les \n, c'est que fait trim par défaut

Re: Pb: requête bonne mais pas d'affichage

Posté : 28 sept. 2010, 22:33
par nisigor
Alors j'ai testé avec trim comme suit:

$nommagtrim = trim($nommag, "\t.");
$nommagtrim = trim($nommag, "\n.");
$nommagtrim = trim($nommag, "\r.");
$nommagtrim = trim($nommag, "Hdle");
$nommagtrim = trim($nommag, "\x0B");
$nommagtrim = trim($nommag, "\x00..\x1F");

ça n'a rien changé (bien sûr j'ai modifié l'appel de la requete en mettant $nommagtrim au lieu de $nommag)

What else ?