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 :

comment recuperer un id à partir d'une liste deroulante issu d'une table [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    retraité de l'informatique de gestion
    Inscrit en
    Mars 2018
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : retraité de l'informatique de gestion
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2018
    Messages : 225
    Par défaut comment recuperer un id à partir d'une liste deroulante issu d'une table
    je voudrais recuperer les données d'un adherent choisi à partir d'une liste deroulante issue de ma base de sonnées:

    je vous adresse le 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
     
    	<div class="div_conteneur_page" style= "width:50% ;height:820px">
     
    			<div id="GTitre" style="width:100%;">
    				<h1 style="font-size:24px">Informations du compte :    Saison <?php echo  $dateS ; ?></h1>
    			</div>
    			<br>
    			<form method="post" action="gestion.php">
    				<table style="width: 90%; margin-left:40px;font-size:12px" >
    					<td>  
                            <select id="num_adh" name="num_adh" style="width:90%; font-size:14px"> <!--onchange="document.getElementById('param').value ='recup_adh';recolter()">-->
    							<option value="">Tout adhérent</option>
    							<?php
    							$liaison = mysqli_connect("localhost", "root","")  or die ("Acces a la base de donnee impossible !!!");
    							mysqli_select_db($liaison, "judoclub") or die ("Accès à la base de donnée impossible !!!");	
    							$requete = "SELECT * FROM inscr ORDER BY inscr_nomprenom ;";
    							$retours = mysqli_query($liaison, $requete) or die ("problème avec la requète ".$requete);
    							while($retour = mysqli_fetch_array($retours))
    							{
    								echo "<option value='".$retour["inscr_num"]."' > ".$retour["inscr_nomprenom"].",".$retour["inscr_num"]."</option>";
    							}
    						?>																			
    						</select>
    					</td>
    					<?php
    					if($retour["inscr_num"]!="")
    					{
    					$la_section = $retour["inscr_section"];
    					$le_nomprenom= $retour["inscr_nomprenom"];
    					$l_adresse = $retour["inscr_adresse"];
    					$le_codepostal = $retour["inscr_codepostal"];
    					}
    					?>
    				</table>
    			</form>
     
    				<br><br>
    				<table style="width: 80%; margin-left:40px;font-size:12px" >
    					<tr>
    						<td style="height: 4px; width: 40%;"><strong>Nom prénom</strong></td>
    						<td style="height: 4px;width:50%">
    							<Input type="text" id="nomprenom" name="nomprenom" value="<?php echo htmlentities($le_nomprenom); ?>" style="width:110%; height:25px" >
    						</td>
    					</tr>
    					<tr>
    						<td style="height: 4px; width: 40%;"><strong>Section</strong></td>
    						<td style="height: 4px;width:50%">
    							<input type="text" id="section" name="section" value="<?php echo htmlentities($la_section); ?>"style="width:110%; height:25px">
    						</td>
    					</tr>
    					<tr>
    						<td style="height: 4px; width: 40%;"><strong>Adresse</strong></td>
    						<td style="height: 4px;width:50%">
    							<input type="text" id="adresse" name="adresse" value="<?php echo htmlentities($l_adresse); ?>"style="width:110%; height:25px" >
    						</td>
    					</tr>
    					<tr>
    						<td style="height: 4px; width: 40%;"><strong>Code postal</strong></td>
    						<td style="height: 4px">
    							<input type="text" name="codepostal" id="codepostal" value="<?php echo htmlentities($le_codepostal); ?>"style="width:110%; height:25px">
    						</td>
    					</tr>
    je pensais que la commande $retour[champ] me donnerais satisfaction mais le champ $retour[inscr_num] n'est pas défini.

    merci de votre aide

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 347
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 347
    Billets dans le blog
    17
    Par défaut
    Tu utilises $retour["inscr_num"] *après* ta boucle while()
    Tu sors de cette boucle quand $retour vaut false
    Alors forcément $retour ne sera pas exploitable comme tu l'espères

    Dans l'idée il faut faire ceci :

    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
    <?php
     
    $liaison = mysqli_connect("localhost", "root","")  or die ("Acces a la base de donnee impossible !!!");
    mysqli_select_db($liaison, "judoclub") or die ("Accès à la base de donnée impossible !!!");
     
    // Récupère tous les adhérents
    $requete = "SELECT * FROM inscr ORDER BY inscr_nomprenom";
    $retours = mysqli_query($liaison, $requete) or die ("problème avec la requète ".$requete);
    $adherents = [];
    while ($retour = mysqli_fetch_array($retours)) {
        $adherents[] = $retour;
    }
     
    // Récupère 1 adhérent selon le formulaire
    $adherent = null;
    if (isset($_GET['num_adh']) && $_GET['num_adh'] !== '') {
        $num_adh = $_GET['num_adh']; // VALEUR A ECHAPPER POUR LE SQL !! => mysqli_real_escape_string()
        // On évite les "SELECT *" => On sélectionne les colonnes utiles uniquement
        $requete = "SELECT * FROM inscr ORDER BY inscr_nomprenom WHERE num_adh = {$num_adh}";
        $retours = mysqli_query($liaison, $requete) or die ("problème avec la requète ".$requete);
        $adherent = mysqli_fetch_array($retours);
    }
     
    ?>
    <form method="get" action="gestion.php">
        <select name="num_adh">
            <option value="">Tout adhérent</option>
            <?php foreach ($adherents as $retour): ?>
                <option value="<?= htmlspecialchars($retour["inscr_num"]) ?>">
                    <?= htmlspecialchars($retour["inscr_nomprenom"]) ?>,
                    <?= htmlspecialchars($retour["inscr_num"]) ?>
                </option>
            <?php endforeach ?>
        </select>
    </form>
     
    <?php if ($adherent !== null): ?>
        <table>
            <tr>
                <td><strong>Nom prénom</strong></td>
                <td><input type="text" name="nomprenom" value="<?= htmlspecialchars($adherent['inscr_nomprenom']) ?>"></td>
            </tr>
            etc.
        </table>
    <?php endif ?>
    Essaie de séparer PHP et HTML au max et de placer tes CSS dans un fichier dédiée, ça faciltera grandement la rédaction et la relecture de ton script.

    Si le but est d'avoir un formulaire d'édition il ne faudra pas oublier la balise <form> et ajouter un champ contenant l'ID de l'adhérent à modifier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="hidden" name="inscr_num" value="...">

  3. #3
    Membre éclairé
    Homme Profil pro
    retraité de l'informatique de gestion
    Inscrit en
    Mars 2018
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : retraité de l'informatique de gestion
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2018
    Messages : 225
    Par défaut
    Citation Envoyé par Séb. Voir le message
    Tu utilises $retour["inscr_num"] *après* ta boucle while()
    Tu sors de cette boucle quand $retour vaut false
    Alors forcément $retour ne sera pas exploitable comme tu l'espères

    Dans l'idée il faut faire ceci :

    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
    <?php
     
    $liaison = mysqli_connect("localhost", "root","")  or die ("Acces a la base de donnee impossible !!!");
    mysqli_select_db($liaison, "judoclub") or die ("Accès à la base de donnée impossible !!!");
     
    // Récupère tous les adhérents
    $requete = "SELECT * FROM inscr ORDER BY inscr_nomprenom";
    $retours = mysqli_query($liaison, $requete) or die ("problème avec la requète ".$requete);
    $adherents = [];
    while ($retour = mysqli_fetch_array($retours)) {
        $adherents[] = $retour;
    }
     
    // Récupère 1 adhérent selon le formulaire
    $adherent = null;
    if (isset($_GET['num_adh']) && $_GET['num_adh'] !== '') {
        $num_adh = $_GET['num_adh']; // VALEUR A ECHAPPER POUR LE SQL !! => mysqli_real_escape_string()
        // On évite les "SELECT *" => On sélectionne les colonnes utiles uniquement
        $requete = "SELECT * FROM inscr ORDER BY inscr_nomprenom WHERE num_adh = {$num_adh}";
        $retours = mysqli_query($liaison, $requete) or die ("problème avec la requète ".$requete);
        $adherent = mysqli_fetch_array($retours);
    }
     
    ?>
    <form method="get" action="gestion.php">
        <select name="num_adh">
            <option value="">Tout adhérent</option>
            <?php foreach ($adherents as $retour): ?>
                <option value="<?= htmlspecialchars($retour["inscr_num"]) ?>">
                    <?= htmlspecialchars($retour["inscr_nomprenom"]) ?>,
                    <?= htmlspecialchars($retour["inscr_num"]) ?>
                </option>
            <?php endforeach ?>
        </select>
    </form>
     
    <?php if ($adherent !== null): ?>
        <table>
            <tr>
                <td><strong>Nom prénom</strong></td>
                <td><input type="text" name="nomprenom" value="<?= htmlspecialchars($adherent['inscr_nomprenom']) ?>"></td>
            </tr>
            etc.
        </table>
    <?php endif ?>
    Essaie de séparer PHP et HTML au max et de placer tes CSS dans un fichier dédiée, ça faciltera grandement la rédaction et la relecture de ton script.

    Si le but est d'avoir un formulaire d'édition il ne faudra pas oublier la balise <form> et ajouter un champ contenant l'ID de l'adhérent à modifier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="hidden" name="inscr_num" value="...">

  4. #4
    Membre éclairé
    Homme Profil pro
    retraité de l'informatique de gestion
    Inscrit en
    Mars 2018
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : retraité de l'informatique de gestion
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2018
    Messages : 225
    Par défaut
    OK je crois voir le pb mais je dois decoder ton "code" car je suis debutant en PHP

    je vais separer au max le HTML et le PHP
    merci je reviens vers toi pour t'informer de mes progrès

  5. #5
    Membre éclairé
    Homme Profil pro
    retraité de l'informatique de gestion
    Inscrit en
    Mars 2018
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : retraité de l'informatique de gestion
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2018
    Messages : 225
    Par défaut
    me revoila.

    je n'ai pas encore créer mon fichier CCS mais cela va venir

    pour le reste j'ai adapter ta proposition à mon cas mais cela ne fonctionne pas

    je te remets mon code corrigé mais pas top :
    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
    65
    66
    67
    <?php  include("commun/ouvrir.php");
    	session_start();
    	//calcul de la saison
    	$mois=date('m');
    	
    	if ($mois<8) 
    	{ 
        $fin=date("y");
        $debut=date("Y")-1;
      	}
      	else 
    	{
        $debut=date("Y");
        $fin=date("y")+1;
      	}
    	$dateS=''.$debut.'/'.$fin.'';
    
    // Récupère tous les adhérents
    $requete = "SELECT * FROM inscr ORDER BY inscr_nomprenom";
    $retours = mysqli_query($liaison, $requete) or die ("problème avec la requète ".$requete);
    $adherents = [];
    while ($retour = mysqli_fetch_array($retours)) {
        $adherents[] = $retour;
    }
    
    // Récupère 1 adhérent selon le formulaire
    $adherent = null;
    if (isset($_GET['inscr_num']) && $_GET['inscr_num'] !== '') 
    {
        $num_adh = $_GET['inscr_num']; // VALEUR A ECHAPPER POUR LE SQL !! => mysqli_real_escape_string()
        // On évite les "SELECT *" => On sélectionne les colonnes utiles uniquement
        $requete = "SELECT * FROM inscr ORDER BY inscr_nomprenom WHERE inscr_num = {$num_adh}";
        $retours = mysqli_query($liaison, $requete) or die ("problème avec la requète ".$requete);
        $adherent = mysqli_fetch_array($retours);
    }
    ?>
    		<div class="div_conteneur_page" style= "width:50% ;height:820px">
    			<div id="GTitre" style="width:100%;">
    				<h1 style="font-size:24px">Informations du compte :    Saison <?php echo  $dateS ; ?></h1>
    			</div>
    			<br>
    			<form method="get" action="gestion.php">
       				 <select name="inscr_num" id="inscr_num">
            			<option value="">Tout adhérent</option>
            			<?php foreach ($adherents as $retour): ?>
                		<option value="<?= htmlspecialchars($retour["inscr_num"]) ?>">
                    		<?= htmlspecialchars($retour["inscr_nomprenom"]) ?>,
                    		<?= htmlspecialchars($retour["inscr_num"]) ?>
                		</option>
            			<?php endforeach ?>
        			</select>
    			</form>
    
    			<br><br>
    				<?php if ($adherent !== null): ?>
    				<table style="width: 80%; margin-left:40px;font-size:12px" >
    					<tr>
    						<td style="height: 4px; width: 40%;"><strong>Numéro</strong></td>
    						<td style="height: 4px;width:50%">
    							<input type="hidden" name="inscr_num" value="...">
    						</td>
    					<tr>
    						<td style="height: 4px; width: 40%;"><strong>Nom prénom</strong></td>
    						<td style="height: 4px;width:50%">
    						<input type="text" name="nomprenom" value="<?= htmlspecialchars($adherent['inscr_nomprenom']) ?>" style="width:110%; height:25px" >
    						</td>
    					</tr>

    $num_adh = $_GET['inscr_num']; // VALEUR A ECHAPPER POUR LE SQL !! => mysqli_real_escape_string()
    1- je ne vois pas où echapper $num_adh

    2- je ne comprends pas :<?php foreach ($adherents as $retour): ?>

    3- <?php if ($adherent !== null): ?>me donne une valeur nulle donc rien ne s'affiche

  6. #6
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 347
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 347
    Billets dans le blog
    17
    Par défaut
    1- je ne vois pas où echapper $num_adh
    A l'endroit même où je te l'ai mis, c'est pour éviter les injections SQL.
    Regarde la doc pour des exemples => https://php.net/mysqli-real-escape-string

    2- je ne comprends pas :<?php foreach ($adherents as $retour): ?>
    https://www.php.net/manual/fr/contro...ive-syntax.php
    Un excellent billet => https://www.developpez.net/forums/bl...hort-echo-tag/

    3- <?php if ($adherent !== null): ?>me donne une valeur nulle donc rien ne s'affiche
    Il faut que $adherent soit valorisé ligne 34

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

Discussions similaires

  1. [Artichow] Comment créer un graphe à partir d'une table mysql avec deux colonnes
    Par Amel_B dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 24/12/2013, 15h50
  2. Réponses: 6
    Dernier message: 16/07/2012, 17h43
  3. Réponses: 2
    Dernier message: 10/02/2012, 15h22
  4. Recuperer un ID à partir d'une liste pour suppression
    Par Bigoodheart dans le forum Struts 2
    Réponses: 2
    Dernier message: 05/10/2010, 09h46
  5. Réponses: 7
    Dernier message: 26/12/2007, 13h36

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