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 :

Stocker plusieurs variables qui portent le même nom


Sujet :

PHP & Base de données

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 16
    Points : 8
    Points
    8
    Par défaut Stocker plusieurs variables qui portent le même nom
    Bonsoir à vous,

    Mon titre peut paraître confus mais je m'explique :

    J'ai un formulaire qui, une fois remplis, stocke les données rentrées dans une base de données.
    Avec les colonnes : Nom_personnage, Prenom_personnage etc...

    Seulement, dans mon formulaire, j'aimerais mettre plusieurs champs "NOM PERSO" et "PRENOM PERSO" de sorte que l'on remplisse d'un coup les fiches d'une vingtaine de persos et qui rentre les vingts noms et les vingts prenoms dans les colonnes Nom_personnage et Prenom_personnage de la table.

    Mais quand je met plusieurs champs texte et que je remplis les vingts, seulement le dernier est rentré dans la base. J'aimerais savoir si il y aurait un système pour rentrer une vingtaine de champs et que cela produise vingts entrées différentes sous la colonne Nom_Personnage ou Prenom_Personnage.


    N'hésitez pas si je n'ai toujours pas été très clair.



    Mon code :


    INDEX :


    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
    <form method="post" action="mysql.php"> 
     
    	<td><input type="text" name="nom" id="nom" /></td>
    	<td><input type="text" name="prenom" id="prenom" /></td>
     
    	<td><input type="text" name="nom" id="nom" /></td>
    	<td><input type="text" name="prenom" id="prenom" /></td>
     
    	<td><input type="text" name="nom" id="nom" /></td>
    	<td><input type="text" name="prenom" id="prenom" /></td>
     
     
    <input type="submit" class="button" value="Envoyer !" /> 
    </form>




    MYSQL.PHP


    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
    <?php 
    $nom = addslashes($_POST["nom"]); 
    $prenom = addslashes($_POST["prenom"]); 
     
     
    if($bd<>0) 
    { 
     
        $requete="insert into test VALUES ('', '".$nom."','".$prenom."')"; 
        $resultat=@mysql_query($requete,$bd); 
        if($resultat<>FALSE) 
        { 
            echo 'C'est not&eacute; !<br />'; 
           
        } 
        deconnect_bd($bd);	
    }
    ?>
    J'ai allégé les infos inutiles du code pour que ce soit plus lisible.

    Merci encore de votre aide.

    Cordialement.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur C++
    Inscrit en
    Avril 2012
    Messages
    771
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 771
    Points : 1 631
    Points
    1 631
    Par défaut
    Bonsoir,

    transforme ton input en tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="text" name="nom[]" id="nom" />
    se qui aura pour effet sur la page traitement de ton formulaire d'avoir un tableau nom qui contiendra pour chaque éléments le nom et tu pourra le traiter en conséquence.

    après tu peux pour associer les noms et prenom créer ton formulaire avec une boucle dans laquel tu utilisera un index pour ajouter dans ton tableau :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for( $i = 0; $i < 20; $i++){
         echo '<input type="text" name="tableau[' . $i . '][]" id="nom" />
    <input type="text" name="tableau[' . $i . '][]" id="nom" />';
    }
    tu retrouvera dans ta page traitement un tableau nommé tableau qui contiendra en index un chiffre allant de 0 à 19 et en valeur un tableau avec pour l'index 1 le nom et l'index 2 le prenom.
    une réponse vous a permis d'avancer ?

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 16
    Points : 8
    Points
    8
    Par défaut
    Bonsoir Exia93,

    Je n'ai toutefois pas compris la seconde partie de ton message avec le echo..
    De quelle manière, si je rentre dans les 15 champs nom, 15 noms, cela va me créer 15 lignes dans lesquels les noms seront remplis dans la base..


    Merci encore !

  4. #4
    Membre expérimenté
    Homme Profil pro
    Développeur C++
    Inscrit en
    Avril 2012
    Messages
    771
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 771
    Points : 1 631
    Points
    1 631
    Par défaut
    la seconde partie est la création de ton formulaire,

    la boucle va te créer des input nom et prenom de cette forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <input ... name="tableau[0][]" />
    => correspond à l'input nom1
    <input ... name="tableau[0][]" /> => correspond à l'input prénom1

    <input ... name="tableau[1][]" /> => correspond à l'input nom2
    <input ... name="tableau[1][]" /> => correspond à l'input prénom2

    donc dans ta page contenant le formulaire tu aura ta liste de champs pour enregistrer dans ta base 20 personne d'un coup,

    ensuite quand tu validera ton formulaire en cliquant sur le bouton submit tu recevra dans ta page traitement.php un tableau qui contiendra pour chaque index (les 0,1 ... jusqu'a 20 dans ton formulaire) un tableau qui contient à son tour le nom et le prénom d'un personne à toi ensuite de traiter se tableau pour former ta requête SQL qui insérera tout les contenu du tableau donc les 20 personnes si tu les a renseigné ou juste les champs qui ne sont pas vide(ce qui est conseillé).
    une réponse vous a permis d'avancer ?

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 16
    Points : 8
    Points
    8
    Par défaut
    Merci de ta réponse si rapide.

    J'ai donc mis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    	<tr>
    		<td><input type="text" name="nom[]" id="nom" class="nom" /></td>
    		<?php
    		for( $i = 0; $i < 10; $i++){
    		echo '<input type="text" name="tableau[' . $i . '][]" id="nom" />';
    }
    		?>
    	</tr>

    Mais je reçois une dizaine d'erreurs :


    ( ! ) Warning: trim() expects parameter 1 to be string, array given in C:\wamp\www\Formulaire S2 Events\traitement.php on line 54
    Call Stack
    # Time Memory Function Location
    1 0.0017 161480 {main}( ) ..\traitement.php:0
    2 0.0027 166568 trim ( ) ..\traitement.php:54

    ( ! ) Warning: trim() expects parameter 1 to be string, array given in C:\wamp\www\Formulaire S2 Events\traitement.php on line 54
    Call Stack
    # Time Memory Function Location
    1 0.0017 161480 {main}( ) ..\traitement.php:0
    2 0.0030 166776 trim ( ) ..\traitement.php:54

    ( ! ) Warning: trim() expects parameter 1 to be string, array given in C:\wamp\www\Formulaire S2 Events\traitement.php on line 54
    Call Stack
    # Time Memory Function Location
    1 0.0017 161480 {main}( ) ..\traitement.php:0
    2 0.0033 166880 trim ( ) ..\traitement.php:54

    ( ! ) Warning: trim() expects parameter 1 to be string, array given in C:\wamp\www\Formulaire S2 Events\traitement.php on line 54
    Call Stack
    # Time Memory Function Location
    1 0.0017 161480 {main}( ) ..\traitement.php:0
    2 0.0036 166928 trim ( ) ..\traitement.php:54

    ( ! ) Notice: Array to string conversion in C:\wamp\www\Formulaire S2 Events\traitement.php on line 59
    Call Stack
    # Time Memory Function Location
    1 0.0017 161480 {main}( ) ..\traitement.php:0

    ( ! ) Notice: Array to string conversion in C:\wamp\www\Formulaire S2 Events\traitement.php on line 59
    Call Stack
    # Time Memory Function Location
    1 0.0017 161480 {main}( ) ..\traitement.php:0
    MES LIGNES 54 ET 59 :

    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
    $msg_erreur = "Les champs suivants doivent &ecirc;tre obligatoirement 
    remplis :<br/><br/>";
    $msg_ok = "Votre demande a bien &eacute;t&eacute; prise en compte.";
    $message = $msg_erreur;
     
     
    define('MAIL_DESTINATAIRE','a@a.fr'); // remplacer par votre email
    define('MAIL_SUJET','Message du formulaire de réservation');
     
    //CHAMPS
    if (empty($_POST['nom'])) 
    $message .= "message<br/>";
    if (empty($_POST['prenom'])) 
    $message .= "message<br/>";
     
    if (filter_var($mail, FILTER_VALIDATE_EMAIL)) {
    } else {
    $message .= "Votre adresse mail est manquante ou incorrecte<br/>";
    }
     
    if (strlen($message) > strlen($msg_erreur)) {
      echo $message; die();
    }
    foreach($_POST as $index => $valeur) {
      $$index = stripslashes(trim($valeur));
    }
     
    // ENVOI DU MAIL ...
    $mail_entete  = "MIME-Version: 1.0\r\n";
    $mail_entete .= "From: {$_POST['nom']} {$_POST['prenom']} "
                 ."<{$_POST['mail']}>\r\n";
    $mail_entete .= 'Reply-To: '.$_POST['mail']."\r\n";
    $mail_entete .= 'Content-Type: text/plain; charset="iso-8859-1"';
    $mail_entete .= "\r\nContent-Transfer-Encoding: 8bit\r\n";
    $mail_entete .= 'X-Mailer:PHP/' . phpversion()."\r\n";
    L'envoi du mail c'est pour envoyer les infos ensuite par mail..



    Merci encore de ton aide !

  6. #6
    Membre expérimenté
    Homme Profil pro
    Développeur C++
    Inscrit en
    Avril 2012
    Messages
    771
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 771
    Points : 1 631
    Points
    1 631
    Par défaut
    pour ton formulaire çà serait plutôt comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <?php
    for( $i = 0; $i < 10; $i++){
        echo '<tr>
    		<td><input type="text" name="tableau[' . $i . '][]" id="nom" class="nom" /></td>
    		<td><input type="text" name="tableau[' . $i . '][]" id="prenom" class="prenom" /></td>
    	</tr>';
    }
    chaque tour de boucle te créera une nouvelle ligne dans ton tableau HTML et t'affichera deux nouveau input,

    par contre tu doit revoir le traitement dans ta page taitement.php car tu recevra un tableau qui contient des tableau donc tu va devoir parcourir ton tableau avec un foreach() puis parcourir chaque sous tableau avec un autre foreach() donc tu aurau quelque chose qui ressemblera à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    foreach($tableau as $key=>$value){
        foreach($value as $cle=>$valeur){
            echo $valeur;
    }
    }
    le premier foreach parcours chaque personne de ton tableau,

    à chaque tour de boucle la seconde boucle foreach() parcours les différentes information de cette personne(dans ton cas le nom et le prénom),

    il te suffira alors d'alimenter ta requête SQL à chaque tours de boucle et à la fin de l'exécution de tes deux foreach d'exécuter ta requête.
    une réponse vous a permis d'avancer ?

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 16
    Points : 8
    Points
    8
    Par défaut
    Merci encore de ta réponse rapide mais j'ai vraiment beaucoup de mal avec les boucles et les structures type foreach (oui, je suis 99 % designer, 1% developpeur :p)

    Il faut déclarer les variables cle, valeur, tableau avant non ?


    Merci encore !

  8. #8
    Membre expérimenté
    Homme Profil pro
    Développeur C++
    Inscrit en
    Avril 2012
    Messages
    771
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 771
    Points : 1 631
    Points
    1 631
    Par défaut
    désolé une petite erreur la variable $tableau n'existe pas, c'est $_POST['tableau'] qui correspond à la variable qui est reçu du formulaire,

    ensuite $key, $value, $cle et $valeur sont créée elle par la boucle foreach() donc tu n'a pas à les déclarer autre part.
    une réponse vous a permis d'avancer ?

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 16
    Points : 8
    Points
    8
    Par défaut
    Merci,

    Je commence à y voir un peu plus clair au niveau de la fonction du foreach ici mais je ne sais toujours pas ou le mettre..

    Pourrai-tu me donner un exemple avec mon code que je vois ou l'insérer ?


    Merci encore.

    Je te redonne bien 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
    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
    $nom = ($_POST["nom"]); 
    $prenom = ($_POST["prenom"]); 
     
    $msg_erreur = "Les champs suivants doivent &ecirc;tre obligatoirement 
    remplis :<br/><br/>";
    $msg_ok = "Votre demande a bien &eacute;t&eacute; prise en compte.";
    $message = $msg_erreur;
     
     
    define('MAIL_DESTINATAIRE','a@a.fr'); 
    define('MAIL_SUJET','Message du formulaire de réservation');
     
    if (filter_var($mail, FILTER_VALIDATE_EMAIL)) {
    } else {
    $message .= "Votre adresse mail est manquante ou incorrecte<br/>";
    }
     
    if (strlen($message) > strlen($msg_erreur)) {
      echo $message; die();
    }
    foreach($_POST as $index => $valeur) {
      $$index = stripslashes(trim($valeur));
    }
     
     
    $mail_entete  = "MIME-Version: 1.0\r\n";
    $mail_entete .= "From: {$_POST['nom']} {$_POST['prenom']} "
                 ."<{$_POST['mail']}>\r\n";
    $mail_entete .= 'Reply-To: '.$_POST['mail']."\r\n";
    $mail_entete .= 'Content-Type: text/plain; charset="iso-8859-1"';
    $mail_entete .= "\r\nContent-Transfer-Encoding: 8bit\r\n";
    $mail_entete .= 'X-Mailer:PHP/' . phpversion()."\r\n";
     
    $mail_corps  = "Message de : $nom $prenom\n";
     
     
    if (mail(MAIL_DESTINATAIRE,MAIL_SUJET,$mail_corps,$mail_entete)) {
      echo $msg_ok;
    } else {
      echo "Une erreur est survenue lors de l'envoi du formulaire par email<br />";
    }
     
     
    $bd=connect_bd(); 
    mysql_query("SET NAMES UTF8");  
     
    if($bd<>0) 
    { 
     
        $requete="insert into test VALUES ('','".$nom."','".$prenom."')"; 
        $resultat=@mysql_query($requete,$bd); 
        if($resultat<>FALSE) 
        { 
            echo 'C'est noté ! !<br />'; 
     
        } 
        else 
        { 
            echo "Echec."; 
        } 
        deconnect_bd($bd);	
    } 
    ?>
    Pour que tu puisse y voir mieux toi aussi !


    Merci encore !

Discussions similaires

  1. [Google Maps] Des villes qui portent le même nom dans diffèrents pays
    Par bhrochdi dans le forum APIs Google
    Réponses: 2
    Dernier message: 15/10/2014, 11h18
  2. XML plusieurs balise qui portent le même nom.
    Par jeyGey dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 18/01/2013, 20h43
  3. Réponses: 2
    Dernier message: 21/06/2007, 08h44
  4. Réponses: 2
    Dernier message: 21/10/2006, 17h27
  5. supprimer les fichiers qui ont des mêmes noms
    Par manaboko dans le forum Langage
    Réponses: 5
    Dernier message: 08/03/2006, 09h09

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