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 :

Listes liées


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Non communiqué
    Inscrit en
    Janvier 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Non communiqué

    Informations forums :
    Inscription : Janvier 2017
    Messages : 5
    Par défaut Listes liées
    Bonjour,
    nouveau sur ce site, alors je ne connais pas trop encore le fonctionnement.

    Je reprends un sujet qui n'a pas bougé depuis 2008 mais qui correspond tout à fait à ce que je cherche :
    une première liste de choix provenant d'une base de donnée, et qui affiche une deuxième liste de correspondance provenant aussi d'une bdd, et qui à son tour donnera un résultat dans un champ.

    Je suis débutant mais passionné, sans études informatiques, j'ai appris tout seul et monte mon petit serveur personnel depuis des années.

    J'ai commencé par un simple mot sur une page internet, que j'ai réussi à mettre en ligne, puis une bdd, des formulaires en php, quelques notions en javascript, ...en fait j'ai lu des scripts, je les ai essayés, et mis bout à bout en modifiant un peu et je m'améliore de plus en plus.

    J'ai toujours réussi à trouver les solutions, même si j'y passe des heures, mais là je bloque vraiment depuis quelques jours alors j'ai osé demander de l'aide pour la première fois, svp.


    Si avec l'aide de jreaux62, Claudine a réussi à faire fonctionner ce programme, pourquoi ne fonctionne-t-il pas chez moi ?

    J'ai bien la page qui s'affiche avec les deux listes déroulantes, j'ai vérifié en inversant les tables de la bdd, les deux listes "lieu" et "salle" s'affichent, mais uniquement dans la première liste, il ne se passe rien dans la seconde liste quand je sélectionne un choix dans la première.

    De plus Claudine dit que çà fonctionne lorsque l'on appuie sur un bouton, alors que moi je ne vois pas de bouton.

    Si quelqu'un peut me venir en aide svp, je vous mets une copie de mon fichier essai3.php (j'ai juste mis secret la partie "Connection à la db").


    Cordialement,
    Stéphane.



    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
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
     
    <!DOCTYPE HTML>
    <html xmlns="http://www.w3.org/1999/xhtml" dir="ltr">
     
    <head>
    	<title>Document sans titre</title>
    	<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
     
     
     
     
    <?php
    // connection à la DB
    $link = mysql_connect("******", "******", "******") or die ('Erreur : '.mysql_error() );
    mysql_select_db("******") or die ('Erreur :'.mysql_error());
    ?>
     
     
     
     
    <script type="text/javascript">
    	function modifcombo(){
    		var idlieu = document.form1.selectlieu.value;
    		document.location.replace("essai3.php?lieu=" + idlieu );
    	}
    </script>
     
     
    </head>
     
     
     
     
    <body>
     
     
    <?php
    // initialisation/recuperation de la selection
    // lieu
    if (isset($_GET['lieu'])){
    	$lieu = $_GET['lieu'];
    } elseif (isset($_POST['selectlieu'])){
    	$lieu = $_POST['selectlieu'];
    } else {
    	$lieu = '';
    }
    // salle
    if (isset($_POST['selectsalle'])){
    	$salle = $_POST['selectsalle'];
    } else {
    	$salle = '';
    }
    ?>
     
     
     
     
     
    	<p>Essai formulaire</p>
     
    	<form name="form1" method="post" action="">
    	<table width="100%" border="1">
    	<tr>
    	    <td>lieu :</td>
    		<td>
    			<select id="idselectlieu" name="selectlieu" class="txt16-000000" onChange="javascript: modifcombo();">
    				<option value="">...</option><!-- Valeur vide pour forcer l'utilisateur a selectionner  -->
    <?php			// Execution requete : tous les LIEUX
    				$ma_req = "SELECT * FROM salle;";					  
    				$res_req = mysql_query($ma_req) or die("Selection table \"lieu\" impossible");
     
    				// Affectation des variables utilisees pour l'affichage
    				if (mysql_num_rows($res_req)!=0) { // resultat non vide
    					while ($une_ligne = mysql_fetch_array($res_req)) {
    						$id_lieu = $une_ligne["id_salle"];
    						$nom_lieu = $une_ligne["nom_salle"];
    						$sel_lieu = ($id_lieu == $lieu)? ' selected="selected"' : ''; // option selectionnee ? oui : non
    ?>
    				<option value="<?php echo $id_lieu; ?>"<?php echo $sel_lieu; ?>><?php echo $nom_lieu; ?></option>
    <?php				} // fin while
    				} // fin if
    ?> 
    			</select>
    		</td>
    	</tr>
    	<tr>
    		<td>salle :</td>   
            <td>
    			<select id="idselectsalle" name="selectsalle" class="txt16-000000">		
    				<option value="">...</option><!-- Valeur vide pour forcer l'utilisateur a selectionner  -->
    <?php	  		// Execution requete : les SALLES de ce lieu (selectionné)
    				$ma_req = "SELECT * FROM salle WHERE id_lieu = '".$lieu."';";
    				$res_req = mysql_query($ma_req) or die("Selection table \"salle\" impossible");
    				// Affectation des variables utilis?es pour l'affichage
    				if (mysql_num_rows($res_req)!=0) // resultat non vide
    				{  
    					while ($une_ligne = mysql_fetch_array($res_req)) {
    						$id_salle = $une_ligne["id_salle"];
    						$nom_salle = $une_ligne["nom_salle"];
    						$sel_salle = ($id_salle == $salle)? ' selected="selected"' : ''; // option selectionnee ? oui : non
    ?>
    				<option value="<?php echo $id_salle; ?>"<?php echo $sel_salle; ?>><?php echo $nom_salle; ?></option>	
    <?php				} // fin while
    				} // fin if
    ?> 
    			</select>
    		</td>
    	</tr>
     
    	<tr>
        <td colspan="2"><input type="submit" name="envoiformulaire" value="envoyer" /></td>
    	</tr>
     
    	</table>
    	</form>
     
    </body>
    </html>

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Tes deux requêtes lisent la table "salle". D'après les commentaires de ton code, et ça serait logique, c'est la table lieu qui devrait être lue pour la première requête.

    Évite au passage les noms vagues : tes salles sont dans un site, un batiment, une zone, un secteur ... mais un lieu ça n'évoque pas grand chose. Une salle est un lieu par exemple.

    Également attention à la sécurité : ne met pas des données externes directement dans une requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ma_req = 'SELECT * FROM salle WHERE id_lieu =' . intval($lieu);
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre à l'essai
    Homme Profil pro
    Non communiqué
    Inscrit en
    Janvier 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Non communiqué

    Informations forums :
    Inscription : Janvier 2017
    Messages : 5
    Par défaut Listes liées
    Bonjour Sabotage, et vraiment un grand merci à toi de bien vouloir m'aider.
    Je ne m'attendais pas à avoir une réponse aussi rapidement, je surveillerai beaucoup plus mes mails du coup.
    Cela fait des années que je regarde le site "Developpez" et j'aurai du m'inscrire depuis longtemps.

    Alors pour commencer, je n'ai pas envoyé le bon code, j'avais la même table dans les deux requêtes pour vérifier s'il était bien capable de récupérer dans la BDD les données de la deuxième table, et j'ai oublié de remettre le code à l'initial avant de l'envoyer, ...oups, désolé.

    Sinon, j'ai suivi tes conseils pour "les noms vagues", on a maintenant une liste de Pays qui nous donnera une liste de Villes. C'est en effet plus lisible et facilite la compréhension.
    En fait, j'avais tout simplement repris le code fait en 2008 à l'identique sans rien changer, ce n'est pas moi qui l'avait écrit.

    Au passage, j'ai mis : include("connection.php"); pour qu'il aille chercher les infos de connection dans un autre fichier, j'ai l'habitude de faire comme cela, je ne sais pas si j'ai raison.

    Par contre, je vois pas comment faire pour "la sécurité" , $ma_req = 'SELECT * FROM bdd_villes WHERE id_pays =' . intval($pays); j'ai d'autres codes fait avec ce "SELECT * FROM" , mais je veux bien un conseil au passage s'il y a une autre méthode.
    La seule idée que j'ai est " SELECT * FROM $base_villes " ...et mettre la correspondance " $base_villes = 'bdd_villes' "dans mon fichier externe " include("connection.php"); " .


    En tout cas, j'ai toujours pas trouvé pourquoi j'ai l'affichage de la première liste Pays, mais pas la seconde avec les Villes.
    Quand je clique pas exemple sur le deuxième pays de la liste déroulante, j'ai juste la page qui charge .../essai3.php?pays=2


    C'est la première fois que je reste bloqué aussi longtemps devant un code.

    Cordialement,
    Stéphane.

    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
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
     
    <!DOCTYPE HTML>
    <html xmlns="http://www.w3.org/1999/xhtml" dir="ltr">
     
    <head>
    	<title>Document sans titre</title>
    	<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
     
    	<link href="css/Style.css" rel="stylesheet" type="text/css" />
     
    	<?php // connection à la DB
    	include("connection.php"); ?>
     
     
     
     
    <script type="text/javascript">
    	function modifcombo(){
    		var idpays = document.form1.selectpays.value;
    		document.location.replace("essai3.php?pays=" + idpays );
    	}
    </script>
     
     
    </head>
     
     
     
     
    <body>
     
     
    <?php
    // initialisation/recuperation de la selection pays
    if (isset($_GET['pays'])){
    	$pays = $_GET['pays'];
    } elseif (isset($_POST['selectpays'])){
    	$pays = $_POST['selectpays'];
    } else {
    	$pays = '';
    }
    // villes
    if (isset($_POST['selectvilles'])){
    	$villes = $_POST['selectvilles'];
    } else {
    	$villes = '';
    }
    ?>
     
     
     
     
     
    	<p>Essai formulaire</p>
     
    	<form name="form1" method="post" action="">
    	<table width="100%" border="1">
    	<tr>
    	    <td>pays :</td>
    		<td>
    			<select id="idselectpays" name="selectpays" class="txt16-000000" onChange="javascript: modifcombo();">
    				<option value="">...</option><!-- Valeur vide pour forcer l'utilisateur a selectionner  -->
    <?php			// Execution requete : tous les pays
    				$ma_req = "SELECT * FROM bdd_pays;";					  
    				$res_req = mysql_query($ma_req) or die("Selection table \"pays\" impossible");
     
    				// Affectation des variables utilisees pour l'affichage
    				if (mysql_num_rows($res_req)!=0) { // resultat non vide
    					while ($une_ligne = mysql_fetch_array($res_req)) {
    						$id_pays = $une_ligne["id_pays"];
    						$nom_pays = $une_ligne["nom_pays"];
    						$sel_pays = ($id_pays == $pays)? ' selected="selected"' : ''; // option selectionnee ? oui : non
    ?>
    				<option value="<?php echo $id_pays; ?>"<?php echo $sel_pays; ?>><?php echo $nom_pays; ?></option>
    <?php				} // fin while
    				} // fin if
    ?> 
    			</select>
    		</td>
    	</tr>
    	<tr>
    		<td>villes :</td>   
            <td>
    			<select id="idselectvilles" name="selectvilles" class="txt16-000000">		
    				<option value="">...</option><!-- Valeur vide pour forcer l'utilisateur a selectionner  -->
    <?php	  		// Execution requete : les villes de ce pays (selectionné)
    				$ma_req = "SELECT * FROM bdd_villes WHERE id_pays = '".$pays."';";
    				$res_req = mysql_query($ma_req) or die("Selection table \"villes\" impossible");
    				// Affectation des variables utilis?es pour l'affichage
    				if (mysql_num_rows($res_req)!=0) // resultat non vide
    				{  
    					while ($une_ligne = mysql_fetch_array($res_req)) {
    						$id_villes = $une_ligne["id_villes"];
    						$nom_villes = $une_ligne["nom_villes"];
    						$sel_villes = ($id_villes == $villes)? ' selected="selected"' : ''; // option selectionnee ? oui : non
    ?>
    				<option value="<?php echo $id_villes; ?>"<?php echo $sel_villes; ?>><?php echo $nom_villes; ?></option>	
    <?php				} // fin while
    				} // fin if
    ?> 
    			</select>
    		</td>
    	</tr>
     
    	<tr>
        <td colspan="2"><input type="submit" name="envoiformulaire" value="envoyer" /></td>
    	</tr>
     
    	</table>
    	</form>
     
    </body>
    </html>

  4. #4
    Membre à l'essai
    Homme Profil pro
    Non communiqué
    Inscrit en
    Janvier 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Non communiqué

    Informations forums :
    Inscription : Janvier 2017
    Messages : 5
    Par défaut Listes liées
    Eh oui, 4h du matin et je cherche toujours, çà me tracasse de ne pas trouver.

    Alors, par élimination, je pense que le soucis concerne le chargement de la deuxième liste Villes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ma_req = "SELECT * FROM bdd_villes WHERE id_pays = '".$pays."';";
    Le WHERE devrait associer les deux listes par les ID des deux tables,
    hors là je vois deux tables identiques : id_pays = '".$pays."

    Je suis très débutant, mais je pense le code suivant serait mieux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ma_req = "SELECT * FROM bdd_villes WHERE id_villes = '".$pays."';";
    En tout cas, maintenant, la deuxième liste se charge correctement, et chaque Pays envoi bien les bonnes Villes.

    ...çà avance !


    Du coup j'ai commencé à ajouter un champ supplémentaire population_villes et que la Ville sélectionnée renvoie dans le champ la population correspondante enregistrée dans la bdd_villes. J'ai pensé ajouter un deuxième function modifcombo() , mais je bloque maintenant sur le script du modifcombo.

    Je veux bien un peu d'aide svp.

    Je mets le dernier code ci-dessous.

    Cordialement,
    Stéphane.

    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
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    <!DOCTYPE HTML>
    <html xmlns="http://www.w3.org/1999/xhtml" dir="ltr">
     
    <head>
    	<title>Document sans titre</title>
    	<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
     
    	<link href="css/Style.css" rel="stylesheet" type="text/css" />
     
    	<?php // connection à la DB
    	include("connection.php"); ?>
     
     
     
     
    <script type="text/javascript">
    	function modifcombo(){
    		var idpays = document.form1.selectpays.value;
    		document.location.replace("essai3.php?pays=" + idpays );
    	}
     
    	function modifcombo1(){
    		var idvilles = document.form1.selectvilles.value;
    		document.location.replace("essai3.php?villes=" + idvilles );
    	}
     
    </script>
     
     
    </head>
     
     
     
     
    <body>
     
     
    <?php
    // initialisation/recuperation de la selection pays
    if (isset($_GET['pays'])){
    	$pays = $_GET['pays'];
    } elseif (isset($_POST['selectpays'])){
    	$pays = $_POST['selectpays'];
    } else {
    	$pays = '';
    }
    // villes
    if (isset($_POST['selectvilles'])){
    	$villes = $_POST['selectvilles'];
    } else {
    	$villes = '';
    }
     
    // Champ_essai_ville
    if (isset($_POST['selectpopulation_villes'])){
    	$population_villes = $_POST['selectpopulation_villes'];
    } else {
    	$population_villes = '';
    }
     
    ?>
     
     
     
     
     
    	<p>Essai formulaire</p>
     
    	<form name="form1" method="post" action="">
    	<table width="100%" border="1">
    	<tr>
    	    <td>pays :</td>
    		<td>
    			<select id="idselectpays" name="selectpays" class="txt16-000000" onChange="javascript: modifcombo();">
    				<option value="">...</option><!-- Valeur vide pour forcer l'utilisateur a selectionner  -->
    <?php			// Execution requete : tous les pays
    				$ma_req = "SELECT * FROM bdd_pays;";					  
    				$res_req = mysql_query($ma_req) or die("Selection table \"pays\" impossible");
     
    				// Affectation des variables utilisees pour l'affichage
    				if (mysql_num_rows($res_req)!=0) { // resultat non vide
    					while ($une_ligne = mysql_fetch_array($res_req)) {
    						$id_pays = $une_ligne["id_pays"];
    						$nom_pays = $une_ligne["nom_pays"];
    						$sel_pays = ($id_pays == $pays)? ' selected="selected"' : ''; // option selectionnee ? oui : non
    ?>
    				<option value="<?php echo $id_pays; ?>"<?php echo $sel_pays; ?>><?php echo $nom_pays; ?></option>
    <?php				} // fin while
    				} // fin if
    ?> 
    			</select>
    		</td>
    	</tr>
    	<tr>
    		<td>villes :</td>   
            <td>
    			<select id="idselectvilles" name="selectvilles" class="txt16-000000" onChange="javascript: modifcombo1();">		
    				<option value="">...</option><!-- Valeur vide pour forcer l'utilisateur a selectionner  -->
    <?php	  		// Execution requete : les villes de ce pays (selectionné)
    				$ma_req = "SELECT * FROM bdd_villes WHERE id_villes = '".$pays."';";
    				$res_req = mysql_query($ma_req) or die("Selection table \"villes\" impossible");
    				// Affectation des variables utilis?es pour l'affichage
    				if (mysql_num_rows($res_req)!=0) // resultat non vide
    				{  
    					while ($une_ligne = mysql_fetch_array($res_req)) {
    						$id_villes = $une_ligne["id_villes"];
    						$nom_villes = $une_ligne["nom_villes"];
    						$population_villes = $une_ligne["population_villes"];
    						$sel_villes = ($id_villes == $villes)? ' selected="selected"' : ''; // option selectionnee ? oui : non
    ?>
    				<option value="<?php echo $id_villes; ?>"<?php echo $sel_villes; ?>><?php echo $nom_villes; ?></option>	
    <?php				} // fin while
    				} // fin if
    ?> 
    			</select>
    		</td>
    	</tr>
     
    	<tr>
    	<td><input type="text" size="20" name="selectpopulation_villes" value="<?php echo $population_villes; ?>" /></td>
     
        <td colspan="2"><input type="submit" name="envoiformulaire" value="envoyer" /></td>
    	</tr>
     
    	</table>
    	</form>
     
    </body>
    </html>

  5. #5
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Pour la sécurité, dans le code que je t'ai indiqué, elle est réalisé grace à la fonction intval() qui va forcer la valeur en entier.
    Le danger est qu'un utilisateur saisisse n'importe quoi comme valeur : si tu ne fais aucun contrôle et place directement la valeur dans ta requête, il peut modifier la requête à sa guise.
    Ce sujet s'appelle les injections SQL si tu veux en apprendre plus.

    Pour le sujet du "*" dans les requêtes c'est encore un autre thême

    Concernant tes listes, tu devrais bien avoir SELECT * FROM bdd_villes WHERE id_pays = $paysC'est à dire toutes les villes qui ont une certaine valeur comme pays.

    Si ça ne fonctionne pas, c'est peut être que tes données en base sont mal construites.
    La colonne "id_pays" dans ta table villes doit contenir l'id d'un pays de la table pays.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Citation Envoyé par Steff14 Voir le message
    ...Je reprends un sujet qui n'a pas bougé depuis 2008
    En fait, tu as confondu avec la date d'inscription de Claudine (Inscrit en février 2008) !

    Il faudrait nous donner le lien vers la discussion dont tu parles.
    Car d'après le code que tu montres, tu es loin des dernières "avancées" en la matière !
    Beaucoup d'eau a coulé sous le pont depuis...

    Voici une discussion plus "récente" (2015).

    Même Claudine était passée :


    -> ce que je t'invite à faire aussi, avant de continuer à utiliser du code... obsolète !

    Ensuite, tu peux t'intéresser de près à :



    Voici aussi quelques tutos/discussions sur le sujet :
    Dernière modification par Invité ; 04/01/2017 à 09h48.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Non communiqué
    Inscrit en
    Janvier 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Non communiqué

    Informations forums :
    Inscription : Janvier 2017
    Messages : 5
    Par défaut Listes liées
    Bonjour, et merci pour vos réponses à tous les deux.
    J'ai un peu tardé à répondre à mon tour, parce que j'ai bien pris le temps de consulter et étudier tout ce que vous m'avez proposé.

    Pour la sécurité, dans le code que je t'ai indiqué, elle est réalisé grace à la fonction intval() qui va forcer la valeur en entier.
    Le danger est qu'un utilisateur saisisse n'importe quoi comme valeur : si tu ne fais aucun contrôle et place directement la valeur dans ta requête, il peut modifier la requête à sa guise.
    Ce sujet s'appelle les injections SQL si tu veux en apprendre plus.

    Pour le sujet du "*" dans les requêtes c'est encore un autre thême
    ...çà j'ai bien noté cette fois, il faut que je prenne en effet le temps d'étudier ce sujet.

    Concernant tes listes, tu devrais bien avoir SELECT * FROM bdd_villes WHERE id_pays = $paysC'est à dire toutes les villes qui ont une certaine valeur comme pays.
    Cette partie m'a accroché longtemps,
    et si tu insistes et que ce SELECT est bon, alors je dois faire confiance à mes "Maîtres".
    J'ai alors cherché et en effet le code est bon comme cela.
    C'est bien la table Villes qui avait un soucis.
    J'avais mis : id / id_villes / nom_villes ...alors qu'il faut : id_villes / id_pays / nom_villes .
    Et maintenant la première liste de Pays donne bien une seconde liste de Villes correspondantes.

    Me reste plus qu'à ajouter un champ supplémentaire population_villes et que la Ville sélectionnée renvoie dans le champ la population correspondante enregistrée dans la bdd_villes.


    Mais avant, je me penche sur ce qu'à écrit jreaux62 :
    code... obsolète !
    Ajax (pour agir SANS rechargement de page).
    C'est vrai que je devrai passer à l'Ajax maintenant plutôt que de refaire plus tard.

    J'ai alors regardé :
    Web 2.0, allez plus loin avec AJAX et XMLHttpRequest (->fais l'exercice proposé !)
    J'ai fais l'exercice. Je ne peux me tromper puisque j'ai importé la BDD proposée CREATE TABLE avec le même nom de BDD mysql_select_db("test");
    ...et j'ai bien copié à l'identique les codes dans les fichiers auteurs.php et ajaxLivre.php .
    Mais rien ne fonctionne, juste deux listes vides à l'affichage.
    Dommage qu'il ne fonctionne pas, cela m'aurait aidé à débuter en Ajax et faire des essais pour mieux comprendre.
    Si quelqu'un peut vérifier si ce code et la BDD sont correct, ...ou si c'est mon matériel qui n’accepte pas ce code.

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

    1/ Dans le code, ou trouve :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	mysql_connect("localhost","root","root");
    	mysql_select_db("test");
    as-tu remplacé par tes propres paramètres de connexion ?

    2/ Il faut aussi remplacer les <? par <?php partout.

    auteurs.php
    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
    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
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    <?php
    header('Content-type:text/html; charset=UTF-8');	// encodage UTF-8
    error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED); 	// en TEST !! (+ désactive l erreur "mysql deprecié")
    //ini_set("display_errors",0);error_reporting(0);	// DESACTIVATION des messages d'erreur (en PRODUCTION)
    // -----------------------------------------------
    	require (__DIR__.'/connexion_mysql.php'); 
    // -----------------------------------------------
    ?>
    <html>
    	<head>
    		<title>Tutoriel Ajax (XHTML + JavaScript + XML)</title>
    		<script type='text/javascript'>
    			function getXhr(){
                                    var xhr = null; 
    				if(window.XMLHttpRequest) // Firefox et autres
    				   xhr = new XMLHttpRequest(); 
    				else if(window.ActiveXObject){ // Internet Explorer 
    				   try {
    			                xhr = new ActiveXObject("Msxml2.XMLHTTP");
    			            } catch (e) {
    			                xhr = new ActiveXObject("Microsoft.XMLHTTP");
    			            }
    				}
    				else { // XMLHttpRequest non supporté par le navigateur 
    				   alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
    				   xhr = false; 
    				} 
                                    return xhr;
    			}
     
    			/**
    			* Méthode qui sera appelée sur le click du bouton
    			*/
    			function go(){
    				var xhr = getXhr();
    				// On défini ce qu'on va faire quand on aura la réponse
    				xhr.onreadystatechange = function(){
    					// On ne fait quelque chose que si on a tout reçu et que le serveur est ok
    					if(xhr.readyState == 4 && xhr.status == 200){
    						leselect = xhr.responseText;
    						// On se sert de innerHTML pour rajouter les options a la liste
    						document.getElementById('livre').innerHTML = leselect;
    					}
    				}
     
    				// Ici on va voir comment faire du post
    				xhr.open("POST","ajaxLivre.php",true);
    				// ne pas oublier ça pour le post
    				xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    				// ne pas oublier de poster les arguments
    				// ici, l'id de l'auteur
    				sel = document.getElementById('auteur');
    				idauteur = sel.options[sel.selectedIndex].value;
    				xhr.send("idAuteur="+idauteur);
    			}
    		</script>
    	</head>
    	<body>
    		<form>
    			<fieldset style="width: 500px">
    				<legend>Liste liées</legend>
    				<label>Auteurs</label>
    				<select name='auteur' id='auteur' onchange='go()'>
    					<option value='-1'>Aucun</option>
    					<?php
    						$res = mysql_query("SELECT * FROM auteur ORDER BY nom");
    						while($row = mysql_fetch_assoc($res)){
    							echo "<option value='".$row["id"]."'>".$row["nom"]."</option>";
    						}
    					?>
    				</select>
    				<label>Livres</label>
    				<div id='livre' style='display:inline'>
    				<select name='livre'>
    					<option value='-1'>Choisir un auteur</option>
    				</select>
    				</div>
    			</fieldset>
    		</form>
    	</body>
    </html>
    ajaxLivre.php (modifié) :
    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
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    <?php
    header('Content-type:text/html; charset=UTF-8');	// encodage UTF-8
    error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED); 	// en TEST !! (+ désactive l erreur "mysql deprecié")
    // -----------------------------------------------
    	require (__DIR__.'/connexion_mysql.php'); 
    // -----------------------------------------------
    ?>
    	<select name="livre">
    <?php
    	if(isset($_POST["idAuteur"])){
    		if( $_POST["idAuteur"] == -1 ) // valeur par défaut (aucun)
    		{
    ?>
    		<option value="-1">Choisir un auteur</option>
    <?php	} else { // recherche en BdD
    			$res = mysql_query("SELECT id,titre FROM livre 
    					WHERE idAuteur=".intval($_POST["idAuteur"])." ORDER BY titre");
    			while($row = mysql_fetch_assoc($res)){
    ?>
    		<option value="<?php echo $row["id"]; ?>"><?php echo htmlspecialchars($row["titre"]); ?></option>
    <?php		}
    		}
    	}
    ?>
    	</select>
    Dernière modification par Invité ; 05/01/2017 à 08h14.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Non communiqué
    Inscrit en
    Janvier 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Non communiqué

    Informations forums :
    Inscription : Janvier 2017
    Messages : 5
    Par défaut Listes liées
    Web 2.0, allez plus loin avec AJAX et XMLHttpRequest (->fais l'exercice proposé !)
    Super, çà fonctionne !

    Un Super Énorme Gigantesque MERCI !


    J'avais bien modifié les paramètres de connexion.
    C'était juste en effet un <? à replacer en <?php

    Me reste plus qu'à ajouter ce qui doit être renvoyé à la BDD en fonction du choix de la seconde liste livres.
    Par exemple :
    Auteur retourne un choix de livres.
    Le livre choisi retourne l'année d'édition.
    Et le bouton envoie Livre choisi et Année vers une autre base.

    Si j'arrivais à faire ce code, alors cela répondrait entièrement à ce que je cherche à faire depuis une semaine.

    Je veux bien quelques conseils.

Discussions similaires

  1. Pb listes liées javascript/php
    Par boo64 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 06/06/2006, 12h35
  2. Deux listes lies et un lien
    Par arti2004 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 07/03/2006, 16h44
  3. [MySQL] 1 table et 2 listes liées
    Par Ekik dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 07/02/2006, 16h47
  4. XMLHTTPRequest et listes liées
    Par ben23 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 31/12/2005, 16h32
  5. Problème avec listes liées entre elles et bouton "précé
    Par Oluha dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 02/08/2005, 15h10

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