8379 sujets

Développement web côté serveur, CMS

Pages :
Bonjour,
J'ai un problème avec une requête SQL.

Aucun produits ne s'affiche.
Si j'enlève "categorie = "Caméras"" dans al requête après le WHERE, les produits s'affiche... mais j'ai besoin de cette clause!
<p><label for="produits">Produits:</label><br>
<?php
$select = mysql_query('SELECT produits FROM produits 
		WHERE categorie = "Caméras"  
			AND ftp = "yes"
			AND produits NOT IN ("IR-A 3mp","IR-A 4mp","IR-B 5mp","IR-B 7mp","IR-A 6mp","IR-C","PRO-X","IR-10T","BF-7 black","FL-7 black","HD-10 black","IR-10 black","IR-5 black","IR-6 black","IR-7 black","PRO-X Plus black","TINY black","TINY-D black","TINY-W black","TINY-W2 black")
		ORDER BY produits') or die("67 - ".mysql_error());
while ($data = mysql_fetch_array($select)){
	if ( !empty($data['produits'])){
		?>
	<span class="option">
		<input name="produits" type="checkbox" value="<?php echo $data['produits'] ?>"><?php echo $data['produits'] ?>
	</span>
		<?php
	}
}
?>
</p>


Là je sèche vraiment, je n'arrive pas à comprendre pourquoi ça fait ça.
Non, aucun message d'erreur. Juste un gros rien... J'ai fini par faire ma sélection autrement, mais ça ne règle pas le fond du problème...
Peux tu lancer ta requête via phpmyadmin ?
si tu as un message d'erreur, on pourra voir d'où le problème viens, sinon, c'est que ça viens de ton script Smiley decu
si le "or die" marche pas, c'est que ta requête est juste...

Que donne un var_dump sur $select ? s'il retourne bool(false) c'est qu'il y a une erreur dans ta requête. S'il retourne un mysql_ressource, regarde le num_rows.
Et si tu entres ta requete directement dans phpmyadmin par exemple ? Ca donne quoi ? Aucun résultat également ?

Tu pourrais donner quelques entrées de ta table produits pour voir si ce n'est pas un problème de syntaxe.

A tout hasard, essais de remplacer ta condition categorie = "Caméras" par : categorie LIKE "%Caméras%"

-> :
'SELECT produits FROM produits 
		WHERE categorie LIKE "%Caméras%"  
			AND ftp = "yes"
			AND produits NOT IN ("IR-A 3mp","IR-A 4mp","IR-B 5mp","IR-B 7mp","IR-A 6mp","IR-C","PRO-X","IR-10T","BF-7 black","FL-7 black","HD-10 black","IR-10 black","IR-5 black","IR-6 black","IR-7 black","PRO-X Plus black","TINY black","TINY-D black","TINY-W black","TINY-W2 black")
		ORDER BY produits'


Car ta condition actuelle est stricte, avec LIKE et %char%, tu chercheras une catégorie qui contient le mot Caméras
MErci pour vos réponses.

J'ai vérifier ma requête directement dans phpMyadmin et elle me renvoie bien les bon éléments. Donc ma requête est juste.
C'est bizarre, j'ai également eu le même problème sur une autre page pour une requête semblable.

Apoooo: J'ai tenté en mettant un LIKE, mais j’obtiens le même résultat. De tout façon j'ai vraiment besoin d'une requête stricte (categorie='Caméras') car j'ai une autre catégorie qui se nomme "Caméras vidéo".

Lothindil: Je ne connait pas var_dump. Je fais ça comment?
Salut,

Si ta requête revoie quelque chose sur le serveur, mais rien sur ton script, c'est peut être un problème d'encodage.
Peux tu nous donner l'encodage de ton fichier php et celui de ta base de données ?
Aussi, peux tu essayer de remplacer
categorie LIKE "%Caméras%"
par
categorie LIKE "%Cameras%"
(enlever l'accent) dans ton code et voir si ça te rend un résultat ?
juliesunset a écrit :


Lothindil: Je ne connait pas var_dump. Je fais ça comment?



Salut,

Tout simplement, var_dump($sql)

$sql contient le sois disant résultat de la requête.
Merci Noisette

encodage de la bdd :utf8_general_ci
encodage de la page: utf8

et non je ne peux pas enlevé l'accent. C'est bien écris "Caméras" dans dans la bdd.


Avec var_dump j'ai fait comme ceci:
$select = mysql_query('SELECT produits FROM produits 
			WHERE categorie = "Caméras"  
			AND ftp = "yes"
			AND produits NOT IN ("IR-A 3mp","IR-A 4mp","IR-B 5mp","IR-B 7mp","IR-A 6mp","IR-C","PRO-X","IR-10T","BF-7 black","FL-7 black","HD-10 black","IR-10 black","IR-5 black","IR-6 black","IR-7 black","PRO-X Plus black","TINY black","TINY-D black","TINY-W black","TINY-W2 black")
			ORDER BY produits') or die("73 - ".mysql_error());
while ($data = mysql_fetch_array($select)){
	if ( !empty($data['produits'])){
		echo var_dump($sql) ;
	}
}

Mais je n'est obtenue aucun résultat
Modifié par juliesunset (28 Feb 2013 - 15:29)
Coucou
J ai eu le meme genre de probleme, pour moi cela venait bien de l encodage. Tu as un utf8 ci donc la majuscule de camera embrouille un peu. Mais une min (juste dans la requette, ne touche pas a la bdd). J espere que pour toi cela suffira aussi.
ton var_dump écrit le quand tu reçois le résultat, par exemple au milieu de ta page html. là où le résultat est censé s'affiché. (au pire tu ouvre des balises php dans l'html).
Il aurait fallu utiliser des ID pour tes catégories, plutôt que le texte. Je serais toi, je reprendrai cette partie de la BDD.

Si c'est trop compliqué, tu peux faire un LIKE "Caméras" (sans les %) et ça devrait passer et ne pas créer de conflit avec tes autres catégories. Mais bon, c'est un peu de la bidouille tout ça.
Modifié par jb_gfx (28 Feb 2013 - 18:02)
Merci pour ta réponse jb_gfx.

Effectivement, plus j'y pense plus je crois qu'effectivement ça créerais moins de problème d'utilisé les id des catégories avec le système de jointure... Mais c'est une grosse partie à reprendre.

J'ai quand même essayé un LIKE "Caméras", sans résultat.
Hello
peux tu essayer de faire ta requete en changeant :
WHERE categorie = "Caméras"

par
WHERE categorie = "'.utf8_encode(Caméras).'"

ou
WHERE categorie = "'.utf8_decodeCaméras).'"
Sur ta page change les directives d'affichage des erreurs avec :

ini_set("display_errors", '1');


Et comme JuseN l'a dit, fais directement le var_dump après le mysql_fetch, sans rentrer dans la condition.

Aussi, pour un affichage du var_dump plus sexy , utilise une fonction de ce type:

function show($data){echo "<pre>";var_dump($data);echo "</pre>";}
Merci noisette, j'ai fait comme tu suggère avec le encode et ça fonctionne!

Zed13: J'ai tout de même essayé tes suggestions. Je ne suis pas sûr où mettre le "ini_set("display_errors", '1');" ? J'ai mis directement sous ma requête.
et pour la function j'ai mis directement dans le while. Mais pas de changement.

Je pense que je vais quand même éditer ma bdd pour utilise les id des catégories. Ça m'évitera ce genre de problème à l'avenir.
De rien,
Je pense que tes fichiers ne sont pas en utf8, tu devrai changer l'encodage pour éviter ce genre de problèmes Smiley smile (utf8 sans BOM si tu peux)
Pages :