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 :

"insert" multiples, j'y arrive pas :( [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 8
    Points : 2
    Points
    2
    Par défaut "insert" multiples, j'y arrive pas :(
    Bonjour,
    J'ai un problème pour exécuter plusieurs requete "insert" suite à l'envoi d'un formulaire.

    Je m'explique :
    J'ai un formulaire du type

    nom1-prenom1 pourcentage1 commentaire1
    nom4-prenom4 pourcentage4 commentaire4
    nom8_prenom8 pourcentage8 commentaire8

    'Valider'

    (nom-prenom sont automatiquement afficher dans le formulaire grâce à une requete select)
    (1,4 et 8 sont les id des personnes)
    La saisie porte donc sur pourcentage et commentaire.

    Suite à la validation du formulaire,je veux créer autant de requête insert dans ma table "resultat" qu'il y a de personnes.

    Le formulaire est en ligne à l'adresse http://followup.free.fr/admin/new_training0.php

    Comment faire ?

    Merci de m'aider.

  2. #2
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Quel est ton code pour une seule requête ?

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    $requete = "INSERT INTO `entrainement` ( `id` , `date_du` , `date_au` , `id_joueur` , `pourcentage` , `commentaire` , `semaine_numero` )
    VALUES ('', '".$date_du."', '".$date_au."', '".$id_du_joueur."', 'pourcent_".$id_du_joueur."', 'com_".$id_du_joueur."', '".$num_semaine."')";
    mysql_query($requete);

    Mon problème vient du fait que les id des joueurs ne se suivent pas, donc je ne sais pas comment faire pour inserer le pourcentage et le commentaire pour chaque joueur !
    J'en peu plus, ça doit être tout simple mais je bloque là-dessus depuis 2 heures. en même temps, je ne suis débutant !, ceci explique cela

  4. #4
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 101
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 101
    Points : 8 211
    Points
    8 211
    Billets dans le blog
    17
    Par défaut
    Je te conseille de construire un <form> de la forme suivante :

    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
    <form ...>
     
    Personne n° 123 :
    <input type="hidden" name="personnes[0][id]" value="123">
    <input type="text" name="personnes[0][nom]" value="Papin">
    <input type="text" name="personnes[0][prenom]" value="Jean-Pierre">
    ...
     
    Personne n° 456 :
    <input type="hidden" name="personnes[1][id]" value="456">
    <input type="text" name="personnes[1][nom]" value="Boli">
    <input type="text" name="personnes[1][prenom]" value="Basile">
    ...
     
    </form>
    Ensuite pour les insertions t'auras juste à boucler sur $_POST['personnes']

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    foreach ( $_POST['personnes'] as $personne ) {
        // Insérer/màj $personne['nom'], etc. pour $personne['id']
    }
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    J'essaie ça tout de suite : MERCI MERCI MERCI MERCI MERCI MERCI MERCI MERCI MERCI

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Arf, rien n'est insérer dans la table !
    Voici mon 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
    <form name="form1" method="POST" action="new_training2.php">
    .......
     
    <?php
    //Listage de tous les joueurs de l'équipe pour inscription des résultats
    $requete = "SELECT id, nom, prenom 
    			FROM joueur
    			WHERE id_club=".$_POST[form_club];
    $result = @mysql_query($requete,$link);
    echo "<table width='700' border='0' cellpadding='0' cellspacing='0'>";
    $k = 0;
    while($tablo = mysql_fetch_array($result)){
    	echo "<tr>
    			<td width='250'>".$tablo['nom']." ".$tablo['prenom']."</td>
    			<td width='100'><input name='personnes[".$k."][pourcent]' type='text' size='3' value='100'>%</td>
    			<td width='350'><input name='personnes[".$k."][com]' type='text' size='60'>
    			<input name='personnes[".$k."][id]' type='hidden' value='".$tablo['id']."'></td>
    		  </tr>";
    	$k++;
    	}
    Et voici le code de ma page de validation :
    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
     
    <?php
     
    $date_du = $_POST[form_annee_du]."-".$_POST[form_mois_du]."-".$_POST[form_jour_du];
    $date_au = $_POST[form_annee_au]."-".$_POST[form_mois_au]."-".$_POST[form_jour_au];
    $num_semaine = $_POST[form_num_semaine];
     
    foreach ( $_POST['personnes'] as $personne ) {
        $requete = "INSERT INTO `entrainement` ( `id` , `date_du` , `date_au` , `id_joueur` , `pourcentage` , `commentaire` , `semaine_numero` )
    				VALUES ('', '".$date_du."', '".$date_au."', '".$personne[id].", '".$personne[pourcent]."', '".$personne[com]."', '".$num_semaine."')";
    	mysql_query($requete);
    	// Insérer/màj $personne['nom'], etc. pour $personne['id']
    	}
     
    ?>
    Je n'ai aucune erreur mais rien n'est insérer dans la base !

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Je viens d'essayer par la méthode GET et au lieu d'avoir
    personnes[0][com]=le_commentaire_a_ajouter, j'ai :
    personnes%5B0%5D%5Bcom%5D=le_commentaire_a_ajouter

    Les crochets sont interprétés ! Ca doit venir de là le problème, non ?

  8. #8
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 101
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 101
    Points : 8 211
    Points
    8 211
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par corneliux
    Les crochets sont interprétés ! Ca doit venir de là le problème, non ?
    Non, c'est tout à fait normal



    Pour commencer rajoute des ' autour des clefs des tableaux associatifs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_POST['form_annee_du'] (et non $_POST[form_annee_du])
    Vire les @

    Fais un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    echo '<xmp>' ;
    print_r($_POST) ;
    echo '</xmp>' ;
    ... dans la page de traitement pour voir si tu reçois les bonnes données

    Fais un echo des requêtes d'INSERT pour contrôler leur validité de visu.

    Teste si elles passent correctement avec mysql_error( )

    etc.

    Bref, débogue
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  9. #9
    Membre confirmé Avatar de KibitO
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2004
    Messages
    616
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2004
    Messages : 616
    Points : 606
    Points
    606
    Par défaut
    Tu comptes le nombre de personnes (select count(*) from id...) et tu te sers de ce résultat pour boucler sur tes insertions.

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Bon, les variables passent bien, voici ce que je vois en faisant echo $_POST
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Array ( [form_num_semaine] => [form_jour_du] => jj [form_mois_du] => mm [form_annee_du] => aaaa [form_jour_au] => jj [form_mois_au] => mm [form_annee_au] => aaaa 
    [personnes] => Array 
    ( [\'0\'] => Array ( [\'pourcent\'] => 100 [\'com\'] => dsd [\'id\'] => 2 )
    [\'1\'] => Array ( [\'pourcent\'] => 100 [\'com\'] => [\'id\'] => 3 )
    [\'2\'] => Array ( [\'pourcent\'] => 100 [\'com\'] => [\'id\'] => 4 ) 
    [\'3\'] => Array ( [\'pourcent\'] => 100 [\'com\'] => [\'id\'] => 5 ) 
    [\'4\'] => Array ( [\'pourcent\'] => 100 [\'com\'] => [\'id\'] => 6 ) 
    [\'5\'] => Array ( [\'pourcent\'] => 100 [\'com\'] => [\'id\'] => 7 ) 
    [\'6\'] => Array ( [\'pourcent\'] => 100 [\'com\'] => [\'id\'] => 8 ) 
    [\'7\'] => Array ( [\'pourcent\'] => 100 [\'com\'] => [\'id\'] => 9 )
    [\'8\'] => Array ( [\'pourcent\'] => 100 [\'com\'] => [\'id\'] => 10 )
    [\'9\'] => Array ( [\'pourcent\'] => 100 [\'com\'] => [\'id\'] => 11 ) ) 
    [Submit] => Valider )
    Pour les requêtes, les dates, le num de la semaine passent bien mais je ne parviens pas à récupérer les id, pourcentages et commentaires !
    Ma boucle est telle quelle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    foreach ( $_POST['personnes'] as $personne ) {
    $requete = "INSERT INTO `entrainement` ( `id` , `date_du` , `date_au` , `id_joueur` , `pourcentage` , `commentaire` , `semaine_numero` )
    VALUES ('', '".$date_du."', '".$date_au."', '".$personne['id']."', '".$personne['pourcent']."', '".$personne['com']."', '".$num_semaine."')";
     
    	echo $requete."<br>";
    	mysql_query($requete);
    	}

    Désolé, mais je ne comprend pas très bien cette ligne : "foreach ( $_POST['personnes'] as $personne )".
    A la suite de ça, je récupère bien la valeur du pourcentage en faisant $personne['pourcent'], non ?

  11. #11
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 101
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 101
    Points : 8 211
    Points
    8 211
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par corneliux
    Bon, les variables passent bien, voici ce que je vois en faisant echo $_POST
    Bizarre ces \' ...

    Que donne le echo $requete ?

    Désolé, mais je ne comprend pas très bien cette ligne : "foreach ( $_POST['personnes'] as $personne )".
    En soumettant le <form> tu créées un tableau $_POST['personnes'], foreach( ) permet de le parcourir et de placer chaque élément successif dans $personne.

    A la suite de ça, je récupère bien la valeur du pourcentage en faisant $personne['pourcent'], non ?
    Oui, théoriquement.





    Bon, essaie ce testcase simpliste :

    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
    <?php
        if ( ! empty($_POST['fruits']) ) {
            header('Content-Type: text/plain') ;
            print_r($_POST['fruits']) ;
            foreach ( $_POST['fruits'] as $fruit ) {
                echo "INSERT INTO fruits(fruit_id, fruit_nom) VALUES($fruit[id], '$fruit[nom]')\n" ;
            }
            exit( ) ;
        }
    ?>
    <form method="post">
        <input type="hidden" name="fruits[0][id]" value="123">
        <input type="text" name="fruits[0][nom]" value="Pomme">
     
        <input type="hidden" name="fruits[1][id]" value="234">
        <input type="text" name="fruits[1][nom]" value="Fraise">
     
        <input type="submit">
    </form>
    Et dis-nous si tu obtiens bien :

    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
    Array
    (
        [0] => Array
            (
                [id] => 123
                [nom] => Pomme
            )
     
        [1] => Array
            (
                [id] => 234
                [nom] => Mangue
            )
     
    )
    INSERT INTO fruits(fruit_id, fruit_nom) VALUES(123, 'Pomme')
    INSERT INTO fruits(fruit_id, fruit_nom) VALUES(234, 'Mangue')
    Normalement oui. Et bien tu as juste à appliquer le même principe à ton problème.
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  12. #12
    Membre confirmé Avatar de KibitO
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2004
    Messages
    616
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2004
    Messages : 616
    Points : 606
    Points
    606
    Par défaut
    Tu as essayé de faire ce que je t'ai dit ? Je vois que tu te compliques bien la tête pour pas grand chose, et le programme également..

  13. #13
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 8
    Points : 2
    Points
    2
    Par défaut

    MERCI Merci et encore merci Séb

    J'avais mis dans mon formulaire :
    <input name=\"personnes['".$k."']['pourcent']\" type='text' size='3' value='100'>

    Alors qu'il ne fallait pas mettre les ' .


    Maintenant, je vais aller chercher un fouet pour m'autoflageller.

    Et puis je vais surtout pouvoir continuer à me prendre la tête avec PHP, mais c'est tellement bon

  14. #14
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par KibitO
    Tu as essayé de faire ce que je t'ai dit ? Je vois que tu te compliques bien la tête pour pas grand chose, et le programme également..
    Ben en fait, le problème était que les id ne se suivaient pas forcément ! Donc, boucler en faisant un ++ n'était pas possible (enfin, a priori tout est possible).
    Et comme j'étais parti sur la proposition de Séb, je n'ai pas voulu rechanger mon code.
    Mais en tout cas merci pour ton aide. Très réactif ce forum. I'll be back 8)

  15. #15
    Membre confirmé Avatar de KibitO
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2004
    Messages
    616
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2004
    Messages : 616
    Points : 606
    Points
    606
    Par défaut
    Dans ce cas c'était mieux de les trier au préalable.

    Jt'en pire, et bon code.

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

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