choix multiple et traitement des données

choix multiple et traitement des données - PHP - Programmation

Marsh Posté le 05-01-2016 à 12:41:10    

Bonjour,
 J'ai créé une table contenant trois colonnes ;
 Noms (il s'agit de noms de fruits ), Saison , Prix
 
 J'ai créé un formulaire contenant une liste déroulante des différents noms de fruits qui me permet d'aller extraire au niveau de la table le Prix et la Saison et les afficher . Jusque là tout fonctionne comme je le veux .
 Maintenant je voudrais augmenter à souhait le prix du fruit affiché comment ? En créant dans une autre page un nouveau formulaire contenant un seul champs de saisie intitulé '' Montant à augmenter '' et qui devra s'afficher en dessous de l'affichage du prix et de la saison .
 Je voudrais à partir de ce formulaire saisir le montant que je voudrais augmenter sur le prix puis exporter au niveau de la table le nouveau prix c'est à ce niveau ou j’éprouve toute les difficultés du monde car malgré le fait que le deuxième formulaire s'affiche correctement wamp me signale à ce niveau deux erreurs :
 Notice: Undefined index: montantaug in C:\wamp\www\Nouveau dossier (2)\programme_recherche2\liste2.php on line 23
 Notice: Undefined variable: prix in C:\wamp\www\Nouveau dossier (2)\programme_recherche2\liste2.php on line 3
 Et puis je souhaiterais savoir pourquoi aprés avoir valider le montant à augmenter tout le contenu de l'ecran disparaît seul s'affiche le deuxieme formulaire .
 Cette difficulté me pourrit la vie depuis bientôt dix jours j'ai beau essayer de piocher une solution sur le net mais je ne trouve pas de solution .
 Je me suis rendu compte que si je réunis tout dans un seul formulaire ca marche nickel, mais moi je tiens à avoir deux formulaires distincts.
 Je rappelle je suis débutant je ne connais que le html et le PHP je connais absolument rien en Java script voici mon code :
 
-------------------------------------------------------------------------------------------
le contenu du fichier liste2.php
-------------------------------------------------------------------------------------------
 
<html >  
 
<body>  
   
<?php  
           
    try  
       {  
        $bdd = new PDO('mysql:host=localhost;dbname=productions','root','',array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));  
       }  
    catch(Exception $e)  
       {  
        die('Erreur : '.$e->getMessage());  
       }  
     
     
     
  ?>  
  // Liste déroulante  
   
    <form method="POST" action="liste.php">  
        <label for="fruits">Choisir le type de fruit que vous voulez changer le prix</label><br><br/>  
            <select name="fruits" id="fruits">  
<?php  
        $reponse = $bdd->query('SELECT * FROM fruits');  
    while ($donnees = $reponse->fetch())  
       {  
  ?>  
        <option value="<?php echo $donnees['nom'];?>"> <?php echo $donnees['nom'];?> </option>  
<?php  
       }  
     
?>  
            </select>
   
            <br><br/>
   <input type="submit" name="valider" value="VALIDER"/><br><br/>
   
    </form>  
 
 
<?php  
 
 
 
    // Recherche dans la table du prix actuel et affichage de celui ci
 
   if( isset( $_POST['fruits'] ))
               
  {  
                    $param_rech = $_POST['fruits'];
     
                     
?>  
 
 
<?php  
         
    $req = $bdd->prepare('SELECT * FROM fruits WHERE nom = :nom_fruit');
    $req->execute(array(
 
           ':nom_fruit' => $param_rech,
 
           ));
     
     
     while ($result = $req->fetch())
 
 
            {
       
             echo 'Le prix actuel de '.''.$param_rech.''. 'est de :'.''.$result['prix'].''.$result['saison'].'<br><br />';
     
             $prix = $result['prix'];
                 
      }
 
            $req->closeCursor();
   
   
   
   require_once "liste2.php";    
        }
   
   
   
 
   
   
?>  
 
     
   
 
 
 
</body>  
</html>
 
-------------------------------------------------------------------------------------------
le contenu du fichier liste2.php
-------------------------------------------------------------------------------------------
 
 
<html >  
<body>  
 
 
 
<form  method='POST' action='liste2.php'>  
    <input type="hidden" name="fruits" id="input_cache_fruits" value="$param_rech">  
 
     <label for="montantaug">Montant augmentation</label>
     <br>      
     <input type="text" name="montantaug" id="montantaug">  
   <br><br>
     <input type="submit" name="valider" value="VALIDER LE MONTANT A AUGMENTER"/>
  </form>
   
 
   
<?php  
  if( isset( $_POST['montantaug'] ))
               
  {  
                    $param_rech = $_POST['fruits'];
     $montantaug = $_POST['montantaug'];
     
  // Calcul du nouveau prix
   
                         function calculaugmentation($prix, $montantaug)
                       {
                            $nouvprix = $prix + $montantaug;// calcul du nouveau prix
                            return $nouvprix; // indique la valeur à renvoyer, ici le nouveau prix
                       }
 
                            $nouvprix = calculaugmentation($prix, $montantaug);
   
                   
 
                     echo 'Le nouveau prix de '.''.$param_rech.''. 'est de :'.''.$nouvprix.''.'<br><br />';          
}
?>  
 
</body>  
</html>
 

Reply

Marsh Posté le 05-01-2016 à 12:41:10   

Reply

Marsh Posté le 15-01-2016 à 12:44:18    

Salut,
Essaies de récupérer les données $fruit et $montantaug avec des $_SESSION.
 
Par exemple:

Code :
  1. session_start();
  2. $_SESSION['fruit'] = $_POST['fruits'];
  3. $_SESSION['montant'] = $_POST['montantaug'];


Je pense que la variable est perdue lors du refresh de la page. Avec $_SESSION tu risques pas de la perdre.

Reply

Marsh Posté le 27-01-2016 à 13:44:35    

Merci vodkadream d'abord excusez moi de répondre très tardivement à votre proposition ; je pense comme vous que les variables de session peuvent être une piste , je vais essayer de voire merci beaucoup

Reply

Marsh Posté le 27-01-2016 à 21:17:23    

Salut,
 
Personnellement je ne comprends pas tout, déjà les deux fichiers sont nommés liste2.php, bon ça c'est juste une petite erreur mais par contre le deuxième fichier est un mystère complet :
 

Code :
  1. <input type="hidden" name="fruits" id="input_cache_fruits" value="$param_rech">


Variable php dans le html?
 

Code :
  1. $param_rech = $_POST['fruits'];


Du coup $param_rech renvoie la chaîne de caractères "$param_rech"?
 

Code :
  1. $nouvprix = calculaugmentation($prix, $montantaug);


Elle est instanciée où cette variable $prix? Quand liste2.php est appelé dans liste.php ça va, mais sinon $prix n'existe pas.
 
 
C'est normal que seul le deuxième formulaire apparaisse après validation du changement de prix puisque c'est ce qui est demandé :

Code :
  1. <form  method='POST' action='liste2.php'>


 
 
Bref c'est mal conçu, il faut garder qu'un fichier de traitement des formulaires qui en fonction de la variable $_POST passée ou non affiche un contenu HTML ou un autre. Sachant que dans le deuxième formulaire il faut repasser dans ta variable POST le fruit ainsi que son prix. Après le mieux c'est toujours de bien séparer le HTML du php dans des fichiers différents afin de ne pas se perdre.
À l'heure d'aujourd'hui le plus adapté serait les requêtes Ajax mais si tu ne veux pas te lancer dans le Javascript alors c'est mort.
Donc moi à ta place je ne garderai qu'un fichier et je distinguerai bien ce qu'il faut afficher en fonction de :
- premier formulaire envoyé ou non
- deuxième formulaire envoyé ou non
 
Ce qui donne 3 affichages différents :
- aucun formulaire validé (pas de variable $_POST définie)
- formulaire 1 validé (variable $_POST["fruits"] définie mais pas $_POST["montantaug"])
- formulaire 2 valide (variable $_POST["montantaug"] définie)
 
Donc on peut traite le premier cas par défaut sans écrire de condition si ce n'est dans la boucle des options où l'on peut ajouter dans les <option> l'attribut "selected" quand le fruit vaut $_POST["fruits"] (ajouter dans la condition ET si la variable est définie afin d'éviter une erreur). Cela permet de ne pas retaper le premier formulaire partout.
Dans le cas où le formulaire 1 est validé tu ajoutes la requête de prix et le formulaire d'augmentation du prix (en récupérant dans des champs cachés $_POST["fruits"] et $prix tout en gardant les noms correspondant).
Dans le cas où le formulaire 2 est validé tu réaffiches le prix (pas besoin de requête puisque tu dois l'avoir en variable POST) puis tu lances ta fonction avec pour paramètres $_POST["prix"] et $_POST["montantaug"].


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed