Formulaire...

ViPHP
AB
ViPHP | 5818 Messages

01 févr. 2007, 17:27

Bonjour,

Je viens juste de traiter ce problème http://www.phpfrance.com/forums/voir_re ... php#176350
Le menu est dynamique quand javascript est activé (très grande majorité), dans le cas contraire (uniquement si javascript est désactivé) un bouton ok s'affiche pour confirmer le choix.

Edit : Dans l'exemple ci dessus, le menu est utilisé pour afficher des pages centrales en pseudo-frame, tu ne devrais avoir aucune difficulté pour l'adapter à tes besoins.

Eléphant du PHP | 145 Messages

02 févr. 2007, 10:35

Merci pour ton lien AB ^^
Je vais le suivre, ça pourra m'aider mais en attendant j'ai un autre problème :D.

Bon je ne sais pas comment on fais pour ma requete SQL.
Ce que je veux c'est : J'ai mon premier formulaire select, quand je choisi une option, elle est rentré dans une variable et maintenant je veux qu'il aille chercher tout les enregistrement dans la Base de données correspondant a ma variable.

En faite, j'ai [--select--], je choisi la marque canon.
Dans le deuxième j'ai [--select--], toutes les cartouches canon.
donc j'ai ma base qui a un champ marque et un champ Ref, le premier form select affiche toute les marques et quand j'ai fais mon choix, le deuxième doit afficher toute les Ref correspondant au champ de la marque selectionné...
  <select name="cartouche" >;
<?php
$base = 'SELECT DISTINCT Marques FROM tarif$';
$req = mysql_query($base) or die('Erreur SQL !'.$sql.''.mysql_error());
echo '<option selected="selected">'.$form1.'</option>';
while($data = mysql_fetch_array($req)){
echo '<option>'.$data['Marques'].'</option>';
}
echo '<input type="submit" value="ok">';
?>
    </select>
<?php if ($form1 == "") {
die();
}
else{
$base2 = 'SELECT * , (Marques = ".$form1.") , Ref FROM tarif$';
$req2 = mysql_query($base2) or die('Erreur SQL !'.$sql.''.mysql_error());
echo '<select name="modele">';
while($data2 = mysql_fetch_array($req2)){
echo '<option>'.$data2['Ref'].'</option>';
}
echo '</select>';
}
?>
Voila en sachant que $form1 est la variable qui récupère dans le premier select ^^...

Merci de vos réponse ;)

PS : non en faite c'est bon j'ai reussi ce que je voulais. c'était tout con puis en plus je l'avais déja fais ne fois pour mon module de session ^^.

La réponse était :
<?php if ($form1 == "") {
die();
}
else{
$base2 = "SELECT DISTINCT * FROM tarif$ WHERE Marques = '$form1'";
$req2 = mysql_query($base2) or die('Erreur SQL !'.$sql.''.mysql_error());
echo '<select name="modele">';
while($data2 = mysql_fetch_array($req2)){
echo '<option>'.$data2['Ref'].'</option>';
}
echo '</select>';
}
Voila en faite, bon j'ai plus qu'a suivre le tuto de AB XD...;)
La culture, c'est comme la confiture, moins on en a, plus on l'étale.

Eléphant du PHP | 145 Messages

02 févr. 2007, 12:30

Merci AB pour ton code.
Il marche à merveille.
Par contre j'ai un problème, comment je peux faire pour mettre ça en php.

Code : Tout sélectionner

<form id="menuselect2" action="<?php echo $_SERVER['PHP_SELF']?>" method="get"> <div align="center"> <select name="cartouche" method="GET" onchange="document.forms['menuselect2'].submit()">
Les deux première ligne j'y arrive facilement.
En faite c'est le select que je n'arrive pas à mettre en echo et comme par azarre c'est celui là que j'ai besoin de mettre :?...

Si quelqu'un veux savoir pourquoi, c'est parceque je veux faire un Die() et que apparament le die arrete juste le php et non le HTML ^^...

Merci de vos réponses ;)
La culture, c'est comme la confiture, moins on en a, plus on l'étale.

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

02 févr. 2007, 12:53

En principe non, le die() arrête le script de manière franche, directe, sauvage et brutale, qu'il y ait du html ou pas après :)

Ceci dit, ton problème provient très certainement de l'imbrication des apostrophes et guillemets. A l'intérieur de guillemets on ne peut mettre que des apostrophes, et à l'intérieur d'apostrophes on ne peut mettre que des guillemets, sans quoi php l'interprêterais comme la fin de la chaine.

Pour forcer php à afficher des apostrophes entre des apostrophes, il faut les faire précéder d'un antislash : \' (idem pour les guillemets). Ainsi lors de l'exécution, il considère bien l'apostrophe comme un caractère et non comme la fin de ta chaine :
echo ' <select name="cartouche" method="GET" onchange="document.forms[\'menuselect2\'].submit()"> ';
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 145 Messages

02 févr. 2007, 16:12

Merci, j'avais déja essayé mais en moin bien :P donc ça ne marchais pas mais maintenant c'est niquel...
Bon il me reste plus qu'une chose pour que tout fonctionne car là je suis retombé dans un autre problème :D.

J'ai de nouveau un problème avec les doublons de ma base de données.
<?php
@$form1 = $_GET['type'];
$_GET['type'] = $form1;
@$form2 = $_GET['cartouche'];
$_GET['cartouche'] = $form2;
$based = "localhost";
$admin = "root";
$password = "";
$bdd = "base";
$connect = mysql_connect($based,$admin,$password);
mysql_select_db($bdd, $connect) or die("Impossible de se connecter");
echo '<div class="menu">
<form id="menuselect1" action="'.$_SERVER['PHP_SELF'].'" method="get"> 
<div align="center">
<select name="type" onchange="document.forms[\'menuselect1\'].submit()"> ';
$base = "SELECT DISTINCT Types FROM tarif$";
$req = mysql_query($base) or die('Erreur SQL !'.$sql.''.mysql_error());
echo '<option selected="selected">'.$form1.'</option>';
while($data = mysql_fetch_array($req)){
echo '<option>'.$data['Types'].'</option>';
}
echo '</select>
<noscript><input type="submit" name="ok" value="ok" /></noscript>';
if ($form1 == "") {
die();
}
else {
	echo '<div class="menu">
	<div align="center">
	<select name="cartouche" onchange="document.forms[\'menuselect1\'].submit()"> '; 
	$base2 = "SELECT * FROM tarif$ WHERE Types = '$form1'";
	$req2 = mysql_query($base2) or die('Erreur SQL !'.$sql.''.mysql_error());
	echo '<option selected="selected">'.$form2.'</option>';
	while($data2 = mysql_fetch_array($req2)){
	echo '<option>'.$data2['Marques'].'</option>';
	}
	echo '</select>
	<noscript><input type="submit" name="ok" value="ok" /></noscript>';
		if ($form2 == "") {
		die();
		}
		else{
		echo '<div class="menu">
		<div align="center">
		<select>';
		$base3 = "SELECT DISTINCT * FROM tarif$ WHERE Marques = '$form2'";
		$req3 = mysql_query($base3) or die('Erreur SQL !'.$sql.''.mysql_error());
		while($data3 = mysql_fetch_array($req3)){
		echo '<option>'.$data3['Références Machines'].'</option>';
		}
		echo '</select>
		</form>';
		}
}
?>
voila, j'ai des doublons pour le deuxième formulaire select et aussi le troisième car je crois que c'est impossible de mettre un DISTINCT dans ma façon de proceder mais je crois que c'est la seule façon de proceder dans mon cas ^^.
Donc j'ai penser aussi au Array_unique mais j'ai beau relire des dizaines de fois le tuto sur le site mais je n'y comprend rien...

Merci de vos réponse ;).

PS : Ahhhhhh mon patron me pousse au cu*, bon j'ai déja compris un petit morceau de array_unique mais pas tout donc je continue ^^.
Modifié en dernier par Albat90 le 02 févr. 2007, 18:19, modifié 1 fois.
La culture, c'est comme la confiture, moins on en a, plus on l'étale.

ViPHP
AB
ViPHP | 5818 Messages

02 févr. 2007, 18:01

Bonjour Albat90

Code : Tout sélectionner

<form id="menuselect2" action="<?php echo $_SERVER['PHP_SELF']?>" method="get"> <div align="center"> <select name="cartouche" method="GET" onchange="document.forms['menuselect2'].submit()">
C'est quoi ce method="GET" dans la balise select? J'ai jamais vu ça. T'es sûr que c'est nécessaire?

Eléphant du PHP | 145 Messages

02 févr. 2007, 18:15

Ah lol oui...
Merci de me le dire, j'ai du faire ça pendant des test, le temps que je comprenne comment je pouvais faire les formulaires de façon dynamique ^^.
Par contre tu sais comment je pourrais enlever les doublons???
je n'arrive pas à mettre en place array_unique, est-ce que je dois le mettre dans la boucle? avant? après? y a t'il des manipulation avant de faire array_unique puis sur qu'elle variable?

Merci de vos réponse ;).
La culture, c'est comme la confiture, moins on en a, plus on l'étale.