Requête mysql erronée ?

Résolu/Fermé
cafe - 24 oct. 2013 à 12:06
 Utilisateur anonyme - 24 oct. 2013 à 18:08
Bonjour,

J'ai un doute sur une requête mysql, qui fonctionnait bien hier matin en me renvoyant les données attendues, mais qui à présent ne fonctionne plus... J'ai beau chercher je ne vois pas pourquoi ya problème maintenant.

1. $stock devient undefined index. Si je le remplace par $data['prods_stock'], je n'ai plus undefinied index, mais je n'ai que le message correspondant à $stock_insuffisant qui s'affiche, et ce avec $stock qui renvoie ' '.

Les autres messages ne s'affichent pas, bien que les quantités soient épuisées ou en stock ou en stock faible selon l'article choisi. Hier tout s'affichait correctement. Quelle est mon ereur SVP ? :)
Merci de votre aide.



$afficher_infos_prods=("SELECT * FROM prods WHERE prods_souscat='fil à coudre' AND prods_coloris='".$_POST['coloris']."' AND prods_longueur='".$_POST['longueur_fil']."' ") or die(mysql_error() ); $result=mysql_query($afficher_infos_prods);

while($data = mysql_fetch_assoc($result) )
{$coloris = htmlspecialchars($data['prods_coloris']);
$longueur = htmlspecialchars($data['prods_longueur']);
$prix = htmlspecialchars($data['prods_prix']);
$stock = htmlspecialchars($data['prods_stock']);
}

if ($stock < 0)
{$epuise = ' Stock épuisé. ';}
else if ($_POST['quantite_fil'] > $stock)
{$stock_insuffisant = " Attention, seulement '".$stock."' pièces sont disponibles dans l'immédiat ";}
else if ($stock < 11)
{$low_stock = ' Attention, dernières pièces en stock ! ';}
else {$stock_ok = ' En stock !'; }



3 réponses

Hello, je vais encore préciser ma recherche, mais j'ai un petit doute sur quelque chose.

ligne #1 : tu stock ta requête dans une variable
ligne #2 : tu exécute ta requête en appelant mysql_query($tavariable);

Le or die(mysql_error()) ce met après la fonction mysql_query(); donc à ta ligne 2 et non à la ligne #1.

je ne pourrais te dire si c'est la cause de ton problème.

Au niveau syntaxique tous me semble correct

Effectue ce petit test et donne nous des news la dessus. je vais continuer à chercher de mon côté
0
Utilisateur anonyme
24 oct. 2013 à 15:44
Donc :

$afficher_infos_prods= "SELECT * FROM prods WHERE  prods_souscat='fil à coudre' AND prods_coloris='".$_POST['coloris']."' AND prods_longueur='".$_POST['longueur_fil']."' "; 

$result=mysql_query($afficher_infos_prods) or die (mysql_error());
0
Hello,

Merci pour ta remarque. Ok, j'intègre.
J'ai testé en mettant $result=mysql_query($afficher_infos_prods) or die (mysql_error()); mais $stock = htmlspecialchars($data['prods_stock']); reste undefined variable, et je ne vois aucun changement au niveau de l'affichage de mes messages $stock_ok, $stock_insuffisant, $epuise, etc..
Celui qui s'affiche reste $stock_insuffisant --> (Attention, seulement '' pièces sont disponibles dans l'immédiat) . Il ne dit pas combien de pièces en stock, alors que hier ça marchait !! ??
Où est mon erreur ?

Merci :)
0
Pour confirmer, si, dans ta boucle while, tu echo :
- $data['prods_stock'] : ça t'affiche le nombre correctement ?
- $stock : ça t'affiche undefined ?

2ème petit test :

ton entrée prods_stock dans ta table est bien un int ?

essaie de ne pas mettre htmlspecialchars(); juste $stock = $data['prods_stock']

A+
0
Re,

Oui prods_stock est bien un INT.
J'ai déjà tenté et re retenté de remplacer ma var $stock par $data['prods_stock'], partout où j'ai des itérations de $stock.
Ex:
 
while($data = mysql_fetch_assoc($result) )
{$coloris = htmlspecialchars($data['prods_coloris']);
$longueur = htmlspecialchars($data['prods_longueur']);
$prix = htmlspecialchars($data['prods_prix']);
$data['prods_stock'];
}

if ($data['prods_stock'] < 0)
{$epuise = ' Stock épuisé. ';}
else if ($_POST['quantite_fil'] > $data['prods_stock'])
{$stock_insuffisant = " Attention, seulement '".htmlspecialchars($data['prods_stock'])."' pièces sont disponibles dans l'immédiat ";}
else if ($data['prods_stock'] < 11)
{$low_stock = ' Attention, dernières pièces en stock ! ';}
else {$stock_ok = ' En stock !'; }

En faisant cela, effectivement ma undefined var $stock qui n'existe plus n'est plus dite undefined, je n'ai plus de notification, alors qu'elle était bien définie me semble-t-il !
$data['prods_stock'] seule passe bien, elle n'est pas undefined.

Mais le problème perdure : le seul message qui s'affiche même si j'ai 3000 pces en stock, c'est celui correspondant à $stock_insuffisant , c'est à dire " Attention, seulement '' pièces sont disponibles dans l'immédiat ". --> ".$data['prods_stock']."' encastrée dans $stock_insuffisant ne renvoie rien du tout. Alors que hier, ça m'indiquait 56 pces en stock, ou autre message selon l'état du stock.
Je n'ai pas d'autre notification d'erreur.

Any idea? :/ Thanks.
0
J'ai répondu un peu vite, sorry.

Tu disais : si j'echo l'une de mes $data[''] à l'intérieur de ma while loop, j'ai des notifications undefined variables pour chacune d'elles. Pourtant elles sont correctement définies, non? What's the fff ?

Le truc c'est que hier ça s'affichait normalement, et plus maintenant... why?

Merci
0
Ce que je te propose c'est de faire quelque debug pour voir ou serait situé le problème.

donc fait une copie de ton code, car on va ajouter quelque echo et exit(); un peu partout :)


ce que je te propose c'est de placé le code suivant, juste avant la boucle while :
echo 'Nombre d\'entrée : '.mysql_num_rows().'<br/>';

et ensuite, dans les première lignes te ta boucle while, place le code suivante :
echo '<pre>';
print_r($data);
echo '</pre>';
exit();

à ce stade là on pourra constater si on récupère les bonnes valeurs depuis la base de donnée.

[edit] Maintenant que j'y repense, il serait possible que ta requête sql ne retourne rien, c'est pour cela que $stock serait undefined, fait le test tu me diras
0
Ok, je fais les tests dont tu me parles, feedback dans qq mn.

Par contre, ma boucle me retourne bien le prix unitaire de chaque item avec $prix = $data['prods_prix'];...
Je check selon tes instructions et te dis ce qu'il se passe
0
lol lorsque je place
echo 'Nombre d\'entrée : '.mysql_num_rows().'<br/>';
juste avant ma while loop, et
echo '<pre>';
print_r($data);
echo '</pre>';
exit();
dans ma loop, ou même juste après

ben j'ai rien qui s'affiche... oops
0
Utilisateur anonyme
24 oct. 2013 à 18:08
Ce que je pourrais te proposer pour la suite c'est de continuer sur un système de message un peu plus instantané

je sais que c'est contraire à l'optique d'un forum, mais on va pas SPAM, on pourra marquer le résultat dans le prochain poste :D

je pourrais te proposer d'allez sur ce petit chat : http://grafikart-chat.eu01.aws.af.cm/
Démo en live de Grafikart pour son tutoriel : https://www.grafikart.fr/tutoriels/socketio-tchat-366

ça nous permettra de parler directement :D
0