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 :

Récupérer les données de plusieurs formulaires avec un seul submit.


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2019
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2019
    Messages : 15
    Points : 10
    Points
    10
    Par défaut Récupérer les données de plusieurs formulaires avec un seul submit.
    Bonjour,
    Votre apprenti en php est de retour et à besoin de votre aide. En fait , j’ai créé de formulaire de votre pour des gens. Pour chaque personne on peut votre plusieurs profils. Alors j’ai fait le formulaire de la manière suivante :
    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
    <input type="text" name="nom" value="Francois" > <br/>
    <input type="checkbox"  name="profile[]" value ="courageux" > <label> Courageux  </label> <br/>
    <input type="checkbox"  name="profile[]" value ="gentil" > <label> Gentil  </label> <br/>
    <input type="checkbox"  name="profile[]" value ="ouvert " > <label> Ouvert  </label> <br/>
     
    <input type="text" name="nom" value="Alice" > <br/>
    <input type="checkbox"  name="profile[]" value ="courageux" > <label> Courageux  </label> <br/>
    <input type="checkbox"  name="profile[]" value ="gentil" > <label> Gentil  </label> <br/>
    <input type="checkbox"  name="profile[]" value ="ouvert " > <label> Ouvert  </label> <br/>
     
    <input type="text" name="nom" value="Yohan" > <br/>
    <input type="checkbox"  name="profile[]" value ="courageux" > <label> Courageux  </label> <br/>
    <input type="checkbox"  name="profile[]" value ="gentil" > <label> Gentil  </label> <br/>
    <input type="checkbox"  name="profile[]" value ="ouvert " > <label> Ouvert  </label> <br/>

    Mon objectif est qu’on puisse voter plusieurs profils pour chaque personne et que je puisse afficher le résultats de chaque personne . Donc j’ai saisir le code de récupérer (☺️☺️☺️)
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php foreach ($_Post[‘’profile’’] as $P ) { echo $_Post[‘profile’].’  ´. $p ;} ?>

    Le problème est que ce code donne tous les votes à un seul nom , en occurrence le premier nom de mon formulaire.
    Aidez moi svp !!!

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    essayez les noms suivants pour les champs et ensuite regardez le résultat dans $_POST
    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
    <input type="text" name="personne[1][nom]" value="Francois"> <br/>
    <label><input type="checkbox"  name="personne[1][profil][]" value ="courageux">Courageux</label> <br/>
    <label><input type="checkbox"  name="personne[1][profil][]" value ="gentil">Gentil</label> <br/>
    <label><input type="checkbox"  name="personne[1][profil][]" value ="ouvert">Ouvert</label> <br/>
     
    <input type="text" name="personne[2][nom]" value="Alice"> <br/>
    <label><input type="checkbox"  name="personne[2][profil][]" value ="courageux">Courageux</label> <br/>
    <label><input type="checkbox"  name="personne[2][profil][]" value ="gentil">Gentil</label> <br/>
    <label><input type="checkbox"  name="personne[2][profil][]" value ="ouvert">Ouvert</label> <br/>
     
    <input type="text" name="personne[3][nom]" value="Yohan"> <br/>
    <label><input type="checkbox"  name="personne[3][profil][]" value ="courageux">Courageux</label> <br/>
    <label><input type="checkbox"  name="personne[3][profil][]" value ="gentil">Gentil</label> <br/>
    <label><input type="checkbox"  name="personne[3][profil][]" value ="ouvert">Ouvert</label> <br/>

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2019
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2019
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    Merci

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2019
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2019
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    Merci beaucoup Mathieu pour ce code. Le problème est que je n’arrive pas à récupérer les données dans l’array $_POST . J’ai essayé toute mon imagination mais ça m’envoies : indefined [profile]. Quel est donc le code de récupération, stp ?

  5. #5
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 386
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    A mon avis, c'est pas résolu, donc si tu veux davantage de réponses, clique sur le bouton n'est pas résolu. Pour avoir une idée du code de récupération, met var_dump($_POST); dans ton code dans l'action de ton formulaire.
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Pour reprendre l'exemple proposé par mathieu :
    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
    23
    24
    25
    26
    <form method="post" action="">
    	<p>
    		Francois : <br/>
    		<input type="hidden" name="personne[1][nom]" value="Francois" />
    		<label><input type="checkbox"  name="personne[1][profil][]" value ="courageux">Courageux</label> 
    		<label><input type="checkbox"  name="personne[1][profil][]" value ="gentil">Gentil</label> 
    		<label><input type="checkbox"  name="personne[1][profil][]" value ="ouvert">Ouvert</label> 
    	</p>
    	<p>
    		Alice : <br/>
    		<input type="hidden" name="personne[2][nom]" value="Alice" />
    		<label><input type="checkbox"  name="personne[2][profil][]" value ="courageux">Courageux</label> 
    		<label><input type="checkbox"  name="personne[2][profil][]" value ="gentil">Gentil</label> 
    		<label><input type="checkbox"  name="personne[2][profil][]" value ="ouvert">Ouvert</label> 
    	</p>
    	<p>
    		Yohan : <br/>
    		<input type="hidden" name="personne[3][nom]" value="Yohan" />
    		<label><input type="checkbox"  name="personne[3][profil][]" value ="courageux">Courageux</label> 
    		<label><input type="checkbox"  name="personne[3][profil][]" value ="gentil">Gentil</label> 
    		<label><input type="checkbox"  name="personne[3][profil][]" value ="ouvert">Ouvert</label> 
    	</p>
    	<p>
    		<input type="submit" value="OK" />
    	</p>
    </form>
    Récupération :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
    if( isset($_POST['personne']) )
    {
    	foreach( $_POST['personne'] as $id => $personne )
    	{
    		echo $id.' - '.$personne['nom'];
    		if( !empty( $personne['profil'] ) )
    		{
    			echo ' : '.implode(', ',$personne['profil']);
    		}
    		echo '<br/>';
    	}
    }
    ?>
    On obtient (en fonction des cases cochées) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    1 - Francois : courageux
    2 - Alice : gentil, ouvert
    3 - Yohan : courageux, gentil

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2019
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2019
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    merci beaucoup/jreaux62
    Ça marche bien . Même si je n’ai rien compris dans le code 😅😅😅 . Merci 🙏

  8. #8
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2019
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2019
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    Slt Jreaux et tous les autre membres de ce super forum .
    Le code de récupération que tu m’as donné marche bien. Mais Comment faire si pour chaque profile , je veux afficher le nom de la personne suivi de son profile . C’est à dire que je veux ´enregistrer ça dans ma table de telles sorte que on ait :
    1. François Gentil
    2. Français Courageux
    3. Alice Altruiste
    3. Alice Chercheur


    Nb : en php , j’ai utilisé le code de récupération suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <?php. Foreach ( personne[profile] ) { echo $_POSTE[personne][nom].’    
      ‘.$_POSTE[personne][profile] ?>
    Mais je me suis flatté 😅😅😅😅

    Merci pour l’attention !!

  9. #9
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    1- déjà, il faut que tu comprennes le code !

    2- Peux-tu montrer la STRUCTURE actuelle de la table SQL en BDD ?

  10. #10
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2019
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2019
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    Ok ! Dans ma table Sql , je veux avoir dans chaque entrées :
    Id. Date Nom Profile
    16/11/19 François Altruiste
    16/11/19. Alice Gentil
    17/11/19 François Courageux


    J’espère que je me fais comprendre 🙏🙏🙏

  11. #11
    Invité
    Invité(e)
    Par défaut
    Si chaque personne ne peut avoir q'UN SEUL "profil, alors il faut des <input type="radio">, et enlever les crochets [] :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    		<label><input type="radio" name="personne[1][profil]" value ="courageux">Courageux</label> 
    		<label><input type="radio" name="personne[1][profil]" value ="gentil">Gentil</label> 
    		<label><input type="radio" name="personne[1][profil]" value ="ouvert">Ouvert</label>
    • Le "1" correspond à l'id (auto-incrémenté) de la personne, dans la table de la BDD.
    • personne[1][profil] (type="radio") : on ne récupère qu'une seule valeur pour le "profile"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
    if( isset($_POST['personne']) )
    {
    	foreach( $_POST['personne'] as $id => $personne )
    	{
    		$personne_id = $id;
    		$personne_nom = $personne['nom'];
    		$personne_profil = ( !empty( $personne['profil'] ) )? $personne['profil'] : ''; // vide si rien de coché
    		// ICI, on peut enregistrer en BDD
    		// .....
    		// .....
    	}
    }
    ?>
    Ensuite....... Si déjà tu ne comprends pas le code que je te donne, je ne vois pas comment je pourrais t'expliquer la suite.
    Il faut, au minimum, que tu apprennes/comprennes LES BASES du PHP, ainsi que des interactions avec la BDD.

    A LIRE :


  12. #12
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2019
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2019
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    Merci beaucoup ! Surtout pour le conseil 😅😅😅
    Je comprend ce code. Mais en fait , on peut attribuer plusieurs profile à une personne , donc le checkbox me convient. Mais j’aurai voulu que dans ma table , chaque profile choisi soit dans une entrée avec le nom de la personne. Comme ça je pourai plus tard compter le nombre de entrée (donc le nombre de profile choisi ) et je pourai aussi savoir combien de profile Francois a eu avec le code : SELECT Count (*) As nbre From ma_table Where nom= “François”.
    Ou bien je pourraiq savoir combien de *altruiste* ou de *courageux* François a eu, ou combien de gentil*, *Alice a eu grâce au code
    SELECT Count (*) As Nbre From ma_Table Where Nom=“Alice “ And profile=“gentil”.

    J’espère que vous me comprenez maintenant
    🙏🙏🙏 vraiment désolé pour des questions d’aussi bas niveaux. J’espère ne pas vous ennuyer 😅😅😅

  13. #13
    Invité
    Invité(e)
    Par défaut
    Il faut TROIS tables.

    1- t_personnes : cette table ne contient QUE les infos concernant la personne
    • id_personne (INT, auto-incrément)
    • nom_personne
    • (... autres données, ne concernant QUE la personne : age,...)

    De la forme :
    • 1 Francois
    • 2 Alice
    • 3 Yohan
    • ...


    2- t_profils : cette table va servir notamment à "construire" les checkbox
    • id_profil (INT, auto-incrément)
    • nom_profil

    De la forme :
    • 1 Courageux
    • 2 Gentil
    • 3 Ouvert
    • ...


    3- t_profils_personnes : c'est une table RELATIONNELLE
    • id_personne (INT) (PAS auto-incrément !)
    • id_profil (INT) (PAS auto-incrément !)

    Dans cette table, on enregistrera les RELATIONS entre "personnes" et "profils" (les résultats du formulaire).
    De la forme :
    • 1 1
    • 1 2
    • 2 1
    • 2 3
    • 3 3


    4- Les requêtes SQL : il faudra utiliser des JOINTURES.

    4a- Sélection : TOUS
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    "SELECT 
       PER.id_personne, PER.nom_personne, 
       PRF.id_profil, PRF.nom_profil, 
     
       FROM t_personnes PER
       LEFT JOIN t_profils_personnes PPR
          ON PPR.id_personne = PER.id_personne
       LEFT JOIN t_profils PRF
          ON PRF.id_profil = PPR.id_profil
    "

    4a- Sélection pour "François" -> en fait, on utilisera id_personne qui est auto-incrémenté, donc UNIQUE :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    "SELECT 
       PER.id_personne, PER.nom_personne, 
       PRF.id_profil, PRF.nom_profil, 
     
       FROM t_personnes PER
       LEFT JOIN t_profils_personnes PPR
          ON PPR.id_personne = PER.id_personne
       LEFT JOIN t_profils PRF
          ON PRF.id_profil = PPR.id_profil
     
       WHERE PER.id_personne = 1
    "

  14. #14
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2019
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2019
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    Ok ! Je vois. Merci beaucoup ! Tu m’a rendu un grand service

Discussions similaires

  1. Récupérer les données d'un formulaire avec un nombre de champs similaires évolutifs
    Par jimmyneutron dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 20/03/2012, 23h14
  2. Envoyer les données de plusieurs forms avec un autre formulaire
    Par malgache dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 19/10/2011, 17h15
  3. Récupérer les données d'un formulaire
    Par rimeh dans le forum Langage
    Réponses: 12
    Dernier message: 05/02/2007, 14h58
  4. Réponses: 1
    Dernier message: 26/01/2007, 09h28
  5. récupérer les données d'un formulaire un peu spécial
    Par Jim_Nastiq dans le forum Interfaces Graphiques
    Réponses: 12
    Dernier message: 10/07/2006, 10h53

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