Problème formulaire / php
Je me lance dans l'accès à des bases de données sous php; et là je bloque sur 1 truc.
J'ai une zone de liste avec différentes valeurs. Quand l'utilisateur clique sur une valeur de cette zone, un script est déclanché.
Le problème, c'est que le script ne se déclanche pas, ou en tout cas mal : à chaque clic, la page est mise à jour mais revient toujours à son état initial.
Pour être + clair, voici un lien : http://www.lepont.asso.fr/motDirecteur.php
Pour être plus complet, le code source du php :
<FORM METHOD = "Get" ACTION = "motDirecteur.php">
<SELECT NAME="cbochoisir" SIZE="1" ONCHANGE="form.submit()">
<OPTION VALUE="-1"> Sélectionner </OPTION>
<OPTION VALUE="0"> Tous les mots </OPTION>
<?
$connexion = mysql_pconnect("sql5","lepont","nZGSrtUo");
if ($connexion == FALSE) print("connexion pas OK !");
$acces = mysql_select_db("lepont",$connexion);
if ($acces == FALSE) print("acces base pas OK !");
$reqSQL = "SELECT * FROM mots WHERE Personne='directeur'";
$curseur = mysql_query($reqSQL, $connexion);
if ($curseur)
{ $enreg = mysql_fetch_object($curseur);
while ($enreg)
{
print("<OPTION Value=\"$enreg->num_mot\">$enreg->date_mot $enreg->intitule_mot </OPTION>");
$enreg = mysql_fetch_object($curseur);
}
}
else
{
print ("requete pas bonne !<BR>");
}
$reqSQL = "SELECT * FROM mots WHERE Personne='directeur'";
if ($cbochoisir >0)
{
$reqSQL= $reqSQL . " AND num_mot=$cbochoisir";
}
$curseur = mysql_query($reqSQL, $connexion);
if ($curseur)
{
$enreg = mysql_fetch_object($curseur);
while ($enreg)
{
print ("$enreg->date_mot $enreg->intitule_mot $enreg->mot<BR>");
$enreg =mySQL_fetch_object($curseur);
}
}
else
{
print ("requete pas bonne !<BR>");
}
mysql_close($connexion);
?>
</SELECT>
</FORM>
</body>
</html>
En espérant que quelqu'un puisse m'éclairer.
A oui, au fait, le script doit me faire afficher les infos de la base de données suivant l'enregistrement sélectionné...
Merci et @+
24 réponses
Le problème est que la zone de liste déclenche un envoi automatique, mais la page se recharge sans afficher les résultats, ce qui empêche l'affichage des données sélectionnées. Selon les conseils, il faut fermer le select et le formulaire juste après le dernier option, sinon le rendu et les requêtes restent inappropriés à chaque affichage. En cas d'affichage des erreurs, l'emploi de or die(mysql_error()) après les requêtes et l'ajout d'un echo du SQL permet de repérer rapidement les erreurs de syntaxe ou de liaison. D'autres ajustements utiles mentionnés incluent la vérification que la variable cbochoisir est récupérée via $_GET et l'usage correct de mysql_fetch_object pour parcourir les résultats dans la boucle.
-
Félicitations !!
:-D
.::: "A trop vouloir feindre de faire fi, on finit
par faire fi de vouloir feindre." :::. -
Ca y est ça marche !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Put1 je suis CONTENT !!!
J'ai modifié un chouilla :$reqSQL="SELECT * FROM mots WHERE Personne='directeur'"; if ((int)$cbochoisir >0) { $reqSQL="SELECT * FROM mots WHERE Personne='directeur'"."and num_mot=$cbochoisir"; }
Le problème (et oui y'a toujours un problème comme dirait l'autre !), c'est que d'entrée il m'affiche tous les mots...
http://www.lepont.asso.fr/motDirecteur.php
Y'a qq1 qui voit d'où ça vient ?
Et encore MERCI -
Re !
y'a encore du bug dans l'air !
voici le code :</SELECT> </FORM> <? $reqSQL="SELECT * FROM mots WHERE Personne='directeur'"; if ((int)$cbochoisir >0) { $reqSQL=$reqsql."and num_mot=$cbochoisir"; } echo $reqSQL;
Une idée ??
En tout cas merci d'essayer de me dépatouiller de cette m...e ! -
je viens d avoir un flash
if ((int)$cbochoisir > 0)
sinon i compare une chaine avec un entier et c pas ce ke tu ve -
rajoute dans
if ($cbchoisir > 0)
$reqSql = $reqsql."and num_mot=$cbochoisir";
et laisse le echo pour voir si ta requete est bien modifiee dans le if -
Donc, voici ce que j'ai http://www.lepont.asso.fr/motDirecteur.php
avec ce code<FORM METHOD = "Get" ACTION = "motDirecteur.php"> <SELECT NAME="cbochoisir" SIZE="1" ONCHANGE="form.submit()"> <OPTION VALUE="-1"> Sélectionner </OPTION> <OPTION VALUE="0"> Tous les mots </OPTION> <? $connexion = mysql_pconnect("sql5","lepont","ghdhrfq"); if ($connexion == FALSE) print("connexion pas OK !"); $acces = mysql_select_db("lepont",$connexion); if ($acces == FALSE) print("acces base pas OK !"); $reqSQL = "SELECT * FROM mots WHERE Personne='directeur'"; $curseur = mysql_query($reqSQL, $connexion); if ($curseur) { $enreg = mysql_fetch_object($curseur); while ($enreg) { print("<OPTION Value=\"$enreg->num_mot\">$enreg->date_mot $enreg->intitule_mot </OPTION>"); $enreg = mysql_fetch_object($curseur); } } else { print ("requete pas bonne !<BR>"); } ?> </SELECT> </FORM> <? $reqSQL="SELECT * FROM mots WHERE Personne='directeur'"; if ($cbochoisir >0) { $reqSQL="SELECT * FROM mots WHERE Personne='directeur' "; } echo $reqSQL; $curseur = mysql_query($reqSQL, $connexion) or die (mysql_error()); if ($curseur) { $enreg = mysql_fetch_object($curseur); while ($enreg) { print ("$enreg->date_mot $enreg->intitule_mot $enreg->mot<BR>"); $enreg =mySQL_fetch_object($curseur); } } else { print ("requete pas bonne !<BR>"); } mysql_close($connexion); ?>
Là il faut que je m'absente 1 ou 2 heures, mais votre aide est la bienvenue !
Merci encore et à tout'. -
fait un echo $reqSQL pour voir a quoi ressemble ta requete
-
fait un echo $reqSQL pour voir a quoi ressemble ta requete
-
Ah non mais là tu l'as placé trop tôt ton </select></form> !
:D
Il faut que tu les mettes juste après ce morceau de code:while ($enreg) { print("<OPTION Value=\"$enreg->num_mot\">$enreg->date_mot $enreg->intitule_mot </OPTION>"); $enreg = mysql_fetch_object($curseur); }
.::: "A trop vouloir feindre de faire fi, on finit
par faire fi de vouloir feindre." :::.-
-
J'ai refermé le code php avec les sin select et form et réouvert juste derrière.
Le formulaire est rafraichi tout de même http://www.lepont.asso.fr/motDirecteur.php -
@Utilisateur anonymeBen forcément puisque là c'est plus du php c'est de l'html!
Il faut que tu fasses echo "</select></form>"; ou alors tu fais ?></select></form><? .
:)
.::: "A trop vouloir feindre de faire fi, on finit
par faire fi de vouloir feindre." :::.
-
-
NoSFe : ça ne change rien.
hector : le or die ne change rien, et le </select> </form> non plus, au contraire : http://www.lepont.asso.fr/motDirecteur.php
De toute façon l'accès à la base est correct car dans la liste les valeurs sont bien ajoutées (1ère partie du script).
Merci tout de même à vous ! -
Si tu mets les tags
</SELECT>
</FORM>
après le dernier </OPTION> (et non pas à la fin de ton script !), ça devrait aller mieux!
Tu peux aussi ajouter des or die (mysql_error()); après des fonctions propres à mysql, comme ça tu auras des messages d'erreur si ça marche pas.
p.ex:
$curseur = mysql_query($reqSQL, $connexion);
devient
$curseur = mysql_query($reqSQL, $connexion) or die (mysql_error());
hector
http://www.hec.unil.ch/infocentre -
if (cbochoisir >0)
{ $reqSQL= $reqSQL . " AND num_mot='".$cbochoisir."'";
}
-> if ($cbochoisir > 0) -
Salut et merci, mais non, cette fois j'ai un message d'erreur : Parse error: parse error, unexpected T_STRING in /home/lepont/www/motDirecteur.php on line 47
(la ligne 47 correspond à la ligne de la requête)
Et le echo ne donne rien (même avant d'avoir changé la requête). -
fait un echo $curseur pour verifier que la requete marche bien
sinon essaie en la tapant entierement
$reqSQL="SELECT * FROM mots WHERE Personne='directeur' and num_mot = $cbochoisir"; -
C'est pas grave, merci quand même.
Je remets le code, au cas où :
<FORM METHOD = "Get" ACTION = "motDirecteur.php"> <SELECT NAME="cbochoisir" SIZE="1" ONCHANGE="form.submit()"> <OPTION VALUE="-1"> Sélectionner </OPTION> <OPTION VALUE="0"> Tous les mots </OPTION> <? $connexion = mysql_pconnect("xx","xx","xx"); if ($connexion == FALSE) print("connexion pas OK !"); $acces = mysql_select_db("xx",$connexion); if ($acces == FALSE) print("acces base pas OK !"); $reqSQL = "SELECT * FROM mots WHERE Personne='directeur'"; $curseur = mysql_query($reqSQL, $connexion); if ($curseur) { $enreg = mysql_fetch_object($curseur); while ($enreg) { print("<OPTION Value=\"$enreg->num_mot\">$enreg->date_mot $enreg->intitule_mot </OPTION>"); $enreg = mysql_fetch_object($curseur); } } else { print ("requete pas bonne !<BR>"); } $reqSQL = "SELECT * FROM mots WHERE Personne='directeur'"; if (cbochoisir >0) { $reqSQL= $reqSQL . " AND num_mot='".$cbochoisir."'"; } $curseur = mysql_query($reqSQL, $connexion); if ($curseur) { $enreg = mysql_fetch_object($curseur); while ($enreg) { print ("$enreg->date_mot $enreg->intitule_mot $enreg->mot<BR>"); $enreg =mySQL_fetch_object($curseur); } } else { print ("requete pas bonne !<BR>"); } mysql_close($connexion); ?> </SELECT> </FORM> -
Là je suis à court d'idées... Désolé :(
.::: "A trop vouloir feindre de faire fi, on finit
par faire fi de vouloir feindre." :::. -
Merci, mais ça n'a eu aucune influence...
Ca m'énnerve ! -
Et tu as bien rajouté ça:
$cbochoisir = $_GET["cbochoisir"]; ?
C'est bizarre...
Essaie ça pour voir:
$reqSQL= $reqSQL . " AND num_mot='".$cbochoisir."'";
.::: "A trop vouloir feindre de faire fi, on finit
par faire fi de vouloir feindre." :::.-
Ça n'apparaît pas très clairement à l'écran donc je rajoute des espaces pour que tu voies bien:
$reqSQL= $reqSQL . " AND num_mot=' ".$cbochoisir." ' ";
En gros tu mets le contenu de $cbochoisir entre quotes simples.
.::: "A trop vouloir feindre de faire fi, on finit
par faire fi de vouloir feindre." :::.
-
-
Non, je n'ai pas de message d'erreur, mais vas voir sur le site ce que ça fait : http://www.lepont.asso.fr/motDirecteur.php
Tu vois, la zone de liste se reinitialise à chaque fois et ne me fait pas afficher les résultats.
Ca me prendre la tête ! -
Tu as un message d'erreur? Si oui lequel?
.::: "A trop vouloir feindre de faire fi, on finit
par faire fi de vouloir feindre." :::.
- 1
- 2