Page 1 sur 1

Problème liste déroulante

Posté : 15 sept. 2005, 09:54
par Invité
Bonjour ^^

J'ai un petit problème avec un code que j'ai fais.

J'ai fais un petit formulaire pour saisir différente chose, et lorsqu'on clique sur une liste déroulante de ce formulaire, une autre liste déroulante de ce formulaire est mise à jour et ainsi de suite.

Le problème c'est que quand je clique et sélectionne un élément de cette liste déroulante, il poste la requête pour l'insérer dans la base sans que je clique sur le boutton de soumission du formulaire :/

Lignes majeures liées au problème de mon code :

<form action='<? $SERVER_["PHP_SELF"]; ?>' method=POST id='formulaire'>

...

Équipement :
<select name="equipement" onchange="this.form.submit()">

...

<input type=SUBMIT value='Envoyer' onclick="<? include('insertion.php'); ?>">

----

Voilà en gros c'est ça. Je crois que il prend pas en compte le OnClick et qu'il prend directement le code d'insertion dans la base de données.

Quelqu'un aurait-il une idée pour que je m'en sorte ? merci ^^

Posté : 15 sept. 2005, 09:55
par Vaedan
euh ça m'a tout l'air d'un probleme de javascript. pas de php ...

Posté : 15 sept. 2005, 09:59
par Invité
bah le problème c'est surtout que cette ligne :

<input type=SUBMIT value='Envoyer' onclick="<? include('insertion.php'); ?>">

il s'occupe pas du OnClick, et il m'include donc le fichier insertion.php a chaque fois et me poste la requête à chaque refresh :(

Posté : 15 sept. 2005, 10:07
par Cyrano
Il y a quoi dans le fichier "insertion.php" ?

Posté : 15 sept. 2005, 10:09
par Invité
le code php qui insère les éléments du formulaire dans la base sql ^^

Posté : 15 sept. 2005, 10:12
par Cyrano
Ça n'a rien à faire là, onclick est un évènement JavaScript et le PHP ne sera pas interprété coté client.

Ce que tu peux faire à la rigueur, c'est onclick="this.submit()" et dans l'attribut action de ta balise form mettre l'url du fichier insertion.php.

Posté : 15 sept. 2005, 10:16
par Invité
mon problème reviendrait au même. Vu que pour mettre à jour les listes déroulantes par rapport aux autres j'utilise aussi this.form.submit(), quand je sélectionnerai un élément de cette liste déroulante ça me l'enverra dans la base SQL quand même ^^

Posté : 15 sept. 2005, 10:17
par Cyrano
ÇA ne change rien au faire que l'include d'un fichier PHP n'a strictement rien à faire dans un onclick

Posté : 15 sept. 2005, 10:20
par Invité
oui mais alors je fais quoi pour mettre à jour mes listes déroulantes :(

Posté : 15 sept. 2005, 10:25
par Cyrano
Fais voir ton code.

Posté : 15 sept. 2005, 10:39
par Invité
Type :
<select name="type" onchange="this.form.submit()">
<?php
$connexion = mysql_connect("localhost","root","");
mysql_select_db("TOSCANE",$connexion);
$requete = "SELECT * FROM TYPE";
$typ = $_POST['type'];
if($result = mysql_query($requete)) {
	while($ligne = mysql_fetch_row($result)) {
		if ($ligne[0] == $typ) { echo "<option value=$ligne[0] selected>$ligne[1]"; }
		 else { echo "<option value=$ligne[0]>$ligne[1]"; }
	}
}
?>
je sais c'est le bordel, mon code c'est n'importe quoi mais je m'y retrouve comme ça et ça marche lol. C'est pour ça que j'ai mis un this.form.submit(), comme ca avec le php self du action du Form ca me refraichissait la page et donc me mettai à jour la liste déroulante ^^

Pour ça que si je change ça m'embete un peu ^^

Posté : 15 sept. 2005, 10:51
par Cyrano
C'est tout le formulaire qu'il aurait fallu mettre: enfin pour cette partie là, on va simplifier un peu et sortir en plus un code conforme:
<select name="type" onchange="this.form.submit()">
<?php
$connexion = mysql_connect("localhost","root","");
mysql_select_db("TOSCANE",$connexion);
$requete = "SELECT * FROM TYPE";
$typ = $_POST['type'];
if($result = mysql_query($requete))
{
    while($ligne = mysql_fetch_row($result))
    {
        $selected = ($ligne[0] == $typ) ? " selected" : null;
        echo "<option value=\"". $ligne[0] . $selected ."\">". $ligne[1] ."</option>\n";
    }
}
?>
</select>

Posté : 15 sept. 2005, 10:55
par Invité
mon formulaire fait plus de 300 lignes lol. mais toute les listes déroulantes sont dans ce genre là.

Avec la solution que tu m'as donné le this.form.submit() sur l'action des listes déroulante va aussi exécuter la requête. Tu n'aurais pas une parade ?

Posté : 15 sept. 2005, 11:12
par Cyrano
Tu peux tester si le bouton d'envoi a été cliqué : ton bouton submit a un attribut name, par exemple name="envoi": dans la partie traitement, commence par tester si la valeur existe:
<?php
if(isset($_POST['envoi']))
{
    //... le bouton submit a été cliqué, on peut alors exécuter la requête après les vérifications d'usage;
}
elseif(isset($_POST) && !isset($_POST['envoi']))
{
    //... La soumission du formulaire vient d'un évènement onchange sur un élément : autre type de traitement.
}
else
{
    //.... Affichage normal du formulaire (première ouverture de la page)
}
?>

Posté : 15 sept. 2005, 11:37
par Invité
bien vu ! merci mec ça marche, t'es mon dieu et mon sauveur :lol: