[RESOLU] Menu déroulant dynamique SQL

Eléphant du PHP | 67 Messages

09 août 2012, 00:38

Bonjour,
J'essaye en général de m'en sortir tout seul avant de poster une demande mais ici, je ne m'en sort pas ...
Je voudrais remplir dans une page source un menu déroulant à partir du champ 1 d'une table SQL et ensuite envoyer à une page target la donnée du champ 5 correspondant ... c'est là que ça coince !
En plus, comme la page target reçoit des données d'autres pages, je dois y appliquer une condition (sous forme de variable en POST)

Le nom de ma table SQL : tblMotsCles
Le nom du champ (1) à afficher dans le déroulant : txtMotCleFR
Le nom du champ (5) à envoyer à la page target quand on sélectionne une option dans le déroulant: StructureNr (avec comme nom de variable : keyword)
Le nom de la variable (toujours la même) à envoyer en POST pour les conditions dans la page target : modesearch ayant toujours la même valeur : cmotcle (que je récupère comme suit: $data = $_POST['modesearch'] ;
Le nom de la page target : searchdb.php

En résumé, la page target (searchdb.php) doit recevoir 2 infos :
1°) Une variable modesearch ayant toujours la même valeur : cmotcle (servant à faire un switch/case)
2°) Une variable keyword ayant la valeur du champ 5 de la table lors de la sélection du champ 1 affiché dans le déroulant de la page source (servant à mon query) ...

En espérant avoir été clair ...
Et mille merci d'avance

Philippe

ViPHP
ViPHP | 2577 Messages

09 août 2012, 08:13

Bonjour,

Qu'est ce qui te pose problème ? Parce que j'ai l'impression que tu nous demandes d'écrire ton code.

Eléphant du PHP | 67 Messages

09 août 2012, 12:00

Bonjour,

Qu'est ce qui te pose problème ? Parce que j'ai l'impression que tu nous demandes d'écrire ton code.
Bonjour Mazarini,

Il faut toujours rester honnête et honnêtement, c'est un peu ça ...
J'en ai tellement essayé que je deviens 'chèvre' ...
Voici mon dernier, dans lequel j'essaye de mettre une valeur à hauteur du onchange() ... mais j'ai essayé aussi d'autres trucs ... avec bouton valider, sans, etc ... mes variables ne passent pas

Plus exactement, ma variable 'fixe' (modesearch) passe bien mais pas ma colonne 5 de la table (ci-dessous : namesearch)
les noms des variables ne sont pas ceux que j'ai donné dans mon post, mais c'est pour des test

$sql = " SELECT * FROM tblMotsCles";
$result = mysql_query($sql) or die("requête fail !");
echo "<form name= \"dbsearch\" action = \"searchdb.php\" method=\"post\">
<table><tr><td>
<select name='dbsearch' onchange=$var=$row[5]>";
while ($row=mysql_fetch_array($result))
{
echo"<option>$row[1]</option>";
}
echo "</select></td></tr></table>";
echo "<input type='hidden' name='modesearch' value='cmotcle'>";
echo "<input type='hidden' name='namesearch' value='".$var."'>";
echo "<input type='submit' value='valider' />";
echo "</form>";

Eléphant du PHP | 190 Messages

09 août 2012, 12:33

Salut,

donc la variable $row[1], lorsqu'elle est sélectionnée dans le select, initialise $var=$row[5] de le même ligne dans ta table ?

Moi je me prendrai pas la tête avec un onChange, j'irai cherché le résultat de $row[5] dans la page de traitement searchdb.php après sélection.

Ensuite, si modesearch vaut toujours cmotcle, pourquoi faire un champ ?

File nous ton code de searchdb.php qu'on comprenne ce que tu veux faire parce que la c'est assez confus.

;)

ViPHP
xTG
ViPHP | 7331 Messages

09 août 2012, 12:45

Visiblement tu aurais besoin de connaître les bases d'un dialogue client-serveur.
onchange est un évènement javascript qui s'exécute côté client.
Le PHP est un langage serveur qui a déjà fini de s'exécuter quand ta page s'affiche dans ton navigateur.
Il n'est donc pas possible de modifier une variable PHP comme tu le fais.

Pour transmettre la valeur tu peux faire ainsi :
while ($row=mysql_fetch_array($result))
{
echo '<option value="' . $row[5] . '">' . $row[1] . '</option>';
}
Ainsi en réception du formulaire tu n'auras pas dans la variable la valeur de ta colonne 1 mais celle de la colonne 5.
Mais l'utilisateur ferra son choix en ayant les valeurs de la colonne 1 comme référence.

Eléphant du PHP | 67 Messages

09 août 2012, 13:09

Salut,

donc la variable $row[1], lorsqu'elle est sélectionnée dans le select, initialise $var=$row[5] de le même ligne dans ta table ?

Moi je me prendrai pas la tête avec un onChange, j'irai cherché le résultat de $row[5] dans la page de traitement searchdb.php après sélection.

Ensuite, si modesearch vaut toujours cmotcle, pourquoi faire un champ ?

File nous ton code de searchdb.php qu'on comprenne ce que tu veux faire parce que la c'est assez confus.

;)
Merci pour ta réponse ...
La page target 'searchdb.php' est utilisée comme target à partir de différentes pages sources pour afficher des infos de la database de manière différente, ceci afin de ne pas devoir créer 6 ou 7 pages target.
Dans chaque cas, la source envoie une variable pour dire à cette page target ce qu'elle doit afficher, et de quelle manière.
Jusqu'à présent, ça marche mais je n'envoie chaque fois qu'une seule variable. Dans le cas présent, je dois en envoyer 2. Une 'fixe' et une dynamique, qui doit être mon row[5] que je dois récupérer dans une requête SQL.
Voici une partie du code de la page target. Le but est d'y ajouter un case "cmotcle": et un query correspondant à ce que je veux faire (afficher des sociétés qui ont dans une table liée le n° provenant de ma fameuse colonne 5 ... mais ceci ne me posera pas de problème.
Par souci de confidentialité (la database ne m'appartiens pas mais est celle d'un client) j'ai masqué login et psw.
En gros, cette page doit recevoir une variable statique $modesearch qui doit être envoyée par la source et doit avoir toujours la même valeur : "cmotcle" ET une variable dynamique $keyword qui doit être ma fameuse colonne 5 et qui porte le nom de StructureNr dans la table SQL


<?@ $db = mysql_connect("localhost","****","*****");
mysql_select_db("employability");

$search = "'%".$_POST['namesearch']."%'";


$sql = "UPDATE tblAdresses, tblLocalites SET tblAdresses.Code_Postal = tblLocalites.txtCP WHERE tblAdresses.Localité = tblLocalites.txtLocalite";
$sqlsend = mysql_db_query("employability", $sql) or die ('Erreur '.$sql.' '.mysql_error());



$data = $_POST['modesearch'] ;
$class = $_POST['keyword'] ;

switch ($data) {

case "cnom" :
$requete = "SELECT * FROM tblSociétés INNER JOIN tblAdresses ON tblAdresses.Nr=tblSociétés.Nr
WHERE nom like $search
AND (MentAct = 1)
ORDER BY tblSociétés.Nom";
break;

case "cinactive" :
$requete = "SELECT * FROM tblSociétés INNER JOIN tblAdresses ON tblAdresses.Nr=tblSociétés.Nr
WHERE MentAct = 0
ORDER BY tblSociétés.Nom";
break;

case "cmention" :
$requete = "SELECT * FROM tblSociétés INNER JOIN tblAdresses ON tblAdresses.Nr=tblSociétés.Nr
WHERE MentAct = 1
AND (InsAct = 0)
ORDER BY tblSociétés.Nom";
break;

case "cinsertion" :
$requete = "SELECT * FROM tblSociétés INNER JOIN tblAdresses ON tblAdresses.Nr=tblSociétés.Nr
WHERE MentAct = 1
AND (InsAct = 1)
ORDER BY tblSociétés.Nom";
break;

... et ici la suite ... mais je n'aurais aucun souci de ce côté ...

}

Eléphant du PHP | 67 Messages

09 août 2012, 13:18

Et voici les différentes sources qui pointent vers cette page target:

<form name= "dbsearch" action = "searchdb.php" method="post">
<center>
<input type="text" name="namesearch">
<input type="hidden" name="modesearch" value="cnom">
<input type="submit" value="Valider">
</center>
</form>


<form name= "dbsearch" action = "../site_fr/searchdb.php" method="post">
<div align="center">
<input type="hidden" name="modesearch" value="cmention">
<input type="submit" value="Mentions" name="submit2">
</div>
</form>

<form name= "dbsearch" action = "../site_fr/searchdb.php" method="post">
<div align="center">
<input type="hidden" name="modesearch" value="cinsertion">
<input type="submit" value="Insertions" name="submit2">
</div>
</form>

<form name= "dbsearch" action = "../site_fr/searchdb.php" method="post">
<div align="center">
<input type="hidden" name="modesearch" value="cinactive">
<input type="submit" value="Inactives" name="submit2">
</div>
</form>

Eléphant du PHP | 190 Messages

09 août 2012, 13:23

Donc ton $row[1] ne sert qu'a l'affichage, c'est $row[5] que tu dois récupérer.

dans ce cas:
$sql = " SELECT * FROM tblMotsCles";
$result = mysql_query($sql) or die("requête fail !");
echo "<form name= \"dbsearch\" action = \"searchdb.php\" method=\"post\">
<table><tr><td>
<select name='dbsearch'>";
while ($row=mysql_fetch_array($result))
{
echo"<option value='".$row[5]."'>".$row[1]."</option>";
}
echo "</select></td></tr></table>";
echo "<input type='hidden' name='modesearch' value='cmotcle'>";
echo "<input type='submit' value='valider' />";
echo "</form>";
et tu récupère avec $_POST['dbsearch'] mais attention, ton <form name="">à le même nom que ton <select name="">, modifie l'un ou l'autre.

ViPHP
ViPHP | 2577 Messages

09 août 2012, 13:27

La première chose à faire (outre les 2 corrections de xTG) est d'afficher les paramètres de ta page via var_dump($_POST) en début de script. Cela te permettra de vérifier et corriger les paramètres plus facilement (nom et valeur).

Tu peux également vérifier le code html de la page avec la liste déroulante pour voir si cela correspond à ce que tu veux.

Eléphant du PHP | 67 Messages

09 août 2012, 13:32

Visiblement tu aurais besoin de connaître les bases d'un dialogue client-serveur.
onchange est un évènement javascript qui s'exécute côté client.
Le PHP est un langage serveur qui a déjà fini de s'exécuter quand ta page s'affiche dans ton navigateur.
Il n'est donc pas possible de modifier une variable PHP comme tu le fais.

Pour transmettre la valeur tu peux faire ainsi :
while ($row=mysql_fetch_array($result))
{
echo '<option value="' . $row[5] . '">' . $row[1] . '</option>';
}
Ainsi en réception du formulaire tu n'auras pas dans la variable la valeur de ta colonne 1 mais celle de la colonne 5.
Mais l'utilisateur ferra son choix en ayant les valeurs de la colonne 1 comme référence.
Merci ... je me doutais un peu que ça ne marcherais pas, mais c'était la dernière de nombreuses tentatives ...
Pour le reste, je reconnais humblement que ce n'est pas mon core-business. Je suis informaticien mais gestionnaire réseau, pas du tout programmeur, même s'il y a une dizaine d'année, j'ai fait quelques petites applications en Fox. J'ai accepté ce job uniquement dans un but 'alimentaire' et je me suis mis au SQl et au PHP il y a quelques mois, seulement ... je suis donc un novice et mon code fera certainement rigoler pas mal de monde, mais jusqu'à présent, ça marche ... avec un petit coup de pouce de gens comme vous ... Merci, merci (Mazarini m'avais déjà dépanné il y a quelques semaines).
Le site de mon client (en belgique, moi je suis en espagne) est en production : http://www.employability.be ... Tout ce qui concerne les queries SQL fait partie de la section 'verte' ... vous pouvez y jeter un coup d'oeil ... Pour l'infographie, on aime ou on n'aime pas, mais c'est ce que voulait le client ...

Eléphant du PHP | 67 Messages

09 août 2012, 14:20

Génial ... ça marche !!!

Mille merci à tous, c'est sympa de m'avoir aidé.

ViPHP
xTG
ViPHP | 7331 Messages

09 août 2012, 14:28

Si tu veux acquérir les bases rapidement que tu pourrais avoir loupé il y a un site répertoriant quelques petits cours sur tout ce qui est indispensable : http://phpdebutant.org :)

Eléphant du PHP | 67 Messages

09 août 2012, 14:57

Si tu veux acquérir les bases rapidement que tu pourrais avoir loupé il y a un site répertoriant quelques petits cours sur tout ce qui est indispensable : http://phpdebutant.org :)
OK ... merci pour l'info ... je vais aller y jeter un coup d'oeil ...

Voici le résultat de votre précieuse aide : http://www.employability.be/site_fr/search.php (partie inférieure, recherche par mot-clé)

Encore merci

Philippe