Programme de gestion de stock en php

Petit nouveau ! | 3 Messages

04 mars 2008, 00:08

Salut,

je me tourne vers vous car je tourne en rond face à mon écran et je ne trouves pas de solution.

Je vous explique mon soucis.

Ne trouvant pas de programme de gestion de stock qui corresponde à ce que je veux, j'ai mis les mains dans le cambouis (encore une fois ;o))) pour avoir le truc qui me va bien.

Mais voila, je coince...

Je suis en mode test donc c'est un fichier php basique qui sera "décoré"

Voici un visuel

Image

Alors normalement voila comment cela fonctionne

1 - tu rentres un numéro isbn dans la case du haut

2 -
a - l'isbn est connu - cela affiche le titre, l'auteur, etc... dans les case de gauche
b - l'isbn n'est pas connu - cela affiche un petit message qui invites a saisir le produits dans le tableau du bas.

3 - tu es dans le tableau du bas
a- tu rentres les informations et tu valides
b - tu te retrouve dans la situation 2-a , le tableau est rempli avec une quantité de 1

4 - tu souhaites ajouter un produit en stock
a - tu rentre l'isbn dans la case en face de -> ajouter un produit en stock
b - cela rafraichit la page et ajoute un à la quantité du produit visible dans le tableau en haut

5 - tu souhaites enlever un produit du stock
a - tu rentre l'isbn dans la case en face de -> enlever un produit du stock
b - cela rafraichit la page et enleve un à la quantité du produit visible dans le tableau en haut

C'est simple non ?

Alors aujourd'hui fonctionne :
1
2a
3a (le 3 b n'incremente pas la quantité)
Et le 4 et le 5 marche mais mal.
En fait cela fait plus 1 ou moins 1 mais si je cliques denouveau, cela continu (par exemple si je clique sur ajouter, cela fait plus un, mais si je clique ensuite sur enlever, cela fait encore plus 1, cela ne fera moins 1 qu'a la deuxième tentative.

Voici mon code pour faire cela, je sais c'est un peu le foutoire :oops:

Code : Tout sélectionner

<!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN"> <html <?php echo HTML_PARAMS; ?>> <head> <meta http-equiv="Content-Type" content="text/html; charset=<?php echo CHARSET; ?>"> <title>Gestion de Stock</title> </head> <body marginwidth="0" marginheight="0" topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0" bgcolor="#FFFFFF"> <!-- header //--><br> <p align="center"><img src="http://localhost:8888/minilogo.gif" border=0 ><br><br>GESTION DE STOCK<br></p> <?php require "connect.php"; // la page connect doit avoir été créée et dans cet exemple être dans le même dossier que la page en cours // on crée la requête SQL $sql = "SELECT titre, auteur, editeur, products_quantity, products_price, date_price, isbn FROM products WHERE isbn = '".$_POST['f_isbn']."';"; $res = mysql_query($sql); // on envoie la requête while($val = mysql_fetch_array($res)){ // parcours des resultats $isbn = $val['isbn']; $titre = $val['titre']; $auteur = $val['auteur']; $editeur = $val['editeur']; $products_price = $val['products_price']; $date_price = $val['date_price']; $products_quantity = $val['products_quantity']; } ?> <form method="post" action="<?echo $PHP_SELF?>"> <table border="1" width="90%" cellspacing="0" cellpadding="10" align="center"> <tr> <td width="20%" align="right"> ISBN / EAN 13 : </td> <td width="30%"><?php echo $isbn;?></td> <td width="40%"> </td> </tr> <tr> <td width="20%" align="right"> TITRE : </td> <td width="30%"><?php echo $titre;?></td> <td width="40%"> </td> </tr> <tr> <td align="right"> AUTEUR : </td> <td><?php echo $auteur;?></td> <td align="center"> ISBN/EAN13 <input type=hidden name=f_valid1 value="1"><input name="f_isbn"><input type="submit" value="OK"></td> </tr> <tr> <td align="right"> EDITEUR : </td> <td><?php echo $editeur;?></td> <td> </td> </tr> <tr> <td align="right"> PRIX ACHAT : </td> <td><?php echo $products_price;?></td> <td> </td> </tr> <tr> <td align="right"> DATE ACHAT : </td> <td><?php echo $date_price;?></td> <td align="center"> </td> </tr> <tr> <td align="right"> QUANTITE EN STOCK : </td> <td><?php echo $products_quantity;?></td> <td align="center"> </td> </tr> </table> </form> <br><br> <table border="1" width="80%" cellspacing="0" cellpadding="10" align="center"> <tr > <td width="20%" align="center">Ajouter 1 au Stock</td> <td width="20%" align="center"> <?php if ($f_valid31=="1"){ require "connect.php"; // la page connect doit avoir été créée et dans cet exemple être dans le même dossier que la page en cours // on crée la requête SQL $sql1 = "UPDATE products SET products_quantity = products_quantity + 1 WHERE isbn = '".$_POST['f_isbn']."';"; $res1 = mysql_query($sql1) or die('Erreur SQL !'.$sql1.'<br>'.mysql_error()); // on envoie la requête while($val = mysql_fetch_array($res1)){ // parcours des resultats $isbn = $val['isbn']; $titre = $val['titre']; $auteur = $val['auteur']; $editeur = $val['editeur']; $products_price = $val['products_price']; $date_price = $val['date_price']; $products_quantity = $val['products_quantity']; } //réinitialisation pour nouvelle saisie unset($f_valid31); }//fin de if f_valid1==1 ?> <form method="post" action="<?echo $PHP_SELF?>"> ISBN/EAN13 <input type=hidden name=f_valid31 value="1"><input name="f_isbn"><input type="submit" value="OK"></td></td></form> </tr> </table> <br><br> <table border="1" width="80%" cellspacing="0" cellpadding="10" align="center"> <tr > <td width="20%" align="center">Enlever 1 au Stock</td> <td width="20%" align="center"> <?php if ($f_valid41=="1"){ require "connect.php"; // la page connect doit avoir été créée et dans cet exemple être dans le même dossier que la page en cours // on crée la requête SQL $sql2 = "UPDATE products SET products_quantity = products_quantity -1 WHERE isbn = '".$_POST['f_isbn']."';"; $res2 = mysql_query($sql2) or die('Erreur SQL !'.$sql2.'<br>'.mysql_error()); // on envoie la requête while($val = mysql_fetch_array($res1)){ // parcours des resultats $isbn = $val['isbn']; $titre = $val['titre']; $auteur = $val['auteur']; $editeur = $val['editeur']; $products_price = $val['products_price']; $date_price = $val['date_price']; $products_quantity = $val['products_quantity']; } //réinitialisation pour nouvelle saisie unset($f_valid41); }//fin de if f_valid1==1 ?> <form method="post" action="<?echo $PHP_SELF?>"> ISBN/EAN13 <input type=hidden name=f_valid41 value="1"><input name="f_isbn"><input type="submit" value="OK"></td></td></form> </tr> </table> <br><br> <?php if ($f_valid=="1"){ require "connect.php"; // la page connect doit avoir été créée et dans cet exemple être dans le même dossier que la page en cours $products_quantity=$f_products_quantity; $editeur=$f_editeur; $products_price=$f_products_price; $date_price=$f_date_price; $auteur=$f_auteur; $titre=$f_titre; // on utilise l'instruction insert into pour ajouter les nouvelles données $nveau = "insert into products values ('', '', '$editeur', '$products_price', '$date_price', '$auteur', '', '$titre')"; $insert = mysql_query($nveau) or die ("Impossible d'insérer ".mysql_error()); mysql_close($connexion); // Pour fermer l'accès ?> <p align="center"><?php echo "Le nouveau produit à bien été enregistré !";?></p> <?php //réinitialisation pour nouvelle saisie unset($titre, $auteur, $editeur, $products_price, $date_price, $f_valid); }//fin de if f_valid==1 ?> <form method="post" action="<?echo $PHP_SELF?>"> <table border="1" width="50%" cellspacing="0" cellpadding="0" align="center"> <tr> <td width="20%" align="right"> ISBN / EAN 13 : </td> <td width="30%"> </td> </tr> <tr> <td align="right"> TITRE : </td> <td> <input type="text" name="f_titre" size="64"></td> </tr> <tr> <td align="right"> AUTEUR : </td> <td> <input type="text" name="f_auteur" size="64"></td> </tr> <tr> <td align="right"> EDITEUR : </td> <td> <input type="text" name="f_editeur" size="64"></td> </tr> <tr> <td align="right"> PRIX ACHAT : </td> <td> <input type="text" name="f_products_price" size="10"></td> </tr> <tr> <td align="right"> DATE ACHAT : </td> <td> <input type="text" name="f_date_price" size="10"></td> </tr> </table> <p align="center"> <input type=hidden name=f_valid value="1"> <input type="submit" value="Bouton de validation du nouveau produit"> </p> </form> </body> </html>
Si vous avez des pistes
Car j'ai vraiment l'impression de ré-inventer la roue... ;)

Mammouth du PHP | 19672 Messages

04 mars 2008, 08:30

Ton code implique que ton php.ini soit configuré avec le register_globals à ON : par défaut, cette directive est à OFF depuis la version 4.2 de PHP et pour mémoire sera non modifiable (et toujours à OFF) en PHP6

ça implique que la récupération de tes données de formulaire doivent se faire via les superglobales.

Ainsi, là où tu as mis :
<?php
if ($f_valid=="1")
{
    // la page connect doit avoir été créée et dans cet exemple être dans le même dossier que la page en cours
    require "connect.php";

    $products_quantity = $f_products_quantity;
    $editeur           = $f_editeur;
    $products_price    = $f_products_price;
    $date_price        = $f_date_price;
    $auteur            = $f_auteur;
    $titre             = $f_titre;
//...
?>
Il serait de loin préférable de faire :
<?php
if (isset($_POST['f_valid']) && $_POST['f_valid'] == "1")
{
    // la page connect doit avoir été créée et dans cet exemple être dans le même dossier que la page en cours
    require "connect.php";

    $products_quantity = isset($_POST['f_products_quantity']) ? $_POST['f_products_quantity'] : 0;
    $editeur           = isset($_POST['f_editeur'])           ? $_POST['f_editeur']           : "";
    $products_price    = isset($_POST['f_products_price'])    ? $_POST['f_products_price']    : "";
    $date_price        = isset($_POST['f_date_price'])        ? $_POST['f_date_price']        : "";
    $auteur            = isset($_POST['f_auteur'])            ? $_POST['f_auteur']            : "";
    $titre             = isset($_POST['f_titre'])             ? $_POST['f_titre']             : "";

//...
?>
Ce sera déjà un début.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Petit nouveau ! | 3 Messages

04 mars 2008, 10:55

ok je fait la modif...

Et pour le reste de mes soucis, une idée, ou c'est lié ?

Merci

Mammouth du PHP | 19672 Messages

04 mars 2008, 11:23

Vérifie les données envoyées par le formulaire utilisé en mettant ceci dans la partie récupération :
echo('<pre>' . "\n");
var_dump($_POST);
echo("</pre>\n");
Ça te donnera déjà des pistes sur ce qui se passe.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Petit nouveau ! | 3 Messages

08 mars 2008, 17:37

Bon,

comme je n'arrive pas à trouver une solution, j'ai contourné le problème avec autant de page que de fonction.

Une page pour ajouter un nouveau produit
Une page pour ajouter 1 à la quantité d'un produit
Une page pour enlever 1 à la quantité d'un produit

Mais j'ai encore un soucis.

Lorsque je rafraîchi la page, le compteur continu l'incrémentation (pour les pages enlever et ajouter un produit)

Une idée ?

Voici par exemple la page "ajouter un produit"

Code : Tout sélectionner

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Ajout produit</title> <meta name="generator" content="BBEdit 7.1.4"> </head> <body marginwidth="0" marginheight="0" topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0" bgcolor="#FFFFFF"> <!-- header //--><br> <p align="center"> <img src="http://localhost:8888/minilogo.gif" border=0 ><br> <br>GESTION DE STOCK<br> </p> <br><br> <?php if ($f_valid31=="1"){ require "connect.php"; // la page connect doit avoir été créée et dans cet exemple être dans le même dossier que la page en cours // on crée la requète SQL $sql2 = "UPDATE products SET products_quantity = products_quantity +1 WHERE isbn = '".$_POST['f_isbn']."';"; $res2 = mysql_query($sql2) or die('Erreur SQL !'.$sql2.'<br>'.mysql_error()); // on envoie la requète while($val = mysql_fetch_array($res1)){ // parcours des resultats $isbn = $val['isbn']; $titre = $val['titre']; $auteur = $val['auteur']; $editeur = $val['editeur']; $products_price = $val['products_price']; $date_price = $val['date_price']; $products_quantity = $val['products_quantity']; } //réinitialisation pour nouvelle saisie unset($f_valid31, $f_isbn); }//fin de if f_valid1==1 ?> <form method="post" action="<?echo $PHP_SELF?>"> <table border="1" width="80%" cellspacing="0" cellpadding="10" align="center"> <tr > <td width="20%" align="center">Ajouter 1 au Stock</td> <td width="60%" align="center" valign="middle">ISBN/EAN13 : <input type=hidden name=f_valid31 value="1"><input name="f_isbn"><input type="submit" value="OK"></td> </tr> </table> </form> <br><br> <?php require "connect.php"; // la page connect doit avoir été créée et dans cet exemple être dans le même dossier que la page en cours // on crée la requète SQL $sql = "SELECT titre, auteur, editeur, products_quantity, products_price, date_price, isbn FROM products WHERE '{$_POST['f_isbn']}' = isbn;"; // on envoie la requètte $res = mysql_query($sql) or die(mysql_error().'<br />'.$sql); while($val = mysql_fetch_array($res)){ // parcours des resultats $isbn = $val['isbn']; $titre = $val['titre']; $auteur = $val['auteur']; $editeur = $val['editeur']; $products_price = $val['products_price']; $date_price = $val['date_price']; $products_quantity = $val['products_quantity']; } ?> <form method="post" action="<?echo $PHP_SELF?>"> <table border="1" width="90%" cellspacing="0" cellpadding="10" align="center"> <tr> <td width="20%" align="right"> ISBN / EAN 13 : </td> <td width="30%">&nbsp;<?php echo $isbn;?></td> </tr> <tr> <td width="20%" align="right"> TITRE : </td> <td width="30%">&nbsp;<?php echo $titre;?></td> </tr> <tr> <td align="right"> AUTEUR : </td> <td>&nbsp;<?php echo $auteur;?></td> </tr> <tr> <td align="right"> EDITEUR : </td> <td>&nbsp;<?php echo $editeur;?></td> </tr> <tr> <td align="right"> PRIX ACHAT : </td> <td>&nbsp;<?php echo $products_price;?></td> </tr> <tr> <td align="right"> DATE ACHAT : </td> <td>&nbsp;<?php echo $date_price;?></td> </tr> <tr> <td align="right"> QUANTITE EN STOCK : </td> <td>&nbsp;<?php echo $products_quantity;?></td> </tr> </table> </form> <br><br> <div align="center"><a href="/Gestion_stock/gest_stock.php">Retour accueil</a></div> </body> </html>