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 :

[Tableaux] Remplir une table MySQL à partir d'une liste [Débutant(e)]


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 147
    Points : 62
    Points
    62
    Par défaut [Tableaux] Remplir une table MySQL à partir d'une liste
    Bonsoir,
    je sais pas si c'est une bête question mais j'ai bien réflichi et toujours j'ai pas trouvé une bonne solution

    j'ai une liste nomée "pers2" et je veux remplire une table nomée "Personnes" avec les valeurs de cette liste.

  2. #2
    Membre éprouvé Avatar de sharrascript
    Homme Profil pro
    Développeur Web indépendant
    Inscrit en
    Avril 2007
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web indépendant

    Informations forums :
    Inscription : Avril 2007
    Messages : 678
    Points : 1 042
    Points
    1 042
    Par défaut
    bonjour sara21,

    J'aimerais bien t'aider, mais il faudrait + de précisions.

    Tu as un code de base?

    Mais si ta question est de savoir si c'est possible, la réponse est oui.

    Il suffit de faire des INSERT pour chaque personne de ta liste.

    Mais il faut précisez si tu utilise un formulaire ou autre.

    ++

  3. #3
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 147
    Points : 62
    Points
    62
    Par défaut
    Bonjour,
    voila donc j'aimerais avoir une Liste (en suppose quelle est déja remplie avec des noms) et un boutton envoyer qui permet de remplire ma table "Personnes" [id (auto) , Nom (Varchar2)] avec les noms presents dans la liste

    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <form method="post"  name="form1" action="" >
    <select name="pers2" size="10" multiple="multiple" >
    </select>
    <input name="envoyer" type="submit" value="Envoyer" />
    </form>
    Merci les gars et j'attend avec impatience votre aide

  4. #4
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    181
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 181
    Points : 199
    Points
    199
    Par défaut
    Salut,

    Le problème est que ta variable pers2 n'est pas un tableau, alors la variable globale $_POST['pers2'] ne peut contenir qu'une seule valeur !
    On cherche donc à obtenir un tableau pers2[], lui même dans le tableau $_POST[]...
    pour ce faire, c'est très facile, il suffit d'indiquer dans l'attribut name de la balise select que pers2 est un tableau, grâce à une paire de crochets :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <select name="pers2[]" size="10" multiple="multiple" >
    Ensuite, il te suffit de récupérer les valeur du tableau $_POST['pers2'], avec un foreach par exemple.

  5. #5
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 147
    Points : 62
    Points
    62
    Par défaut
    Bonsoir tous le monde,
    merci haze pour l'info mais ca marche pas pour mon cas et je vais vous monter tout mon code peut être que quelqu'un aura une idée

    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
     
    <?php 
    include ("connexion.php");
    $reponse = mysql_query('SELECT * FROM Personnes')or die('Erreur SQL !<br>'.$req.'<br>'.mysql_error());
    	$Tab_php_Nom = array();
    	$Tab_php_id = array();
    	$i=0;
    	while ( $datamenu = mysql_fetch_array ( $reponse ) )
    	{
    		$Tab_php_Nom[$i] = $datamenu["Nom"];
    		$Tab_php_id[$i] = $datamenu["id"];
    		$i++;
    	}
    	////////////////////////////////////////////////////
    	function TabPHP_to_JS($tableauPHP, $tableauJS) {
        	echo $tableauJS . " = new Array();";
        	for($i = 0; $i < count($tableauPHP); $i++) {
            	if (!is_array($tableauPHP[$i])) {
                	echo $tableauJS . "[" . $i . "] = '" . $tableauPHP[$i] . "';";
            	}
            	else {
                	TabPHP_to_JS($tableauPHP[$i], $tableauJS . "[" . $i . "]");
            	}
        	}
        	return;
    	}
    	///////////////////////////////////////
    echo "<script type='text/javascript'>";
            TabPHP_to_JS($Tab_php_Nom, "MaTb");
    echo "</script> ";
     
    ?>
    Partie Javascript
    Initialise une liste 1 (pers1) avec tout les personnes de la table (ca marche), puis grace au boutons tu peux changer les données de la liste1 vers la liste 2 (pers2) . les données sont toujours trier par ordre alphabétique

    Code JS : 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
     
    <SCRIPT language="JavaScript">
     //initialise une liste
         function ini(form,list1,list2){
     
              // var MaTb = new Array(100);
     
                  list1.options.length=0;
                  list2.options.length=0;
                  MaTb.sort();
                  var i
                  for (i=0; i<MaTb.length; i++) {
                      var o=new Option(MaTb[i],MaTb[i]);
                      list1.options[list1.options.length]=o;
                  }
        }
     
           //passe les données de la liste 1 à la liste 2 et les trie par ordre alphabétique
         function gtod(form,list1,list2){
                    for(yo=0;yo<list1.length;yo++){
                                     if(list1.options[yo].selected == true){
                                     var p= new Option(list1.options[yo].value,list1.options[yo].value);
                                     list2.options[list2.options.length]=p;
                                     list1.options[yo] = null;                
                                     yo=yo-1;
                                     }
                    }
                     //trie de la liste, on creer un tab, on le trie et on reconstruit la liste
     
                           var tbl = new Array()
                    for(i=0;i<list2.length;i++){
                            tbl.push(list2.options[i].value);
                    }
                    tbl.sort();//trie le tableau
                    list2.options.length=0;//efface la liste 2
                    for(i=0;i<tbl.length;i++){ //rempli la liste avec les données trié
                    var p= new Option(tbl[i],tbl[i]);
                    list2.options[list2.options.length]=p;
                    }
         }
     
    </SCRIPT>

    Code HTML : 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
     
    <body onload="ini(form1,form1.pers1,form1.pers2);">
     
    <form method="post"  name="form1" action="verif_personne.php" >
     
    <select name="pers1" size="10" multiple="multiple">
    </select>
     
    <input name="boutvD" type="button" class="style7"  onclick="gtod(this.form,this.form.pers1,this.form.pers2);" value="Ajouter" />
     
    <select name="pers2" size="10" multiple="multiple">
    </select>
     
    <input name="boutvG" type="button" class="style7"  onclick="gtod(this.form,this.form.pers2,this.form.pers1);" value="Retirer" />
     
    <input type="button" name="init" value="Initialisation"  onclick="ini(this.form,this.form.pers1,this.form.pers2);" />
     
    <input name="envoyer" type="submit" value="Envoyer"/>
     
    </form>
     
    </body>

    c'est tout ce que j'ai pu faire jusqu'a maintenant
    et le probleme maintenant c'est comment faire pour envoyer les personnes de la liste 2 (pers2) vers une table (par ex : TabMembres('id','Nom')) de ma base de données.

    Merci

  6. #6
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 147
    Points : 62
    Points
    62
    Par défaut
    Bonjour,
    j'ai essayé plein de truc mais aucune ne marche donc si je voulais changer mon select de "pers2" vers "pers2[]" comme suggerer par Haze
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <select name="pers2[]" size="10" multiple="multiple" >
    quelles seront les modifications qui doivent être apporter a ces fonctions javascript (ils marchent bien et je n'ai besion)
    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
     
    //initialise une liste
         function ini(form,list1,list2){
     
              // var MaTb = new Array(100);
     
                  list1.options.length=0;
                  list2.options.length=0;
                  MaTb.sort();
                  var i
                  for (i=0; i<MaTb.length; i++) {
                      var o=new Option(MaTb[i],MaTb[i]);
                      list1.options[list1.options.length]=o;
                  }
        }
     
           //passe les données de la liste 1 à la liste 2 et les trie par ordre alphabétique
         function gtod(form,list1,list2){
                    for(yo=0;yo<list1.length;yo++){
                                     if(list1.options[yo].selected == true){
                                     var p= new Option(list1.options[yo].value,list1.options[yo].value);
                                     list2.options[list2.options.length]=p;
                                     list1.options[yo] = null;                
                                     yo=yo-1;
                                     }
                    }
                     //trie de la liste, on creer un tab, on le trie et on reconstruit la liste
     
                           var tbl = new Array()
                    for(i=0;i<list2.length;i++){
                            tbl.push(list2.options[i].value);
                    }
                    tbl.sort();//trie le tableau
                    list2.options.length=0;//efface la liste 2
                    for(i=0;i<tbl.length;i++){ //rempli la liste avec les données trié
                    var p= new Option(tbl[i],tbl[i]);
                    list2.options[list2.options.length]=p;
                    }
         }
     
    </SCRIPT>

  7. #7
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    181
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 181
    Points : 199
    Points
    199
    Par défaut
    Citation Envoyé par sara21
    j'ai essayé plein de truc mais aucune ne marche donc si je voulais changer mon select de "pers2" vers "pers2[]" comme suggerer par Haze
    Ah d'accord, quand j'ai lu ta première réponse j'ai cru que ma solution ne marchait pas, alors qu'en fait tu ne l'avais pas encore essayé.

    Bon, j'ai tenté de reproduire ta page chez moi, mais je n'y suis arrivé qu'à moitié car je n'y connais rien du tout en javascript.
    Si j'ai bien compris, le code JS ne sert qu'à faire passer des membres de la liste "pers1" à la liste "pers2" à l'aide de boutons, et vice versa.

    Ce que je ne comprends pas, c'est à quoi sert le javascript une fois que les membres de la liste pers2 sont envoyés dans le formulaire...
    La récupération des données de ce formulaire doit se faire uniquement côté serveur, c'est à dire en PHP non ?

    La cible du formulaire est verif_action.php, donc si tu veux récupérer la liste depuis cette page :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <?php 
    if (isset($_POST['pers2']))
    {
    	echo '<ul>contenu du tableau pers2[] :';
    	foreach($_POST['pers2'] as $element)
    	{
    		echo '<li>'.$element.'</li>';
    	}
    	echo '</ul>';
    }
    ?>
    C'est simplement un tableau pers2[], lui même dans le tableau $_POST[].

  8. #8
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 147
    Points : 62
    Points
    62
    Par défaut
    j'ai testé ceci mais rien n'est affiché
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php 
    if (isset($_POST['pers2']))
    {
    	echo '<ul>contenu du tableau pers2[] :';
    	foreach($_POST['pers2'] as $element)
    	{
    		echo '<li>'.$element.'</li>';
    	}
    	echo '</ul>';
    }
    ?>
    Par contre lorsque j'enleve le test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (isset($_POST['pers2']))
    il m'affiche :
    contenu du tableau pers2[] :
    Warning: Invalid argument supplied for foreach() in c:\program files\easyphp1-8\www\Test15\verif_personne.php on line 5

  9. #9
    Membre éprouvé Avatar de sharrascript
    Homme Profil pro
    Développeur Web indépendant
    Inscrit en
    Avril 2007
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web indépendant

    Informations forums :
    Inscription : Avril 2007
    Messages : 678
    Points : 1 042
    Points
    1 042
    Par défaut
    Bonsoir,

    Je ne maitrise pas trop le javascript, mais pour que la méthode avec le if(isset) fonctionne, il faut que dans ta balise <form> de ton formulaire il y ai la méthode:

    Et là! Cela fonctionnera.

    ++

  10. #10
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    181
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 181
    Points : 199
    Points
    199
    Par défaut
    La méthode POST est déjà correctement indiquée dans les attributs du formulaire :
    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    <form method="post"  name="form1" action="verif_personne.php" >

    Si absolument rien n'est affiché lorsqu'il y a la condition :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (isset($_POST['pers2']))
    avant le code, ça signifie :
    - soit la cible n'a jamais reçu la liste pers2 du formulaire !
    - soit aucun nom n'a été sélectionné
    Dans ces deux cas, la variables $_POST['pers2'] n'est pas définie.
    Donc forcément, si tu enlèves cette condition, foreach() reçoit une variable vide en argument et envoie un message d'erreur.
    Es-tu sûr que la valeur de l'attribut action correspond bien au nom de ton fichier cible ?

    Si tu veux tester directement ce que je raconte, tu peux toujours essayer ce bout de code pour te faire une idée du but visé (utilise Ctrl pour sélectionner plusieurs noms à la fois) :
    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
     
    <body>
    <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" >
    	<p>
    		<select name="pers2[]" size="10" multiple="multiple" >
    			<option value="valeur 1">nom 1</option>
    			<option value="valeur 2">nom 2</option>
    			<option value="valeur 3">nom 3</option>
    			<option value="valeur 4">nom 4</option>
    			<option value="valeur 5">nom 5</option>
    		</select>
    	</p>
    	<p>
    		<input type="submit" value="Envoyer" />
    	</p>
    </form>
     
    <?php 
    if (isset($_POST['pers2']))
    {
    	echo '<ul>contenu de la liste pers2[] :';
    	foreach($_POST['pers2'] as $element)
    	{
    		echo '<li>'.$element.'</li>';
    	}
    	echo '</ul>';
    }
    ?>
    </body>
    Si ensuite tu n'y arrives toujours pas dans ton projet, fais voir le code de la page entière afin qu'on puisse essayer de voir ou ça coince...

  11. #11
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 147
    Points : 62
    Points
    62
    Par défaut
    Bonsoir tout le monde et merci a toi Haze pour ton effort

    ton code marche bien (apres que j'ai supprimé <?php echo $_SERVER[PHP_SELF]; ?>)
    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
     
    <body>
    <form method="post" action="">
    	<p>
    		<select name="pers2[]" size="10" multiple="multiple" >
    			<option value="valeur 1">nom 1</option>
    			<option value="valeur 2">nom 2</option>
    			<option value="valeur 3">nom 3</option>
    			<option value="valeur 4">nom 4</option>
    			<option value="valeur 5">nom 5</option>
    		</select>
    	</p>
    	<p>
    		<input type="submit" value="Envoyer" />
    	</p>
    </form>
     
    <?php 
    if (isset($_POST['pers2']))
    {
    	echo '<ul>contenu de la liste pers2[] :';
    	foreach($_POST['pers2'] as $element)
    	{
    		echo '<li>'.$element.'</li>';
    	}
    	echo '</ul>';
    }
    ?>
    </body>
    mais le probleme c'est que si je dois utiliser la liste pers2 comme un tableau (pers2[]) alors il faut que je modifie mes fonctions javascript qui ont comme parametres des listes et non des tableaux (et c'est dommage parcequ'elles marchent tres bien en+ ces fonctioons sont tres importantes dans mon projet). est-ce qu'il y a une idée pour remedier a ca ?

  12. #12
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    181
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 181
    Points : 199
    Points
    199
    Par défaut
    Citation Envoyé par sara21
    ton code marche bien (apres que j'ai supprimé <?php echo $_SERVER[PHP_SELF]; ?>)
    Ah, pourtant $_SERVER['PHP_SELF'] contient juste l'adresse du script PHP exécuté, ça permet de s'assurer que le fichier cible du formulaire est le même que celui qui contient le formulaire, quelque soit le nom du fichier...

    Remplacer list2 par list2[] dans tes fonctions javascript rend le code inopérant ?
    Désolé mais je ne connais pas du tout ce langage...
    Si ton problème se situe effectivement au niveau du JS, peut-être devrais-tu tenté ta chance dans le forum approprié ?

Discussions similaires

  1. Réponses: 6
    Dernier message: 15/06/2010, 03h18
  2. Réponses: 4
    Dernier message: 01/04/2010, 12h06
  3. [MySQL] Créer une table actuelle à partir d'une table historique
    Par cleminute dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 20/10/2009, 14h35
  4. [MySQL] Remplir une liste à partir d'une table MySQL
    Par missastro dans le forum PHP & Base de données
    Réponses: 25
    Dernier message: 27/08/2008, 17h42
  5. Réponses: 12
    Dernier message: 28/11/2006, 15h34

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