Page 1 sur 1

Aide code PHP

Posté : 25 avr. 2013, 10:28
par butheau
Bonjour, cela fait plusieurs jours que je n'arrives pas à résoudre un problème en PHP/Mysql

Mon but : réaliser une liste liée, c'est à dire une liste qui propose des choix et ces choix vous proposent de nouveaux choix dans la deuxième liste en fonction de ce qui a été définit.
J'ai besoin de deux éléments,
1) SQL

- Deux créations de tables pour Association ET TypeAssociation
- Un code de base de données de remplissage des associations :
insert into `association` values 
(1,'Aerobic',2),
(2,'Arts Martiaux et sports de combat',2),
(3,'Athlétisme',2),
(4,'Ball Trap',2),
(5,'Course - Marche',2),
(22,'Yoga',2),
(23,'Agriculture',1),
(24,'Anciens combattants',1),
(25,'Associations d\'animation',1),
(44,'Social',1),
(45,'Théâtre',1),
(112,'CENTRE CULTUREL ET SOCIAL DE BOUCAU ET TARNOS',3),
(113,'Centre d\'Aide par le Travail (Éspérance et Emmaüs)',3),
(114,'CERCLE DES AMIS DE L\'ART DE BOUCAU ET DE TARNOS',3),
(115,'Chasse ACCA',3),
(116,'CHOEUR ERMEND BONNAL',3),
**Liste non exhaustive**

Un code de remplissage des type d'association : il y en a 3.

2) PHP

Un code PHP qui permet de créer ces listes dont voici le code :
<?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    = "bdfinale";

/* On récupère si elle existe la valeur de la région envoyée par le formulaire */

$idr = isset($_POST['typeassociation'])?$_POST['typeassociation']: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>Choisissez le type d'une association</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%">

<?php

if(isset($_POST['ok']) && isset($_POST['association']) && $_POST['association'] != "")

{

    $typeassociation_selectionnee = $_POST['typeassociation'];

    $association_selectionne = $_POST['association'];

?>

<p>Vous avez sélectionné l'association <?php echo($association_selectionne); ?> de type <?php echo($typeassociation_selectionnee); ?></p>

<?php

}

?>

<h3>Trouver une association</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`, `type`".

    " FROM `typeassociation`".

    " ORDER BY `id`";

    $rech_typeassociation = mysql_query($sql1);

    $code_typeassociation = array();

    $typeassociation = array();

    /* On active un compteur pour les type d'associations */

    $nb_typeassociation = 0;

    if($rech_typeassociation != false)

    {

        while($ligne = mysql_fetch_assoc($rech_typeassociation))

        {

            array_push($code_typeassociation, $ligne['id']);

            array_push($typeassociation, $ligne['type']);



            /* On incrémente le compteur */

            $nb_typeassociation++;

        }

    }

    ?>

<form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post" id="chgassociation">

<fieldset style="border: 3px double #333399">

<legend>Sélectionnez une type d'Association</legend>

<select name="typeassociation" id="typeassociation" onchange="document.forms['chgassociation'].submit();">

  <option value="-1">- - - Aucun - - -</option>

    <?php

    for($i = 0; $i < $nb_typeassociation; $i++)

    {

?>

  <option value="<?php echo($code_typeassociation[$i]); ?>"<?php echo((isset($idr) && $idr == $code_typeassociation[$i])?" selected=\"selected\"":null); ?>><?php echo($typeassociation[$i]); ?></option>

<?php

    }

    ?>

</select>

    <?php

    mysql_free_result($rech_typeassociation);

    /* 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 associations de cette région */

        $sql2 = "SELECT `id`, `nom`".

        " FROM `association`".

        " WHERE `id` = ". $idr ."".

        " ORDER BY `id`;";

        if($connexion != false)

        {

            $rech_association = mysql_query($sql2, $connexion);

            /* Un petit compteur pour les associations */

            $nb_association = 0;

            /* On crée deux tableaux pour les numéros et les noms des associations */

            $code_association = array();

            $nom_association = array();

            /* On va mettre les numéros et noms des associations dans les deux tableaux */

            while($ligne_association = mysql_fetch_assoc($rech_association))

            {

                array_push($code_association, $ligne_association['id']);

                array_push($nom_association, $ligne_association['nom']);

                $nb_association++;

            }

            /* Maintenant on peut construire la liste déroulante */

            ?>

<select name="association" id="association">

            <?php  

            for($d = 0; $d<$nb_association; $d++)

            {

                ?>

  <option value="<?php echo($code_association[$d]); ?>"<?php echo((isset($association_selectionne) && $association_selectionne == $code_association[$d])?" selected=\"selected\"":null); ?>><?php echo($nom_association[$d]." (". $code_association[$d] .")"); ?></option>

                <?php

            }

?>

</select>

<?php

        }

        /* Un petit coup de balai */

        mysql_free_result($rech_association);

    }

?>

<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

}

?>

</body>

</html>
Problème : seul le premier élément de l'insertion de l'association apparait dans les listes :
Exemple :

Type Association : Sportive ==> Aerobic

C'est l'unique choix et pas d'autre... De même pour culture et liste association... Il n'y a que le premier de chaque table alors qu'il devrait tout y avoir justement...

Une idée?
Merci à vous..

Re: Aide code PHP

Posté : 25 avr. 2013, 12:15
par Megadeth
Salut,

L'erreur vient du fait que tu t'appuies sur la mauvaise colonne.

/* Cération de la requête pour avoir les associations de cette région */

$sql2 = "SELECT `id`, `nom`".

" FROM `association`".

" WHERE `id` = ". $idr ."".

" ORDER BY `id`;";

c'est " WHERE `idr` = ". $idr ."".

car ton id est unique d'où l'affichage unique et toi tu veux la 3ème colonne, celle qui fait le lien entre tes 2 tables.

De mon côté j'ai fait une table association sous la forme id / nom / idr <- c'est ce nom de colonne que tu dois appeler dans le where.

Après je pense que tu peux sensiblement simplifier ce code.

++

Mega
;)