liste associée à un champs texte

Petit nouveau ! | 9 Messages

19 mai 2011, 15:04

Bonjour à tous.
Je suis complétement novice en programmation quelle qu'elle soit... dsl :)
Mais j'ai un travail à effectuer et j'aurai grand besoin de votre aide.

J'ai une base de données qui fonctionne bien. J'aimerai créer une liste déroulante associée à 5 champs texte. (lorsqu’un choix est effectué dans la liste, les 5 champs textes prennent les valeur qui sont définies dans la base de données)

J'ai téléchargé le script des listes déroulantes associées qui se trouve sur ce site, j'ai essayé tant bien que mal de le modifier, mais je n'ai réussi a rien du tout...
quelqu'un aurait une petite idée ????
<?php
echo("<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n");
/* Variables de connexion : ajustez ces paramètres selon votre propre environnement */
$serveur = "localhost";
$admin   = "root";
$mdp     = "";
$base    = "regions";
/* On récupère si elle existe la valeur de la région envoyée par le formulaire */
$idr = isset($_POST['region'])?$_POST['region']:null;
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" xml:lang="fr" />
<title>Sélectionner un département selon la région choisie</title>
<meta name="description" content="Listes déroulantes dynamiques inter-dépendantes" />
<meta name="keywords" content="" />
<meta name="author" content="Cyrano" />
<meta name="generator" content="Zend Studio Environnement et WebExpert 5" />
<meta http-equiv="imagetoolbar" content="no" />
<meta http-equiv="Pragma" content="no-cache" />
</head>
<body style="font-family: verdana, helvetica, sans-serif; font-size: 85%">
<h3>Version 100% PHP</h3>
<p>Vous constaterez qu'il y a un délai de latence entre la sélection et la mise à jour.</p>
<?php
if(isset($_POST['ok']) && isset($_POST['departement']) && $_POST['departement'] != "")
{
    $region_selectionnee = $_POST['region'];
    $dept_selectionne = $_POST['departement'];
?>
<p>Vous avez sélectionné le département <?php echo($dept_selectionne); ?> dans la région <?php echo($region_selectionnee); ?></p>
<?php
}
?>
<h3>Trouver un département</h3>
<?php
/* On établit la connexion à MySQL avec mysql_pconnect() plutôt qu'avec mysql_connect()
*  car on aura besoin de la connexion un peu plus loin dans le script */
$connexion = mysql_pconnect($serveur, $admin, $mdp);
if($connexion != false)
{
    $choixbase = mysql_select_db($base, $connexion);
    $sql1 = "SELECT `id_region`, `region`".
    " FROM `region`".
    " ORDER BY `id_region`";
    $rech_regions = mysql_query($sql1);
    $code_region = array();
    $region = array();
    /* On active un compteur pour les régions */
    $nb_regions = 0;
    if($rech_regions != false)
    {
        while($ligne = mysql_fetch_assoc($rech_regions))
        {
            array_push($code_region, $ligne['id_region']);
            array_push($region, $ligne['region']);
            /* On incrémente de compteur */
            $nb_regions++;
        }
    }
    ?>
<form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post" id="chgdept">
<fieldset style="border: 3px double #333399">
<legend>Sélectionnez une région</legend>
<select name="region" id="region" onchange="document.forms['chgdept'].submit();">
  <option value="-1">- - - Choisissez une région - - -</option>
    <?php
    for($i = 0; $i < $nb_regions; $i++)
    {
?>
  <option value="<?php echo($code_region[$i]); ?>"<?php echo((isset($idr) && $idr == $code_region[$i])?" selected=\"selected\"":null); ?>><?php echo($region[$i]); ?></option>
<?php
    }
    ?>
</select>
    <?php
    mysql_free_result($rech_regions);
    /* On commence par vérifier si on a envoyé un numéro de région et le cas échéant s'il est différent de -1 */
    if(isset($idr) && $idr != -1)
    {
        /* Cération de la requête pour avoir les départements de cette région */
        $sql2 = "SELECT `id_departement`, `departement`".
        " FROM `departement`".
        " WHERE `id_region` = ". $idr ."".
        " ORDER BY `id_departement`;";
        if($connexion != false)
        {
            $rech_dept = mysql_query($sql2, $connexion);
            /* Un petit compteur pour les départements */
            $nd = 0;
            /* On crée deux tableaux pour les numéros et les noms des départements */
            $code_dept = array();
            $nom_dept = array();
            /* On va mettre les numéros et noms des départements dans les deux tableaux */
            while($ligne_dept = mysql_fetch_assoc($rech_dept))
            {
                array_push($code_dept, $ligne_dept['id_departement']);
                array_push($nom_dept, $ligne_dept['departement']);
                $nd++;
            }
            /* Maintenant on peut construire la liste déroulante */
            ?>
<select name="departement" id="departement">
            <?php  
            for($d = 0; $d<$nd; $d++)
            {
                ?>
  <option value="<?php echo($code_dept[$d]); ?>"<?php echo((isset($dept_selectionne) && $dept_selectionne == $code_dept[$d])?" selected=\"selected\"":null); ?>><?php echo($nom_dept[$d]." (". $code_dept[$d] .")"); ?></option>
                <?php
            }
?>
</select>
<?php
        }
        /* Un petit coup de balai */
        mysql_free_result($rech_dept);
    }
?>
<br /><input type="submit" name="ok" id="ok" value="Envoyer" />
</fieldset>
</form>
<?php
    /* Terminé, on ferme la connexion */
    mysql_close($connexion);
}
else
{
    /* Si on arrive là, c'est pas bon signe, il faut vérifier les 
    * paramètres de connexion, mot de passe, serveur pas démarré etc... */
?>
<p>Un incident s'est produit lors de la connexion à la base de données, veuiillez essayer à nouveau ultérieurement.</p>
<?php
}
?>
<p><a href="./index2.php" title="Aller vers la version JavaScript">Aller vers la version JavaScript</a></p>
</body>
</html>
Merci de votre aide... !!!!!! :mrgreen: :mrgreen:

Mammouth du PHP | 19672 Messages

20 mai 2011, 19:45

Salut,
comme tu fais référence au tuto que j'ai pondu il y a déjà un certain temps sur les listes liées, je serai sans doute le moins mal placé pour te répondre.

Mais dans un premier temps, j'aimerais te faire observer que ta question n'est pas correctement formulée. Ton message en résumé se limite à « J'ai testé et ça marche pas » :
  1. Tu as essayé quoi ? Là effectivement, tu nous montres ton code... mouais, on va y revenir;
  2. Ça ne fonctionne pas.... qu'est-ce qui ne fonctionne pas ? Les champs correspondant ne se remplissent pas ? Le contenu de la liste est incorrect ?
  3. Tu n'indiques pas quelle version tu utilises : je vais y revenir aussi.
  4. Tu n'indiques pas non lus comment tu as tenté de détecter les erreurs ni ce que tu aurais obtenu en le faisant
De la manière dont tu poses la question, il faudrait qu'on lise ton code de façon très détaillée pour y détecter quelle version tu as utilisé (et j'ai trouvé la version 100% PHP, OK) et ensuite qu'est-ce que tu as modifié par rapport au code original. :non:

Ensuite, tu indiques implicitement que tu as omis de lire un élément important du tuto : ce n'est pas un code prêt à l'emploi, il faut tout lire, incluant les commentaires du code et tâcher de comprendre le déroulement des opérations. J'y ai mis pas mal de détails et tous sont importants. Je préfère qu'on vienne me dire « Je ne comprends pas ce que signifie telle ligne ... » que « J'ai utilisé ce code et il ne marche pas » : normal, il n'est pas fait pour ça, il est là pour illustrer une méthodologie de développement.

Je vais donc suggérer la chose suivante : je ne te donnerai pas la réponse, je vais te monter le chemin pour que tu la trouves toi-même, ce sera plus long, mais beaucoup plus efficace en matière d'apprentissage.
Pour ce faire, on va y aller par étapes : d'abord, essaye de m'expliquer comment doit se dérouler la récupération de l'élément choisi jusqu'au remplissage de tes cinq champs, ne fais pas un roman, juste indiquer « Après sélection, je clique sur le bouton, le formulaire est envoyé, le traitement sur le serveur récupère la donnée postée (comment ?) et traitée (pour faire quoi et comment ?), etc... » en bref, détaille chaque exécution. Au passage, ça va t'amener à vérifier que tu n'as pas oublié une étape en cours de route et à bien assimiler le fonctionnement général de ce genre d'opération.

Allez, au boulot 8-)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Petit nouveau ! | 9 Messages

23 mai 2011, 17:15

Bonjour,
alors, j'ai réussi a insérer les données dans des champs textes...
j'ai transformé l'original en ceci

Code : Tout sélectionner

?> <input value="<?php echo($code_dept[$d]); ?>"></input> <?php
Le problème, c'est uniquement lorsque je remplace "département" et "région" par mes noms à moi que ça plante
Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in C:\Program Files\EasyPHP-5.3.6.0\www\aa.php on line 96

Warning: mysql_free_result() expects parameter 1 to be resource, boolean given in C:\Program Files\EasyPHP-5.3.6.0\www\aa.php on line 117

aucuns autres changements n'ont été effectué.
Est ce que cela peut venir de la structure SQL???
Merci

Mammouth du PHP | 19672 Messages

23 mai 2011, 17:36

Peut-être bien que tu ne te poses pas les bonnes questions.

Il faut commencer par comprendre les messages d'erreur : « Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in C:\Program Files\EasyPHP-5.3.6.0\www\aa.php on line 96 » par exemple signifie quoi ? Si on traduit ça en français, ça donne à peu près ceci : « Attention: mysql_fetch_assoc() attend en premier paramètre une ressource (sous-entendu "mysql"), mais a reçu un booléen (true ou false) à la ligne de code C:\Program File\etc\etc... » Et le booléen reçu est très probablement false. Or d'où vient cette ressource ? D'un mysql_query() qui précède. Si le retour est false, c'Est qu'il y a une boulette dans la requête SQL. C'est ça qu'il faut vérifier en premier lieu. Le problème ne vient donc à priori pas de la structure de la base.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Petit nouveau ! | 9 Messages

23 mai 2011, 17:41

merci de répondre....
Mais je comprend pas trop ou je dois chercher la...
j'ai fais de la programmation php il y a 15ans et c'est la 1ere fois que j'y retouche....
donc j'arrive à avoir une certaine logique ou essayer certaines choses, mais mes compétences s’arrêtent la... :)

Mammouth du PHP | 19672 Messages

23 mai 2011, 17:43

As-tu lu attentivement ce que j'ai écrit ? C'est dans ton code que tu dois regarder. Le message d'erreur t'indique dans quel fichier et à quelle ligne. Or tu dois vérifier une requête SQL qui retourne une erreur, donc tu as juste avant la ligne indiquée un mysql_query avec une requête SQL : C'est cette requête qu'il faut inspecter et corriger, la tester directement dans phpMyAdmin par exemple ou dans le client en ligne de commande MySQL, au choix pour avoir le retour de MySQL.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: