requète dans une liste déroulante

Eléphant du PHP | 162 Messages

20 août 2013, 22:41

bonsoir à tous .
je récupère des données dans une liste déroulante . tout se passe bien mais il se trouve que la requête retourne plusieurs fois les mêmes données récupérées ce qui me gène énormément. alors si quelqu'un pouvant m'aider .merci d'avance .
voici la requête :
   <select name="destinataire" id="destinataire" style="size:auto">
			  <option ></option>
               <?php
				$req="SELECT DISTINCT nom_dest  FROM destinateurs ORDER BY nom_dest DESC";
				$res=mysql_query($req) or die("erreur dans la requête $req");
				while ($tab=mysql_fetch_object($res)){
				$nom_cat[]=$tab->nom_dest;
				for ($i=0;$i<count($nom_cat);$i++)
			    echo "<option >$nom_cat[$i]</option>";
                 }
				?>
			 </select>

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

20 août 2013, 22:57

Salut,

Vire le for et la ligne du dessus.

Utilise $tab pour afficher les données dans la liste.

Je te conseil de récupérer aussi la clef primaire de la table que tu passe en "value" des options comme sa tu a une donnée simple et fiable à utiliser (requête optimisée si tu est sur une clef primaire numérique).


@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 162 Messages

20 août 2013, 23:13

merci de bien vouloir me répondre .
voici ce que j'ai fais et je crois que c'est bon sauf si tu as mieux ou des suggestions . merci d'avance
           <select name="destinataire" id="destinataire" style="size:auto">
			  <option ></option>
               <?php
				$req="SELECT id_dest,nom_dest  FROM destinateurs ORDER BY nom_dest DESC";
				$res=mysql_query($req) or die("erreur dans la requête $req");
				while ($tab=mysql_fetch_assoc($res)){
				
			    echo "<option >".$tab[nom_dest]."</option>";
                 }
				?>
			 </select>

Eléphanteau du PHP | 13 Messages

21 août 2013, 08:22

Bonjour,
Cela est à priori bon sauf s'il y a des doublons ou les identifiants ne sont pas unique.
si le problème persite tu fait un GROUP BY id_dest ainsi ta requête devient SELECT id_dest,nom_dest FROM destinateurs ORDER BY nom_dest DESC GROUP BY id_dest

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

21 août 2013, 18:18

@fozeutakoudjou : le group by n'est prévu que pour être utilisé avec une fonction de "groupement" comme count, max, sum etc.
Dans son cas ce n'est pas adapter, au pire si les données sont foireuse, un distinct mais c'est tout.

@msi79 : ton code n'est pas syntaxiquement correct. L'index du tableau est une chaîne de caractère
comme déjà dit, utilise l'id en valeur de l'option pour te simplifier la chose.
<select name="destinataire" id="destinataire" style="size:auto">
    <option></option>
    <?php
    $req = "SELECT id_dest,nom_dest  FROM destinateurs ORDER BY nom_dest DESC";
    $res = mysql_query($req);
    if ($res !== false) {
        while ($tab = mysql_fetch_assoc($res)) {
            echo '<option value="' . $tab['id_des'] . '" >' . $tab['nom_dest'] . '</option>';
        }
        mysql_free_result($res);
    } else {
        echo '<p>Erreur SQL : ' . mysql_error() . '<br />Avec la requette :' . $req . '</p>';
    }
    ?>
</select>
@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 162 Messages

21 août 2013, 18:45

merci @moogli .
j'ai fait comme tu me l'a conseillé mais ça marche toujours pas . le champs text reçois rien.
voici ce que j'ai fat:
<?php
include("connect.php");
?>
<!doctype html>
<html lang="fr">
   <head>
      <meta charset="UTF-8"/>
      <title>Formulaire dynamique</title>
      <script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
      <script src="http://code.jquery.com/jquery-migrate-1.2.1.min.js"></script>
      <script type="text/javascript" src="jquery.js"></script>
   </head>
   <body>
      <form method="post" action="reception.php">
         <p>

            <select name="destinataire" id="destinataire" style="size:auto">
                <option></option>
                <?php
                $req = "SELECT id_dest,nom_dest  FROM destinateurs ";
                $res = mysql_query($req);
                if ($res !== false) {
                    while ($tab = mysql_fetch_assoc($res)) {
                        echo '<option value="' . $tab['id_des'] . '" >' . $tab['nom_dest'] . '</option>';
                    }
                    mysql_free_result($res);
                } else {
                    echo '<p>Erreur SQL : ' . mysql_error() . '<br />Avec la requette :' . $req . '</p>';
                }
                ?>
            </select>
         </p>
         <div id="paragrapheSupplementaire">
            <input type="text" name="fieldsemail" id="fieldsemail" value="" />
         </div>
         <p>
           <input type="submit" value="-- OK --"/>
         </p>
      </form>
<script>
   var dataarray = <?php echo json_encode($dataarray);?>
  function anneeChange(){
     document.getElementById("fieldsemail").value=dataarray[document.getElementById("destinataire").value];
  }
</script>

<a href="test1.php">TEST</a>
<a href="test2.php">TEST2</a>
   </body>
</html>

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

22 août 2013, 00:58

Il est impératif que tu :
[*] active touts les raport d'erreurs E_ALL pour le développement c'est obligatoire
[*] vérifie les scripts que l'on te fournit !

Le premier t'indiqueras l'erreur en l'affichant, le second t'aurais permis de voir le t qu'il manque à id_dest dans l'utilisation du jeux de résultat !

Du coup mon script ne peux fonctionner correctement vu que l'index n'existe pas dans tab.


Dernières choses, quand quelque chose ne va pas, regarde toujours le html généré pour voir s'il est conforme à ce que t attend.
Utilise var_dump / print_r pour afficher le contenu des variables $_ GET et $_POST et voir ce que le navigateur envois ;)

Ou mieux utiliser un déboggeur ;)

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 162 Messages

07 sept. 2013, 22:16

bonjour @moogli merci de me répondre . j’étais malade ce qui explique mon absence ces derniers temps.
j'ai pas encore trouvé la solution a mon problème.
@moogli j'ai corrigé le t qui manquait id_dest. le navigateur n'affiche pas de message d'erreur malgré que j'ai mi :
error_reporting = E_ALL
display_errors = On
display_startup_errors = On

mais le code fonctionne toujours pas .
voici ou j'en suis :
<?php
include("connect.php");
?>
<!doctype html>
<html lang="fr">
   <head>
      <meta charset="UTF-8"/>
      <title>Formulaire dynamique</title>
      <script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
      <script src="http://code.jquery.com/jquery-migrate-1.2.1.min.js"></script>
      <script type="text/javascript" src="jquery.js"></script>
   </head>
   <body>
      <form method="post" action="reception.php">
         <p>

            <select name="destinataire" id="destinataire" style="size:auto">
                <option></option>
                <?php
                $req = "SELECT id_dest,nom_dest  FROM destinateurs ";
                $res = mysql_query($req);
                if ($res !== false) {
                    while ($tab = mysql_fetch_assoc($res)) {
                        echo '<option value="' . $tab['id_dest'] . '" >' . $tab['nom_dest'] . '</option>';
                    }
                    mysql_free_result($res);
                } else {
                    echo '<p>Erreur SQL : ' . mysql_error() . '<br />Avec la requette :' . $req . '</p>';
                }
                ?>
            </select>
         </p>
         <div id="paragrapheSupplementaire">
            <input type="text" name="fieldsemail" id="fieldsemail" value="" />
         </div>
         <p>
           <input type="submit" value="-- OK --"/>
         </p>
      </form>
<script>
   var dataarray = <?php echo json_encode($dataarray);?>
  function anneeChange(){
     document.getElementById("fieldsemail").value=dataarray[document.getElementById("destinataire").value];
  }
</script>

<a href="test1.php">TEST</a>
<a href="test2.php">TEST2</a>
   </body>
</html>
 

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

07 sept. 2013, 22:43

tu as quoi comme résultat lorsque test ta requête (SELECT id_dest,nom_dest FROM destinateurs) dans un clients sql (phpmyadmin, mysql workbench etc etc).



@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 162 Messages

07 sept. 2013, 22:59

on dirai que je me suis mal exprimé .
voici ce que je veux exactement.
j'ai une table destinateurs avec pour champ nom_dest et dest_Mail.
1. je récupère tous les noms dans une liste déroulante
2. a chaque fois que je choisi un nom de la liste déroulante automatiquement l'autre champ (champ texte) se rempli avec le mail de ce destinateurs.
voici l'erreur affichée :
Fatal error: Call to a member function prepare() on a non-object in C:\wamp\www\TUTO LISTE LIEE 2\test1.php on line 3
et voici ou j'en suis maintenant
<?php
include("connect2.php");
$req = $pdo->prepare("SELECT * FROM destinateurs ORDER BY nom_dest DESC");
$req->execute();
$destinataires = array();
while($d = $req->fetch()){
$id = $d['id_dest'];
$destinataire = $d['nom_dest'];
$email = $d['dest_Mail'];
$tab = array("id" => $id,"destinataire" => $destinataire,"email" => $email);
array_push($destinataires,$tab);
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Document sans titre</title>
<script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
<script src="http://code.jquery.com/jquery-migrate-1.2.1.min.js"></script>
<script type="text/javascript">
        $(document).ready(function(){
           $('#annee').change(function(){
              
              var Email = $("option:selected",this).attr('name');
              var Emails = $('#emails').html();
              if(Emails == ""){
                  $('#emails').html(Email);
              }else{
                  $('#emails').html(Emails+"<br>"+Email);
              }       
           });
        });
</script>
</head>

<body>
      <form method="post" action="reception.php">
         <p>
            <select name="annee" id="annee">
            <option value="Choisissez">Choisissez</option>
            <?php
            for($i = 0; $i < count($destinataires); $i++){
            echo '
            <option name="'.$destinataires[$i]["email"].'" value="'.$destinataires[$i]["destinataire"].'">'.$destinataires[$i]["destinataire"].'</option>
            ';
            }
            ?>
            </select>
         </p>
         <div id="paragrapheSupplementaire">
            <input type="text" name="fieldsemail" id="fieldsemail" value="" />
         </div>
         <p>
           <input type="submit" value="-- OK --"/>
         </p>
      </form>
</body>
</html>

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

08 sept. 2013, 11:14

La c'est clair $pdo n'existe pas y a pas comme un soucis dans l'inclusion ?

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 162 Messages

08 sept. 2013, 14:11

bonjour . vraiment je suis perdu avec le PDO donc j'ai laissé le PDO.
mais malgré ça je n'est pas le résultat voulu . il n'y a plus d'erreur qui s'affiche pas j'ai pas ce que je veux .
voici mon nouveau code :
<?php
include("connect.php");
//$req = $pdo->prepare("SELECT * FROM destinateurs ORDER BY nom_dest DESC");
$req = mysql_query("SELECT * FROM destinateurs ORDER BY nom_dest DESC");
//$req->execute();
$destinataires = array();
//while($d = $req->fetch()){
	while($d = mysql_fetch_assoc($req)){
$id = $d['id_dest'];
$destinataires = $d['nom_dest'];
$email = $d['dest_Mail'];
$tab = array("id" => $id,"destinataire" => $destinataires,"email" => $email);
array_push($destinataires,$tab);
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Document sans titre</title>
<script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
<script src="http://code.jquery.com/jquery-migrate-1.2.1.min.js"></script>
<script type="text/javascript">
        $(document).ready(function(){
           $('#annee').change(function(){
              
              var Email = $("option:selected",this).attr('name');
              var Emails = $('#emails').html();
              if(Emails == ""){
                  $('#emails').html(Email);
              }else{
                  $('#emails').html(Emails+"<br>"+Email);
              }       
           });
        });
</script>
</head>

<body>
      <form method="post" action="reception.php">
         <p>
            <select name="annee" id="annee">
            <option value="Choisissez">Choisissez</option>
            <?php
            for($i = 0; $i < count($destinataires); $i++){
            echo '
            <option name="'.$destinataires[$i]["email"].'" value="'.$destinataires[$i]["destinataire"].'">'.$destinataires[$i]["destinataire"].'</option>
            ';
            }
            ?>
            </select>
         </p>
         <div id="paragrapheSupplementaire">
            <input type="text" name="fieldsemail" id="fieldsemail" value="" />
         </div>
         <p>
           <input type="submit" value="-- OK --"/>
         </p>
      </form>
</body>
</html>

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

08 sept. 2013, 15:36

[quote="msi79"vraiment je suis perdu avec le PDO donc j'ai laissé le PDO.
[/quote]

Tu n'instancie pas l'objet PDO donc ça ne fonctionne pas.
Pas plus que cela ne fonctionnerais sans un mysql_connect.

Quand a ton code tu n'as pas besoin de tableau temporaire, utilise directement la ressource de la requête.

La balise option n'as pas d'attribut name.

ton code peux ressembler à ceci
<?php
include("connect.php");
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>Document sans titre</title>
    <script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
    <script src="http://code.jquery.com/jquery-migrate-1.2.1.min.js"></script>
    <script type="text/javascript">
        $(document).ready(function () {
            $('#annee').change(function () {

                var Email = $("option:selected", this).attr('name');
                var Emails = $('#emails').html();
                if (Emails == "") {
                    $('#emails').html(Email);
                } else {
                    $('#emails').html(Emails + "<br>" + Email);
                }
            });
        });
    </script>
</head>

<body>
<form method="post" action="reception.php">
    <p>
        <select name="annee" id="annee">
            <option value="Choisissez">Choisissez</option>
            <?php
            $req = mysql_query("SELECT * FROM destinateurs ORDER BY nom_dest DESC");
            while ($d = mysql_fetch_assoc($req)) {
                echo '<option value="' . $d['id_dest'] . '">' . $d['nom_dest'] . '</option>'.PHP_EOL;
                }
            ?>
        </select>
    </p>
    <div id="paragrapheSupplementaire">
        <input type="text" name="fieldsemail" id="fieldsemail" value=""/>
    </div>
    <p>
        <input type="submit" value="-- OK --"/>
    </p>
</form>
</body>
</html>
tu peux tester, et voir ce que cela change ou si cela correspond a ce que tu veux. (cela doit afficher la liste déroulante avec dedans les noms des destinataires.

Par contre nommer "annee" cette liste ne me semble pas une bonne idée ;)


@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 162 Messages

08 sept. 2013, 15:46

oui la liste déroulante est bien renseignée . mais moi je veux que lorsque je choisi un élément de cette liste déroulante automatiquement le champs texte soit renseigné par le mail de ce destinataire. (champ lié a liste déroulante). or c'est pas le cas . rien ne ce passe quand je sélectionne un élément de la liste déroulante

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

08 sept. 2013, 16:17

#emails n'existe pas dans le code fournit => cela ne peux fonctionner

voici un exemple fonctionnel, à toi de rajouter les requêtes SQL de mon précédent post
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>Document sans titre</title>
    <script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
    <script type="text/javascript">
        $(document).ready(function () {
            $('#annee').change(function () {
                $('#selectedMail').html($('#annee option:selected').text());
            });
        });
    </script>
    <style type="text/css">
        #selectedMail {
            margin: 5px 25px;
            border: thin solid #9acd32;
            padding: 5px;
        }
    </style>
</head>

<body>
<form method="post" action="reception.php">
    <p>
        <select name="annee" id="annee">
            <option value="1">un@email</option>
            <option value="2">deux@email</option>
            <option value="3">trois@email</option>
            <option value="4">quatre@email</option>
            <option value="5">cinq@email</option>
            <option value="6">six@email</option>
            <option value="7">sept@email</option>
            <option value="8">huit@email</option>
            <option value="9">neuf@email</option>
            <option value="10">dix@email</option>
        </select>
    </p>
    <div id="paragrapheSupplementaire">
        <input type="text" name="fieldsemail" id="fieldsemail" value=""/>
    </div>
    <p>
        <input type="submit" value="-- OK --"/>
    </p>
</form>
<p id="selectedMail"></p>
</body>
</html>
@+
Il en faut peu pour être heureux ......