Problème liste déroulante

Invité
Invité n'ayant pas de compte PHPfrance

15 sept. 2005, 09:54

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 ^^

Eléphant du PHP | 493 Messages

15 sept. 2005, 09:55

euh ça m'a tout l'air d'un probleme de javascript. pas de php ...

Invité
Invité n'ayant pas de compte PHPfrance

15 sept. 2005, 09:59

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 :(

Mammouth du PHP | 19672 Messages

15 sept. 2005, 10:07

Il y a quoi dans le fichier "insertion.php" ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Invité
Invité n'ayant pas de compte PHPfrance

15 sept. 2005, 10:09

le code php qui insère les éléments du formulaire dans la base sql ^^

Mammouth du PHP | 19672 Messages

15 sept. 2005, 10:12

Ç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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Invité
Invité n'ayant pas de compte PHPfrance

15 sept. 2005, 10:16

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 ^^

Mammouth du PHP | 19672 Messages

15 sept. 2005, 10:17

ÇA ne change rien au faire que l'include d'un fichier PHP n'a strictement rien à faire dans un onclick
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Invité
Invité n'ayant pas de compte PHPfrance

15 sept. 2005, 10:20

oui mais alors je fais quoi pour mettre à jour mes listes déroulantes :(

Mammouth du PHP | 19672 Messages

15 sept. 2005, 10:25

Fais voir ton code.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Invité
Invité n'ayant pas de compte PHPfrance

15 sept. 2005, 10:39

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 ^^

Mammouth du PHP | 19672 Messages

15 sept. 2005, 10:51

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>
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Invité
Invité n'ayant pas de compte PHPfrance

15 sept. 2005, 10:55

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 ?

Mammouth du PHP | 19672 Messages

15 sept. 2005, 11:12

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)
}
?>
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Invité
Invité n'ayant pas de compte PHPfrance

15 sept. 2005, 11:37

bien vu ! merci mec ça marche, t'es mon dieu et mon sauveur :lol: