"action" dynamique dans un formulaire

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : "action" dynamique dans un formulaire

Re: "action" dynamique dans un formulaire

par Pauloscorps » 29 avr. 2011, 14:15

Bon, désepèrant de ne pas trouver de solution, j'ai du changer un petit peu mon plan, et j'ai trouvé une solution qui fonctionne à merveille, mais sans le bouton submit.

La voici :
<?php
	$metatags = "blabla";  // à changer
	include('includes/header.php');
?>
<br/>
<h3>COMMENT NOUS CONTACTER ?</h3>
<p>
adresse...
</p>

<form method="post" action="">
<table class="contact">
<tr>
<td bgcolor="#000" colspan="1">Selectionner l'objet de votre demande :</td>
			<td colspan="1">
				<select name="choix" onchange="location.href=this.value">
					<option value="#" selected="selected">---- Sélectionnez ----</option>
					<option value="contact/nous-contacter.php">Nous contacter</option>
					<option value="contact/devis-impression.php">Devis impression</option>
					<option value="contact/devis-textile.php">Devis textile</option>
					<option value="contact/devis-objets-pub.php">Devis objets pub</option>
				</select>
			</td>
		</tr>
	</table>
</form>
<?php
	include('includes/footer.php');
?>
De cette façon ca marche très bien. Merci infiniment à tous ceux qui m'ont aidés pour leur temps, ce sujet est résolu ! :mrgreen:

Re: "action" dynamique dans un formulaire

par Pauloscorps » 29 avr. 2011, 14:03

Après avoir longuement réfléchi, je viens de m'apercevoir que comme une couillonne, j'avais mis du php dans du javascript.
Or, c'est absolument pas possible.
J'abandonne donc la piste javascript et garde l'action vers contact.php, en attendant d'avoir un script qui fonctionne.

contact.php
<?php
	$metatags = "blabla";  // à changer
	include('includes/header.php');

if (isset($_POST['choix']))
{
	$choix = $_POST['choix'];

	if (isset($_POST['Ok']))
	{
		if ($choix == "contact/nous-contacter.php")
		{
			header('Location : contact/nous-contacter.php');
		}
		else if ($choix == "contact/devis-impression.php")
		{
			header('Location : contact/devis-impression.php');
		}
		else if ($choix == "contact/devis-textile.php")
		{
			header('Location : contact/devis-textile.php');
		}
		else if ($choix == "contact/devis-objets-pub.php")
		{
			header('Location : contact/devis-objets-pub.php');
		}

	}
}
	include('includes/liste_contact.php');
	include('includes/footer.php');
?>
liste_contact.php
<br/>
<h3>COMMENT NOUS CONTACTER ?</h3>
<p>
EN SAVOIE : Z.A. Plan Cumin - 73800 Les Marches<br/>
	EN HAUTE SAVOIE : 825 route de Sallanches - 74920 Combloux <br/>
	tél : 04 79 44 86 10 - 04 50 96 10 64 fax : 09 72 15 71 60 - email : [email protected]
</p>

<form method="post" action="contact.php">
	<table class="contact">
		<tr>
			<td bgcolor="#000" colspan="1">Selectionner l'objet de votre demande :</td>
			<td colspan="1">
				<select name="choix">
					<option value="contact/nous-contacter.php">Nous contacter</option>
					<option value="contact/devis-impression.php">Devis impression</option>
					<option value="contact/devis-textile.php">Devis textile</option>
					<option value="contact/devis-objets-pub.php">Devis objets pub</option>
				</select>
			</td>
			<td colspan="1"><input type="submit" value="Ok" name="Ok"></input></td>
		</tr>
	</table>
</form>
En attendant vos idées..

Re: "action" dynamique dans un formulaire

par Pauloscorps » 29 avr. 2011, 10:33

Bonjour,

Alors merci de ta réponse, mais désolé de te decevoir, ma ligne 21 est une accolade fermante :lol: .
Voici le code tant attendu (je ne l'avais pas remis car il n'a pas changer depuis un de mes posts plus haut):
<?php
	$metatags = "blabla";  // à changer
	include('includes/header.php');

if (isset($_POST['choix']))
{
	$choix = $_POST['choix'];
	
	if (isset($_POST['submit']))
	{
		if ($choix == "contact/nous-contacter.php")
		{
			header('Location : contact/nous-contacter.php');
		}
		else if ($choix == "contact/devis-impression.php")
		{
			header('Location : contact/devis-impression.php');
		}
		else if ($choix == "contact/devis-textile.php")
		{
			header('Location : contact/devis-textile.php');
		}
		else if ($choix == "contact/devis-objets-pub.php")
		{
			header('Location : contact/devis-objets-pub.php');
		}
	}
}
	include('includes/liste_contact.php');
	include('includes/footer.php');
?>
et mon formulaire :
<form action="<?php echo $choix;?>" method="post">
	<table class="contact">
		<tr>
			<td bgcolor="#000" colspan="1">Selectionner l'objet de votre demande :</td>
			<td colspan="1">
				<select name="choix">
					<option value="contact/nous-contacter.php">Nous contacter</option>
					<option value="contact/devis-impression.php">Devis impression</option>
					<option value="contact/devis-textile.php">Devis textile</option>
					<option value="contact/devis-objets-pub.php">Devis objets pub</option>
				</select>
			</td>
			<td colspan="1"><input type="button" name="submit" value="Ok" onclick="document.location = '<?php echo $choix;?>'"></input></td>
		</tr>
	</table>
</form>
J'ai essayé de mettre $choix = $_POST['choix'] avant if(isset($_POST['choix']), mais du coup ma variable est indéfinie.
Cependant, elle ne l'est pas non plus si je le laisse à l'intérieur.
Je vois pas comment ca se fait qu'elle ne soit définie nulle part, ni pourquoi ma ligne de formulaire contenant le bouton m'affiche le bug graphique dont j'ai fait part plus haut.

Donc là je ne sais plus vraiment quoi faire.

En espèrant que tu pourras m'aider encore une fois :oops: ...

EDIT : Je viens de trouver pourquoi ma variable $choix m'était indiquée comme indéfinie. En effet, je l'ai insérée dans le "action" de mon formulaire, alors qu'elle est définie plus loin dans ce même formulaire. En l'enlevant je n'ai donc plus cette erreur, mais que mettre à la place ?

Re: "action" dynamique dans un formulaire

par Patriboom » 28 avr. 2011, 17:20

Il est difficile de t'aider sans le code.!

Dans mon message précédent, je n'avais pas remarqué ta ligne
$choix = $_POST['choix'];
et pourtant je l'ai copiée-collée.
Tout devient plus simple en gardant toujours le même nom de variable.
Certains diront de faire comme t'as fait, renommer pour plus d'aise; soit, mais fait le à la première ligne pour être sûr que ce soit la nouvelle variable seulement qui entre en jeu. Je parie qu'à ta ligne 21, on devrait lire $_POST["choix"] plutôt que $choix. Si tu déplace $choix = $_POST['choix']; en tout début de page, tu devrais régler ça. Encore une fois ... sans le code ... #-o

Quant à des guillemets fermant, regarde bien s'il ne manque pas un point-virgule à quelque part, pour conclure une commande. Commence par régler la ligne 21, tu verras ensuite si l'autre erreur n'est pas réglée du coup.

Re: "action" dynamique dans un formulaire

par Pauloscorps » 28 avr. 2011, 09:59

Merci de ta réponse Patriboom, mais j'ai encore des problèmes. Décidèmment, je ne vais jamais en voir le bout. :evil:
Voici un screenshot de ma page contact.php à l'heure actuelle :
Image

Donc on peut voir deux erreurs :
- La première est que la variable $choix n'est pas définie. Or, je ne comprends pas pourquoi étant donné sur ce formulaire est inclus dans la page contact.php qui l'a définie. ???
- J'ai une espèce de bug là ou j'ai fais un rond rouge. Apparemment, il vient de ma ligne :
<td colspan="1"><input type="button" value="Ok" onclick="document.location = '<?php echo $choix;?>[color=#FF0000]';"/>[/color]</td>
Je me demande si cela ne vient pas du tableau d'erreur que génère Wamp non ?*

Merci de vos réponses en tout cas =)

Re: "action" dynamique dans un formulaire

par Patriboom » 27 avr. 2011, 17:23

Comme tu vérifies l'existence de $_POST['choix'], c'est aussi la valeur de $_POST['choix'] qu'il te faut traiter.
De plus, le simple = attribue une valeur. Pour comparer, il faut le double ==
Ce qui donnera:

Code : Tout sélectionner

if (isset($_POST['submit'])) { $choix = $_POST['choix']; if ($_POST['choix'] == "contact/nous-contacter.php") { header('Location : contact/nous-contacter.php'); } else if ($_POST['choix'] == "contact/devis-impression.php") { header('Location : contact/devis-impression.php'); }....

Re: "action" dynamique dans un formulaire

par Pauloscorps » 27 avr. 2011, 13:42

Je reviens vers vous pour un dernier petit coup de pouce, parce que j'y suis presque là !
Finalement, j'ai repris mon code de départ, et l'ai agrémenté avec un peut de JavaScript (même si j'aime pas çà).

contact.php
<?php
	$metatags = "blabla";  // à changer
	include('includes/header.php');

if (isset($_POST['choix']))
{
	if (isset($_POST['submit']))
	{
		$choix = $_POST['choix'];
		if ($choix = "contact/nous-contacter.php") {
			header('Location : contact/nous-contacter.php');
		}
		else if ($choix = "contact/devis-impression.php") {
			header('Location : contact/devis-impression.php');
		}
		else if ($choix = "contact/devis-textile.php") {
			header('Location : contact/devis-textile.php');
		}
		else if ($choix = "contact/devis-objets-pub.php") {
			header('Location : contact/devis-objets-pub.php');
		}
	}
}
	include('includes/liste_contact.php');
	include('includes/footer.php');
?>
et le formulaire liste_contact.php
<br/>
<h3>COMMENT NOUS CONTACTER ?</h3>
<p>EN SAVOIE : Z.A. Plan Cumin - 73800 Les Marches<br/>
EN HAUTE SAVOIE : 825 route de Sallanches - 74920 Combloux <br/>
tél : 04 79 44 86 10 - 04 50 96 10 64 fax : 09 72 15 71 60 - email : [email protected]</p>

<form action="contact.php" method="post">
	<table class="contact">
		<tr>
			<td bgcolor="#000" colspan="1">Selectionner l'objet de votre demande :</td>
			<td colspan="1">
				<select name="choix">
					<option value="contact/nous-contacter.php">Nous contacter</option>
					<option value="contact/devis-impression.php">Devis impression</option>
					<option value="contact/devis-textile.php">Devis textile</option>
					<option value="contact/devis-objets-pub.php">Devis objets pub</option>
				</select>
			</td>
			<td colspan="1"><input type="button" value="Ok" onclick="document.location = '<?php echo $choix;?>';"></td>
		</tr>
	</table>
</form>
Donc là ca fonctionne très bien, j'ai juste un problème, c'est que n'importe quel élément sur lequel je clique, je suis redirigée vers la page nous-contacter.php.
Quelqu'un sait-il d'où le problème provient ?

Re: "action" dynamique dans un formulaire

par Pauloscorps » 27 avr. 2011, 10:22

Bonjour,
Merci de ta réponse, Patriboom, mais j'ai testé ton code et a priori ca ne fonctionne pas.
J'ai une quantité de "undefined offset", de "Invalid argument supplied for foreach()" et la variable select est toujours en "undefined index".
Résultat, ca commence a me barber !

Re: "action" dynamique dans un formulaire

par Patriboom » 26 avr. 2011, 17:49

Puis-je m'ingérer?

Si ta liste déroulante, au lieu d'avoir des valeur numérique que tu trateras ensuite avait les valeurs finales, tu épargnerais une étape. En code html ça donne:
<select name="choix">
                                        <option value="<?PHP echo $select[1]; ?>">Nous contacter</option>
                                        <option value="<?PHP echo $select[2]; ?>">Devis impression</option>
                                        <option value="<?PHP echo $select[3]; ?>">Devis textile</option>
                                        <option value="<?PHP echo $select[4]; ?>">Devis objets pub</option>
                                </select>
Tu pourrais pousser la chose plus loin et monter tout cela dans un tableau, puis l'afficher HTML par une boucle, ainsi:
<?php
$select[1] = Array("contact.htm", "Nous contacter");
$select[2] = Array("impression.html", "Devis impression");
$select[3] = Array("textile.php", "Devis textile");
$select[4] = Array("publicite.htm", "Devis objets pub");
$select[$choix][2] = ' selected="selected';

?>

Puis ii y a ici ton code html de page.
Quand vient temps d'afficher ta liste déroulante:


<?php
foreach ($select as $value) {
        echo '<option value="'.$value[0].'" '.$value[2].'>'.$value[1].'</option'>;
}
?>
Puisque ta question initiale visait à faire changer la valeur de "action" en fonction du choix fait dans ton menu déroulant, tu peux aussi songer à une solution comme
<form id="MonFormulaire" action="toto.htm">
<select id="LeMemeQueCiHaut" onchange="document.getElementById('MonFormlaire').action.value = this.value>
blabla_ta_liste_optionns
</select>
</form>


S'cusez l'insértion impromptue. J'essaie seulement d'aider un peu.

Re: "action" dynamique dans un formulaire

par Pauloscorps » 26 avr. 2011, 16:45

Hum, merci. J'ai fais comme ceci mais ca ne marche pas. Ma liste déroulante bug avec ce code (une catégorie saute ou une option est vide, et malheureusement, l'effet escompté ne l'est pas :( =.

Voici mon code :

contact.php
<?php
	$metatags = "blabla";  // à changer
	include('includes/header.php');

if (isset($_POST['choix']))
{
	$choix = $_POST['choix'];
}
else
{
	$choix = 1;
}

if (isset($_POST['submit']))
{

	$select[1] = "header('Location : contact/nous-contacter.php')";
	$select[2] = "header('Location : contact/devis-impression.php')";
	$select[3] = "header('Location : contact/devis-textile.php')";
	$select[4] = "header('Location : contact/devis-objets-pub.php')";
	$select[$choix] = ' selected="selected';
}
		include('includes/liste_contact.php');
		include('includes/footer.php');
?>

liste_contact.php :
<br/>
<h3>COMMENT NOUS CONTACTER ?</h3>
<p>adresses</p>

<form action="http://localhost/smtk/contact.php" method="post">
	<table class="contact">
		<tr>
			<td bgcolor="#000" colspan="1">Selectionner l'objet de votre demande :</td>
			<td colspan="1">
				<select name="choix">
					<option value="1" <?PHP echo $select[1]; ?>>Nous contacter</option>
					<option value="2" <?PHP echo $select[2]; ?>>Devis impression</option>
					<option value="3" <?PHP echo $select[3]; ?>>Devis textile</option>
					<option value="4" <?PHP echo $select[4]; ?>>Devis objets pub</option>
				</select>
			</td>
			<td colspan="1"><input type="submit" value="Ok" name="submit"></td>
		</tr>
	</table>
</form>

Re: "action" dynamique dans un formulaire

par Mazarini » 26 avr. 2011, 16:33

Tout d'abord mes excuses pour le switch.

Ensuite pour compléter xTG
$select[1] = "";
$select[2] = "";
$select[3] = "";
$select[4] = "";
$select[$choix] = ' selected="selected';

et dans le formulaire à renommer en .php :
<option value="1"<?PHP echo $select[1]; ?>>Nous contacter</option>
(faire la même chose pour les options 2, 3 et 4)

Re: "action" dynamique dans un formulaire

par Pauloscorps » 26 avr. 2011, 16:26

Il n'y a pas de code php dans mon formulaire ;)
<br/>
<h3>COMMENT NOUS CONTACTER ?</h3>
<p>des adresses</p>

<form action="contact.php" method="post">
	<table class="contact">
		<tr>
			<td bgcolor="#000" colspan="1">Selectionner l'objet de votre demande :</td>
			<td colspan="1">
				<select name="choix">
					<option value="1" selected="selected">Nous contacter</option>
					<option value="2">Devis impression</option>
					<option value="3">Devis textile</option>
					<option value="4">Devis objets pub</option>
				</select>
			</td>
			<td colspan="1"><input type="submit" value="Ok" name="submit"></td>
		</tr>
	</table>
</form>
Je l'ai quand même renommé en .php, pour faire plaisir :lol:

Re: "action" dynamique dans un formulaire

par xTG » 26 avr. 2011, 16:24

Appelé .html ?
Ton serveur est-il configuré pour exécuter du code PHP sous l'extension HTML ?

Re: "action" dynamique dans un formulaire

par Pauloscorps » 26 avr. 2011, 16:12

Merci beaucoup, très bonne idée le switch, je n'y avais pas songé. En revanche, je crois que cela ne marche toujours pas ^^.
A priori, "select($choix) case" n'existe pas. Je me suis donc servi de la boucle "switch" de cette façon :
...
if (isset($_POST['choix']))
{
	$choix = $_POST['choix'];
}
else
{
	$choix = 1; // ou ta page par défaut
}

switch($choix)
{
	case 1:
		header('Location : contact/nous-contacter.php');
		break;
	case 2:
		header('Location : contact/devis-impression.php');
		break;
	case 3:
		header('Location : contact/devis-textile.php');
		break;
	case 4:
		header('Location : contact/devis-objets-pub.php');
		break;
}
		include('includes/liste_contact.html');
		include('includes/footer.php');
?>

Et le formulaire (maintenant appelé liste_contact.html), reste inchangé.
D'où peut venir mon erreur ? #-o

Re: "action" dynamique dans un formulaire

par nhachet » 26 avr. 2011, 16:06

En PHP, le switch :
switch ($choix) {
  case 1: // blalbla
  break;
  default:
}