inventaire

Mammouth du PHP | 1967 Messages

29 août 2010, 23:21

En premier lieu tu devrais sécuriser ton entrée $_GET, ne pas laisser introduire n'importe quelle valeur

Ensuite je pense que ta requète ne doit retourner aucun résultat, et c'est pour cela que rien ne s'affiche

vérifie orthographe et casse de la valeur de $_GET['fournisseurs'], voir même sa valeur dans ton if

essaye aussi un var_dump($donnees_fournisseur); juste après le while voir si il retourne quelques chose et combien de fois
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

ViPHP
AB
ViPHP | 5818 Messages

30 août 2010, 04:08

Ben oui, le echo 'waza'; signifie que tu es arrivé à ce niveau sans apparemment d'erreur, alors faut continuer tes tests sur l'accolade suivante et comme dit Spols mettre un var_dump($donnees_fournisseur); (ou print_r($donnees_fournisseur);) juste après le while
        while ($donnees_fournisseur = $reponse_fournisseur->fetch())
                {
                     var_dump($donnees_fournisseur);
                     
                     //if ($donnees_fournisseur['nombre_restant'] <= $donnees_fournisseur['seuil'])...
                }
Et ainsi de suite pour chaque niveau d'accolade si cela ne suffit pas... c'est le principe du débuggage :wink:

Ensuite fait attention il faut écrire :
echo '<div class="sous_nombre">';

et non pas echo '<div class=sous_nombre>';

oranjules
Invité n'ayant pas de compte PHPfrance

30 août 2010, 13:57

Mais c'est bon j'ai trouvé mon erreur : j'avais oublié le "from inventaire" dans ma requete :p et le where était placé au mauvais endroit (il doit être avant le order by)
Merci quand meme, grace à ces tests j'ai pu voir que c'était le while qui marchait pas !

oranjules
Invité n'ayant pas de compte PHPfrance

31 août 2010, 19:26

bon j'ai encore un problème que je trouve... étrange :p (mais cette fois, aucun rapport avec SQL)
J'ai voulu créer un menu d'options pour pouvoir afficher uniquement les produits en sous-nombre. Je me sers donc de variables de session (pour pouvoir naviguer entre les pages). Voila la page du menu d'option :
<?php
include("menu.php");
if (isset($_POST['option']))
{
$_SESSION['option'] = $_POST['option'];
echo 'Changement effectué !';
echo $_SESSION['option'];
}
?>

<h4>Tout afficher sur la liste de produits ?</h4>
<form method="post">
<select name="option" id="option">
<option value="tout">Tout afficher</option>
<option value="sous_nombre">Afficher seulement les produits en sous-nombre</option>
</select>
<input type="submit" value="Changer">
</form>
Avec le echo $_SESSION['option'], je vois que la variable a bien changé (notamment quand elle prend pour valeur "tout", c'est la que se pose le problème).
Voila les lignes que j'ai rajoutées dans la page de liste :
if (isset($_SESSION['option']) AND $_SESSION['option'] = 'sous_nombre')
{
$reponse = $bdd->query('SELECT * FROM inventaire WHERE nombre_restant <= seuil ORDER BY nombre_restant') or die(print_r($bdd->errorInfo())); // Ici, on réagit en fonction du réglage : soit on affiche tout, soit on affiche seulement les produits en sous-nombre
echo $_SESSION['option'];}
else
{
$reponse = $bdd->query('SELECT * FROM inventaire ORDER BY nombre_restant') or die(print_r($bdd->errorInfo()));
}
Et
if (isset($_SESSION['option']) AND $_SESSION['option'] = 'sous_nombre')
	{
	$reponse_fournisseur = $bdd->prepare('SELECT produit, nombre_restant, seuil, fournisseur FROM inventaire WHERE fournisseur = :fournisseur AND nombre_restant <= seuil ORDER BY nombre_restant');
	} // Ici, on fait comme ligne 31-38 : on réagit selon le réglage
	else
	{
	$reponse_fournisseur = $bdd->prepare('SELECT produit, nombre_restant, seuil, fournisseur FROM inventaire WHERE fournisseur = :fournisseur ORDER BY nombre_restant');
	}
A la place des requetes situées dans le "else". Dans la première requete, j'ai encore mis un echo $_SESSION['option'] mais si la condition est vraie. Et la, je vois marqué (en plus de la liste vide) : sous_nombre :shock:
la variable a changé de valeur en cours de route ! D'ou vient le problème ? Merci.
PS : j'ai bien activé session_start() sur chaque page

Mammouth du PHP | 1967 Messages

31 août 2010, 21:45

if (isset($_SESSION['option']) AND $_SESSION['option'] = 'sous_nombre')
Et
if (isset($_SESSION['option']) AND $_SESSION['option'] = 'sous_nombre')
ces parties ne test pas la valeur de $_SESSION['option'], mais en défini la valeur à 'sous_nombre' l'affectation se passant bien, elle renvoie true.

La correction est :
if (isset($_SESSION['option']) AND $_SESSION['option'] == 'sous_nombre')
Et
if (isset($_SESSION['option']) AND $_SESSION['option'] == 'sous_nombre')
Dans ce cas là, c'est bien un test de la valeurs qui est effectué. C'est une erreur classique que j'ai souvent faite.

A retenir pour les test des valeurs: En SQL 1 seul = ; En PHP 2 =
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

oranjules
Invité n'ayant pas de compte PHPfrance

31 août 2010, 22:42

Aaaah oui, chuis bete ! merci beaucoup !