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 :

intitulé et écriture de variables dans un formulaire


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2012
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2012
    Messages : 74
    Par défaut intitulé et écriture de variables dans un formulaire
    Bonsoir,
    A partir d'une base de données je souhaite extraire 4 valeurs :
    Id,prenom,nom, case à cocher.

    Je construis un formulaire avec des variables .
    J'ai un gros problème de désignation des input : name ="nom{i}" name = "box{$i}" etc....
    J'envoie les input en haut de page et essaye de détecter les 4 valeurs.
    c'est la raison de la boucle $j qui essaye de récupérer les POST

    IMPOSSIBLE !....

    Je pense que les noms des variables sont mal écris. Est-ce le cas ?
    J'ai essayé toutes les combinaisons possibles :

    nom{i},nom[$i],nom$i,nom.$i , rien n'y fait.

    Pouvez-vous m'aider s'il vous plait.

    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
     
    <?php
    for($j=1;$j<=12;$j++){
    			if($_POST['box.$j'] == "on"){
    				echo "choix activé".'<br>';
    			}else{
    				echo "choix inactivé".'<br>';
    			}
    		}	
     
     
    			$reponse = $bdd->query("SELECT * FROM Eleves");
    			?>
    			<form method = "post" action ="">
    				<?php
    				$i= 1;
    				WHILE($donnees = $reponse->fetch()){	
    					$id{$i} = $donnees['id'];
    					$prenom{$i} = $donnees['PrénomMembre'];
    					$nom{$i}= $donnees['NomMembre'];
    					?>
    					<input type="text" name = "prenom{$i}" value = "<?php echo $prenom{$i};?>" />
    					<input type="text" name = "nom{$i}" value = "<?php echo $nom{$i};?>"." " />
    					<input type="checkbox" name = "box{$i}" value ="OFF"/><br>
    					<?php
    						$i = $i+1;
    				}	
    				?>
    					<input type = "submit" name = "envoi" value = "envoyer" />
    			?><br>
    			</form>

  2. #2
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Bonsoir,

    Il y a plusieurs souci dans ce code.
    J'ai corrigé et mis mes remarques en commentaires.

    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
     
    <?php
    /**
     * Une bonne technique est de vérifier ce qu'on reçoit dans le $_POST
     * Ce bout de code, vous permettra de vérifier le contenu
     */
     
    if ($_POST) {
        echo '<pre>';
        var_dump($_POST);
        echo '</pre>';
     
    }
     
     
    for ($j = 1; $j <= 12; $j++) {
        //Concatenation incorecte , la concaténation se fait après les quotes
        //revoir sur Php.net différence entre quote ' et double quote " 
        if ($_POST['box' . $j] == "on") {
            echo "choix activé" . '<br>';
        } else {
            echo "choix inactivé" . '<br>';
        }
    }
     
    //Je vais supposer que $bdd est initialisée plus haut
    $reponse = $bdd->query("SELECT * FROM Eleves");
    ?>
    <form method="post" action="">
        <?php
        $i = 1;
        while ($donnees = $reponse->fetch()) {
            /**On est dans un while , pourquoi vouloir créer des variables avec des noms différents
             *  alors que nous sommes dans une boucle et donc les variables ne seront de toutes façons pas
             * utilisées à l'itération suivante */
     
            // $id pas utilisé dans cette boucle , donc pourquoi l'initialiser ?
            $id = $donnees['id'];
            //PrénomMembre mettre des accents, espace est à proscrire dans les attributs de base de données. 
            // Cela engendre trop de soucis
            $prenom = $donnees['PrénomMembre'];
            $nom = $donnees['NomMembre'];
            ?>
            <!--        les variables ne peuvent êtres lues que dans des balises php    -->
            <input type="text" name="prenom<?php echo $i ?>" value="<?php echo $prenom; ?>"/>
            <input type="text" name="nom <?php echo $i ?>" value="<?php echo $nom; ?>" ." " />
            <input type="checkbox" name="box<?php echo $i ?>" value="OFF"/><br>
            <?php
            //autant utiliser la version courte
    //        $i = $i + 1;
            $i++;
        }
        ?>
        <input type="submit" name="envoi" value="envoyer"/>
        <br>
    </form>

  3. #3
    Membre émérite
    Femme Profil pro
    Service informatique presque à moi seule (TPE), ex-architecte fonctionnel
    Inscrit en
    Août 2017
    Messages
    358
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 57
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Service informatique presque à moi seule (TPE), ex-architecte fonctionnel
    Secteur : Finance

    Informations forums :
    Inscription : Août 2017
    Messages : 358
    Par défaut
    Comme le dit MaitrePylos, si le seul besoin est l'affichage, inutile d'utiliser des tableaux.
    Dans un autre contexte où on l'on aurait besoin de tableaux, les déclarer avant la boucle :

    avant de les alimenter dans la boucle avec :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    $nom[]= $donnees['NomMembre'];

    A la suite de quoi $nom[$i] donnera le (i+1)ème élément du tableau.

    Cher MaîtrePylos, ... merci pour la prise en compte des corrections

  4. #4
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Merci pour les corrections.
    Mais c'est ma marque de fabrique

  5. #5
    Membre émérite
    Femme Profil pro
    Service informatique presque à moi seule (TPE), ex-architecte fonctionnel
    Inscrit en
    Août 2017
    Messages
    358
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 57
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Service informatique presque à moi seule (TPE), ex-architecte fonctionnel
    Secteur : Finance

    Informations forums :
    Inscription : Août 2017
    Messages : 358
    Par défaut
    Il serait dommage que cela dépare une si belle (et juste) solution pour laquelle je vote, d'ailleurs.

  6. #6
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Vos arguments m'ont convaincu
    Merci.

  7. #7
    Membre confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2012
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2012
    Messages : 74
    Par défaut
    Bonjour MaîtrePylos,
    Bonjour Parrafine,
    Tout d'abord, merci pour votre sympathique coup de mains.
    Vos conseils m'ont fait phosphorer et j'en suis à repenser complètement ce code.
    Je vais donc vous expliquer plus précisément le contexte et ce que je cherche à faire.
    J'ai construit dans ma bdd une table réservée à cet essai.
    J'ai donc une table eleves, contenant Nom,Prenom,Sport.
    Je veux afficher les eleves qui font du tennis ,et pouvoir effacer éventuellement un élève.
    J'affiche donc les prenoms et noms et rajoute une case à cocher.

    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
     
    <body>
    		<?php
    		$bdd = new PDO('mysql:host= ................');
    		$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    			$reponse = $bdd->query("SELECT * FROM eleves WHERE tennis = 1");
    			?>
    			<form method = "post" action = ''>
    				<?php
    				WHILE($donnees = $reponse->fetch()){
    					?>
    					<input type ="text" name ="prenom" value = "<?php echo $donnees['prenom'];?>" />
    					<input type ="text" name ="nom" value = "<?php echo $donnees['nom'];?>" />
    					<input type ="checkbox" nom ="tennis" value = "off" />
    					<?php
    				}
    				// Je rajoute les boutons "ajout" et "supprimer les cases cochées"
    					?><br>
    					<input  type = "submit" name = "ajout" size = "20" value = "Ajouter un membre" />
    				&nbsp;&nbsp;&nbsp;&nbsp;
    				<input  type = "submit" name = "suppression" size = "20" value = "Supprimer les noms cochés" /><br>
    				?>
    			</form>
    J'obtiens la liste suivante :

    Nom : exemple.jpg
Affichages : 62
Taille : 29,3 Ko

    Voilà : C'est à partir de là que ça ne va plus.
    Je souhaite lire la liste avec une boucle for pour déterminer quelle est ou quelles sont les cases cochées et là je n'y arrive pas !.. (honte à moi)
    "Ajouter un membre " ne pose pas de problème.
    "Supprimer les noms cochés" ne marche pas.

    Le formulaire renvoie en haut de page, et c'est là je pense que je dois détecter les cases postées. Comment faire ?

    Merci d'avance. Désolé ce doit être d'un niveau "débutant -- ".

  8. #8
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    C'est assez simple.

    Je vais partir du constat que dans votre table élèves il y a un id unique qui identifie chaque ligne.

    Du coup, votre formulaire doit ressembler à ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    WHILE($donnees = $reponse->fetch()){
    					?>
    					<input type ="text" name ="prenom" value = "<?php echo $donnees['prenom'];?>" />
    					<input type ="text" name ="nom" value = "<?php echo $donnees['nom'];?>" />
    					<input type ="checkbox" name="delete[]" value = ""<?php echo $donnees['id'];?>" />
    					<?php
    				}
    Donc ici, je donne un nom à votre checkbox, qui sera un tableau (delete[]) et comme valeur les id à supprimer quand ils sont cochés.

    Dans votre partie sql, il vous suffit dès lors un faire un foreach de et de récupérer chaque id à supprimer.

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

Discussions similaires

  1. Récupération de variable dans un Formulaire
    Par dunbar dans le forum Langage
    Réponses: 5
    Dernier message: 30/11/2006, 20h00
  2. integrer une variable dans un formulaire html
    Par oops! dans le forum Langage
    Réponses: 3
    Dernier message: 08/09/2006, 19h48
  3. Probleme d'envoi de variable dans un formulaire
    Par vivian dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 18/08/2006, 12h17
  4. Réponses: 7
    Dernier message: 02/08/2006, 15h51
  5. passage de variables dans un formulaire
    Par albo69 dans le forum Langage
    Réponses: 4
    Dernier message: 16/02/2006, 22h52

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