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

PHP & Base de données Discussion :

Récupérer dans des input le contenu d'un tableau


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    IT Développeur
    Inscrit en
    Mars 2009
    Messages
    274
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Développeur

    Informations forums :
    Inscription : Mars 2009
    Messages : 274
    Par défaut Récupérer dans des input le contenu d'un tableau
    Bonjour à tous,

    j'ai sur une page, un formulaire qui liste les produits de la base de données. J'ai donc pour cela une boucle While. Dans cette boucle apprait une liste déroulante (qui provient d'une fonction). Cette liste permet de définir pour chaque ligne le nom du fournisseur. Dans un champs Input, je souhaite récupérer pour chacune des lignes le nom du fournisseur sélectionné. Je recharge en fait mon formulaire pour mettre à jour mon champs Input.

    Seulement, je n'arrive pas à récupérer pour chacune des ligne le fournisseur choisit. En gros il peut etre à chaque fois différent. Pour l'instant si je sélectionne un fournisseur pour la ligne 1, tous les champs fournisseur des autres lignes affichent la même valeur que la ligne 1 (ou une autre).

    Je comprend le principe, mon champs input est un tableau (si je ne me trompe pas) mais je n'arriva pas à récupérer la valeur pour chacune des lignes.

    J'utilise évitement des variables de SESSION

    Voici la fonction qui liste les fournisseurs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    function SelectSupplier()
    {
     ?>
    <SELECT name="fournisseur" id="fournisseur" size="1" style="width:200px" onchange="document.forms['monform'].submit();">
    <?php
     echo '<OPTION>Sélectionnez un fournisseur</OPTION>';
     $sql_fournisseur	= mysql_query("SELECT * FROM t_fournisseur_fou ORDER BY fou_nom ASC") or die("Erreur de connexion !");
     while ( $donnees_fournisseur= mysql_fetch_array($sql_fournisseur) )
      {
       echo '<OPTION value='.$donnees_fournisseur['fou_id'].'>'.$donnees_fournisseur['fou_code'].' - '.ucfirst($donnees_fournisseur['fou_nom']).'</OPTION>';
       }
     echo '</SELECT><br />';
    }
    et voici mon bout de 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
    45
    46
    47
     
    while ($donnees_reasort = mysql_fetch_assoc($sql_reasort))
      {
      echo '<form action="'.$_SERVER['PHP_SELF'].'" method="post" id="FormInput">';
      echo '<tr>';
      echo '<td>
      <img src="../'.$donnees_reasort['ima_chemin'].'" width="55" height="55"/>
      </td>';
      echo '<td>'.$donnees_reasort['cat_nom'].' - '.$donnees_reasort['cou_nom'].'<br />'.$donnees_reasort['led_reference'].' - '.$donnees_reasort['led_puissance_w'].' - '.$donnees_reasort['cou_nom'].'</td>';
      echo '<td>';
       SelectSupplier();
       /*-----------*/
         if (isset($_POST['fournisseur']) AND ( ($_POST['fournisseur']) !='Sélectionnez un fournisseur')) // POST plein SESSION vide
       {
        $id_fournisseur							= $_POST['fournisseur'];
        $fournisseur 							= $_POST['fournisseur'];
        $_SESSION['reasort']['fournisseur']	= $fournisseur;
    	$sql_fournisseur = mysql_query("SELECT *
                                      FROM t_fournisseur_fou
                                      WHERE fou_id='".$id_fournisseur."'
                                     ") 
                                     or die (mysql_error());
        $donnees_fournisseur = mysql_fetch_assoc($sql_fournisseur);                             
        $_SESSION['reasort']['fournisseur']=(isset($id_fournisseur)) ? $donnees_fournisseur['fou_nom'] : '';
        $_SESSION['reasort']['code_fournisseur']	= $donnees_fournisseur['fou_code'];
       }
       elseif (isset($_POST['choix_fournisseur'])) // POST plein SESSION vide
       {
        $id_fournisseur						= $_POST['choix_fournisseur'];
        $fournisseur 						= $_POST['choix_fournisseur'];
        $_SESSION['reasort']['fournisseur']= $fournisseur;
       }
      else // Ni POST Ni SESSION
       {
       $_SESSION['reasort']['fournisseur']	= 'Pas de choix';
       }
    	/*---------------*/
      echo '<br /><input type="text" name="choix_fournisseur" id="choix_fournisseur" size="30" value="'.$_SESSION['reasort']['fournisseur'].'" readonly/>';  
      echo '</td>';
      echo '<td>'.$donnees_reasort['led_stock'].' pcs</td>';
      echo '<td><input type="text"   name="QteStock"      value="" id="QteStock" size="3"/> pcs
      <input type="hidden" name="led_reference" value="'.$donnees_reasort['led_reference'].'" />';
      echo '<input type="submit" value="AJOUT" id="AJOUT" name="AJOUT" class="bouton-validation"/>';
      echo '</td>';
      echo '</tr>';
      echo '</form>';	 
      }
    Si l'un d'entre vous peut me donner un coup de main ?

  2. #2
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Voici comment je m'y prendrait:

    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
     
    // PROVIENT DE MYSQL //
    $produits = array(
    	array('id' => 1, 'name' => 'prod1', 'fournisseur' => null),
    	array('id' => 2, 'name' => 'prod1', 'fournisseur' => null),
    	array('id' => 3, 'name' => 'prod1', 'fournisseur' => null),
    );
     
    // PROVIENT DE MYSQL //
    $fournisserus = array(
    	array('id' => 1, 'name' => 'four1'),
    	array('id' => 2, 'name' => 'four2'),
    );
     
    ?>
     
    <form action="save.php" method="post">
     
    	<table id="produits">
    		<tr>
    			<th>Name</th>
    			<th>Fournisseur</th>
    		</tr>
    		<?php foreach ($prouits as $row): ?>
    		<tr>
    			<td>
    				<input type="hidden" name="id[]" value="<?=$row['id']?>" />
    				<input type="text" name="name[]" value="<?=$row['name']?>" />
    			</td>
    			<td>
    				<select name="fournisseur[]">
    					<?php foreach ($fournisseurs as $subrow): ?>
    					<option value="<?=$subrow['id']?>"
    					<?php endforeach ?>
    				</select>
    			</td>
    		</tr>
    		<?php endforeach ?>
    	</table>
    	<input type="submit" value="Save" />
     
    </form>
    Les données fournies par ce formulaire seront de la forme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $_REQUEST = array(
    	'id'          => array('1',       '2',       '3'),
    	'name'        => array('prod1', 'prod2', 'prod3'),
    	'fournisseur' => array('1',       '2',       '1'),
    );
    Il ne te reste qu'a traverser cette structure avec un bête for de la façon suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $c = count($_REQUEST['id']);
    for ($i = 0; $i < $c; $i ++) {
    	$id          = $_REQUEST['id'][$i];
    	$name        = $_REQUEST['name'][$i];
    	$fournisseur = $_REQUEST['fournisseur'][$i];
    }
    Et le tour est joué

  3. #3
    Membre éclairé
    Profil pro
    IT Développeur
    Inscrit en
    Mars 2009
    Messages
    274
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Développeur

    Informations forums :
    Inscription : Mars 2009
    Messages : 274
    Par défaut
    Merci pour ton aide, mais je ne sais pas utiliser ta proposition. Ton code m'obligerait à changer tout le mien.

    Merci

  4. #4
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Alors tu vas devoir utiliser Ajax car je ne connais pas d'autre moyen pour envoyer plusieurs jeux de données avec un formulaire.

  5. #5
    Membre confirmé Avatar de Chen norris
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 216
    Par défaut
    Salut,
    En simplifiant le code que génère ton script, on obtient un truc de ce style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <select name="fournisseur" id="fournisseur" size="1" style="width:200px" onchange=".."/>
       <OPTION>Sélectionnez un fournisseur</OPTION>
       <OPTION value="1">Fournisseur 1</OPTION>
       <OPTION value="2">Fournisseur 2</OPTION>
       <OPTION value="3">Fournisseur 3</OPTION>
    ...
    </select>
    or si tu regardes bien, toutes les listes déroulantes <select> ont le même id : fournisseur. Je pense que c'est la source de ton problème (il semble manquer un truc du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <SELECT name="fournisseur" id="fournisseur<?php echo $idFournisseur;" ?>
    ).

    En espérant qu'il s'agisse bien de cela

    PS : c'est un avis mais comme dit Benjamin Deslepierre, il vaudrait mieux vaut séparer au maximum ton code de ta présentation : tu ne feras que gagner en lisibilité (pense aussi aux éventuelles personnes qui liront le code derrière toi et qui te maudiront en galérant pour arriver à bien le comprendre...)

  6. #6
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Le problème ne vient pas tant de l'id que de l'attribut name, avec deux attributs name identiques, le second écrase le premier, le seul moyen de contourner ça est de mettre .

    Faites le test vous même avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <?php
     
    var_dump($_REQUEST);
     
    ?>
     
    <form method="post">
    	<input type="text" name="equal" />
    	<input type="text" name="equal" />
    	<input type="text" name="equal" />
    	<input type="submit" value="send" />
    </form>

  7. #7
    Membre éclairé
    Profil pro
    IT Développeur
    Inscrit en
    Mars 2009
    Messages
    274
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Développeur

    Informations forums :
    Inscription : Mars 2009
    Messages : 274
    Par défaut
    Merci à vous 2 pour vos réponses.

    J'avais déjà essayé de mettre mais sans succès.

    Je ne sais pas si ce à quoi je veux arriver est clair.
    Je réexplique au cas ou…

    Ma page fait partie de mon back-office et liste tous les produits. Cette page me permet d'encoder le nouveau stock reçu. Donc la liste comprend une image, un descriptif, la liste des fournisseurs, le fournisseur choisit parmis la liste (sous forme d'input) , un input pour indiquer la quantité rentrée en stock et un bouton pour enregistrer le nouveau stock.

    J'ai donc tous ces éléments par ligne.
    Et donc pour chacun des produits, je veux pouvoir choisir dans la liste un fournisseur (-> le champ se met à jour dès sélection dans la liste puisque la page se recharge) puis on indique la quantité et on clic sur mettre à jour. Puis on passe au produit suivant…

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 18/09/2013, 00h08
  2. Recuperer dans des variables le contenu des indices d' un tableau
    Par integrale dans le forum Général Python
    Réponses: 2
    Dernier message: 06/04/2013, 14h53
  3. Réponses: 1
    Dernier message: 22/04/2010, 00h32
  4. [AC-2003] transfert dans une table du contenu d'un tableau bidimensionnel
    Par pup1523 dans le forum VBA Access
    Réponses: 1
    Dernier message: 23/01/2010, 13h37
  5. Réponses: 1
    Dernier message: 25/04/2007, 16h23

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