IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Création formulaire dans boucle php


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2016
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Novembre 2016
    Messages : 29
    Points : 17
    Points
    17
    Par défaut Création formulaire dans boucle php
    Bonjour,

    Je voudrais faire un tableau en php qui récupère les données d'une bdd (liste de produits) et qui pour chaque lignes demande à l'utilisateur de choisir la quantité.
    Je voudrais ajouter un bouton sur chaque ligne qui permet de valider la quantité et entre dans une nouvelle bdd le nom du produit et la quantité et l'utilisateur.

    J'ai pour le moment ce fichier qui fonctionne pour l’affichage de tous les produits. Cependant je n'arrive pas à faire fonctionner

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    affichage des produits enregistrés
     
     
     
    		<?php 
     
           // connexion à la base
    $db = mysql_connect('', '', '')  or die('Erreur de connexion '.mysql_error());
    // sélection de la base  
     
        mysql_select_db('produits',$db)  or die('Erreur de selection '.mysql_error()); 
     
    	// on lit..
    	$rs = mysql_query('SELECT Id_prod, titre, code, conditionnement, masse, puht FROM produits;',$db);
    	?>
     
    	<?php 
     
    	while($row = mysql_fetch_array($rs)) {
    		$Id_prod= $row['Id_prod'];
    		$titre[$i]= $row['titre'];
    		$code = $row['code'];
    		$conditionnement = $row['conditionnement'];
    		$masse = $row['masse'];
    		$puht = $row['puht'];
     
     
    		echo "<table border='1' cellspacing='1' width=1300		height=20>";
    		echo "<tr><td width=50%> $titre[$i] </td> 
    				<td width=10%> $code </td> 
    				<td width=10%> $conditionnement </td> 
    				<td width=5%> $masse </td> 
    				<td width=5%> $puht </td> 
    				<td><input type='text' name='qte' id='qte' value=''> 
    				<td><input type='button' name='$Id_prod' id='$Id_prod' value='rafrechir' method='post' action='quantite.php'>
    				 
    				</tr> ";
    											}
     
     
     
    	    // on écrit la requête sql 
        //$sql = "INSERT INTO produits(nbrs) VALUES('$nbrs')"; 
     
        // on insère les informations du formulaire dans la table 
        //mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); 
     
    ?>

    Merci d'avance pour votre aide!!!

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Ouh là... Effectivement ça a peu de chances de fonctionner.

    En vrac :
    Quand on remplit une table html avec une boucle, on ouvre la table avant la boucle et on la ferme après. Tu veux un seul tableau avec plusieurs lignes, pas plusieurs tableaux avec une seule ligne à chaque fois.
    A lire : Affichage de données dans un tableau HTML

    Pour transmettre des données, il te faut un formulaire. Pour les formulaires dans des tableaux, tu as deux options : un formulaire par ligne ou un formulaire pour l'ensemble du tableau.
    Si tu fais un formulaire par ligne, ça fera uniquement la mise à jour de la ligne concernée. Toute modification apportée aux autres lignes sera ignorée.
    Si tu fais un formulaire pour l'ensemble du tableau, il faut gérer le fait qu'il y ait un champ input par ligne. Pour ça, on peut utiliser des noms de champs indexés, qui seront reçus sous forme de array côté PHP. Et il vaut mieux mettre un seul bouton pour faire la mise à jour, placé en dessous du tableau.
    A lire : Les formulaires et PHP5 et Le tutoriel pour grands débutants pressés - Les formulaires

    Et au passage, l'API mysql est obsolète depuis PHP 5.5 et supprimée en PHP 7. Il serait judicieux d'envisager d'utiliser PDO ou mysqli à la place.
    Comprendre PDO.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2016
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Novembre 2016
    Messages : 29
    Points : 17
    Points
    17
    Par défaut
    Merci beaucoup pour la réponse et l'aide!

    J'ai essayé de faire les changements avec vos conseils. J'obtiens il me semble un code plus clair en ce qui concerne le tableau.
    Par contre j'ai un problème lorsque je rafraîchi les quantité. Etant donné que tous les boutons et formulaires portent le même nom la modification s'applique à tout les champs.
    Avez vous un conseil pour résoudre ce problème?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     <?php require('_connexion.php'); ?>
    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8" />
        <title>Tableau html simple</title>
    </head>
    <body>
     
    <table border="1">
    <tbody>
     
    <?php 
     
    	while($row = mysql_fetch_array($bdd)) {
     
    		 ?>
    		<form name="inscription" method="post" action="index.php">	
    		<tr><td width=50%> <?php echo $row['titre'] ?> </td> 
    				<td width=10%> <?php echo $row['code'] ?> </td> 
    				<td width=10%> <?php echo $row['conditionnement'] ?> </td> 
    				<td width=5%> <?php echo $row['masse'] ?> </td> 
    				<td width=5%> <?php echo $row['puht'] ?> </td> 
    				<td><input type="text" name="qte" id="qte[i]" value=""> 
     
    				<td width=5%> 
    				<input type="submit" name="valider" value="Rafraichir"/>
    				  <?php
    							if(isset($_POST['valider'])){
    										$qte=$_POST['qte'];
    														} ?> </td> 
    				<td width=5%> <?php echo $qte ?> </td> 
    				</tr> </form>
     
    	<?php									} ?>
     
    </tbody>
    </table>
     
    </body>
    </html>
    Sinon pour le PDO j'avais déjà regardé mais je suis chez free et cela ne semble pas fonctionner?!

    Je débute donc désolé pour les questions un peu simple...

    Merci d'avance

  4. #4
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2016
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Novembre 2016
    Messages : 29
    Points : 17
    Points
    17
    Par défaut
    J'avance un peu ... mais je n'arrive toujours pas à afficher la quantite ??

    Merci pour votre aide!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    <?php require('_connexion.php'); ?>
    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8" />
        <title>Tableau html simple</title>
    </head>
    <body>
     
    <table border="1">
    <tbody>
     
    <?php 
    	$qte=array();
    	$quantite=array();
    	$valider=array();
    	$inscription=array();
    	$i=1;
     
    		while($row = mysql_fetch_array($bdd)) {
     
    		 $qte[$i]="qte".$i;
    		 $valider[$i]="valider".$i;
    		 $quantite[$i]="quantite".$i;
    		 $inscription[$i]="inscription".$i;
    		 ?>
    		<form name="<?php echo $inscription[$i]; ?>" method="post" action="index.php">	
    		<tr><td width=50%> <?php echo $row['titre']; ?> </td> 
    				<td width=10%> <?php echo $row['code']; ?> </td> 
    				<td width=10%> <?php echo $row['conditionnement']; ?> </td> 
    				<td width=5%> <?php echo $row['masse']; ?> </td> 
    				<td width=5%> <?php echo $row['puht']; ?> </td> 
    				<td><input type="text" name="<?php echo $qte[$i]; ?>" id="qte[i]" value=""> 
     
    				<td width=5%> <input type="submit" name="<?php echo $valider[$i]; ?>" value="Rafraichir"/> </td>
     
    					<?php		if(isset($_POST['$valider[$i]']))
    									{$quan=$_POST['$qte[$i]'];}?>
    				<td width=5%> <?php echo $quan; ?> </td> 
    				<?php $i=$i+1; ?>
    				</tr>
    		</form>
    												<?php } ?>
     
    </tbody>
    </table>
     
    </body>
    </html>

  5. #5
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Indexe avec l'id de ton enregistrement (ici j'ai mis "id" mais remplace par le nom de ta colonne) sinon tout va se mélanger.
    Inutile de mettre l'index partout également :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    <?php 
    	while($row = mysql_fetch_assoc($bdd)) {
    		 ?>
    		<form method="post" action="index.php">	
    		<tr><td width=50%> <?php echo $row['titre']; ?> </td> 
    				<td width=10%> <?php echo $row['code']; ?> </td> 
    				<td width=10%> <?php echo $row['conditionnement']; ?> </td> 
    				<td width=5%> <?php echo $row['masse']; ?> </td> 
    				<td width=5%> <?php echo $row['puht']; ?> </td> 
    				<td><input type="text" name="qte[<?php echo $row['id']; ?>" value=""> 
     				<td width=5%><input type="submit" value="Rafraichir"/></td>
     
    <?php		
    if(isset($_POST['qte'][$row['id']])) {
       $quantite = $_POST['qte'][$row['id']];
    }
    else {
       $quantite= 0;
    }
    ?>
    <td width=5%><?php echo $quantite; ?> </td> 
    </tr>
    </form>
    <?php } ?>

  6. #6
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2016
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Novembre 2016
    Messages : 29
    Points : 17
    Points
    17
    Par défaut
    Merci pour l'info. J'ai modifié la condition de POST pour que cela fonctionne.
    Donc maintenant quand je clic sur rafraichir la valeur rentrée s'affiche bien à coté mais le problème est que si je choisi une autre valeur sur une autre ligne, la valeur précédente disparait..
    Comment peut-on résoudre ce problème?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    <?php require('_connexion.php'); ?>
    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8" />
        <title>Tableau html simple</title>
    </head>
    <body>
     
    <table border="1">
    <tbody>
     
    <?php 
    	while($row = mysql_fetch_assoc($bdd)) {
    		 ?>
    		<form method="post" action="index.php">	
    		<tr><td width=50%> <?php echo $row['titre']; ?> </td> 
    				<td width=10%> <?php echo $row['code']; ?> </td> 
    				<td width=10%> <?php echo $row['conditionnement']; ?> </td> 
    				<td width=5%> <?php echo $row['masse']; ?> </td> 
    				<td width=5%> <?php echo $row['puht']; ?> </td> 
    				<td><input type="text" name="qte<?php echo $row['Id_prod']; ?>" value=""> 
     				<td width=5%><input type="submit" value="Rafraichir"/></td>
     
    <?php		
    if(isset($_POST['qte'.$row['Id_prod']])) {
       $quantite = $_POST['qte'.$row['Id_prod']];
    }
    else {
       $quantite= 0;
    }
    ?>
    <td width=5%><?php echo $quantite; ?> </td> 
    </tr>
    </form>
    <?php } ?>
     
    </tbody>
    </table>
     
    </body>
    </html>
    Merci encore pour l'aide!!

  7. #7
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Comme t'a dit Celira : il faut un seul formulaire avec tous les champs.
    En gros les balises <form> vont en dehors de la boucle.

  8. #8
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2016
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Novembre 2016
    Messages : 29
    Points : 17
    Points
    17
    Par défaut
    Merci c'est le top!! tout fonctionne bien!

    le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    <?php require('_connexion.php'); ?>
    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8" />
        <title>Tableau html simple</title>
    </head>
    <body>
     
    <table border="1">
    <tbody>
    <form method="post" action="index.php">
    <?php 
    	while($row = mysql_fetch_assoc($bdd)) {
    		 ?>
     
    		<tr><td width=50%> <?php echo $row['titre']; ?> </td> 
    				<td width=10%> <?php echo $row['code']; ?> </td> 
    				<td width=10%> <?php echo $row['conditionnement']; ?> </td> 
    				<td width=5%> <?php echo $row['masse']; ?> </td> 
    				<td width=5%> <?php echo $row['puht']; ?> </td> 
    				<td><input type="text" name="qte<?php echo $row['Id_prod']; ?>" value=""> 
     				<td width=5%></td>
     
    <?php		
    if(isset($_POST['qte'.$row['Id_prod']])) {
       $quantite = $_POST['qte'.$row['Id_prod']];
    }
    else {
       $quantite= 0;
    }
    ?>
    <td width=5%><?php echo $quantite; ?> </td> 
    </tr>
     
    <?php }  ?>
    <input type="submit" value="Sélectionner"/>
    <input type="submit" value="valider"/>
    </form>
    </tbody>
    </table>
     
    </body>
    </html>

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Multiple popup jquery dans boucle php
    Par Vincent Valentine dans le forum jQuery
    Réponses: 3
    Dernier message: 12/02/2016, 09h54
  2. Création objet dans boucle While
    Par phoenixgreg dans le forum Débuter
    Réponses: 10
    Dernier message: 22/12/2015, 17h11
  3. Récupérer Post formulaire dans une boucle php
    Par spawns dans le forum AJAX
    Réponses: 4
    Dernier message: 24/09/2015, 10h29
  4. [AC-2010] Création d'une boucle dans un sous-formulaire
    Par bigounet dans le forum Access
    Réponses: 5
    Dernier message: 18/08/2014, 06h09
  5. vérifier un formulaire en JS dans une boucle PHP
    Par wwwbillgates dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 17/07/2012, 22h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo