formulaire avec 2 actions

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 : formulaire avec 2 actions

par donny » 10 mai 2005, 15:46

je vais essayer de comprendre parceque j ai pas trop capter le truc du champs hidden et comment on fait pour recuperer cette valeur et l affecter à un des bouton.

par Darkbibou » 10 mai 2005, 15:35

Ca relance la meme page donny :)

par donny » 10 mai 2005, 15:30

quand on clique sur un des bouton on reste sur la meme page ou on change de page ?

par Cyrano » 06 mai 2005, 14:36

Pas de quoi ;)

par Darkbibou » 06 mai 2005, 14:32

Genial tout fonctionne :D :D :D

Merci Beaucoup pour ton aide !!!!!

par Cyrano » 06 mai 2005, 12:27

C'est un très bon début, mais il manque quelque chose: Il faut initialiser les variables de session, donc juste après avoir vérifié qu'un bouton a été cliqué, tu récupères les infos du formulaire et tu les passes dans les variables de session:
<?
if(isset($_POST['modif_action_form']))
{
    $_SESSION['table_select'] = $_POST['table_select'];
    // pareil pour les autres valeurs...
    $choix = $_POST['modif_action_form']; 
    // etc...

par Darkbibou » 06 mai 2005, 12:19

Voila mon code , tu pense que ca peu marcher ?
<?
if(isset($_POST['modif_action_form'])) 
{ 
    $choix = $_POST['modif_action_form']; 
    if($choix == "structure") 
    { 
       header("Location: consultation_structure.php4");
    } 
    elseif($choix == "donnees") 
    { 
        header("Location: consultation_donnees.php4");
    } 
} 
?>
	
<HTML>

	<HEAD>
					<TITLE> Consultation </TITLE>
	</HEAD>

<BODY>

	
	<FORM NAME='form_consultation' METHOD='post' ACTION='Copie de Formulaire_pour_la_consultation.php4'>
	<BR>
	<H2 align="center">Formulaire de consultation des table de la base des stages</H2>
	<BR>
	
	<TABLE align="center" cellspacing="1" border="1">
	
		<TR>
			<TD align="center">Choissisez la table dont vous souhaitez afficher les données :</TD>
			<TD><select name="table_select">
					<option></option>
					
			<!-- Debut du script en php -->
	<?
		//connexion à la base de données:
		$liendb=mysql_connect("localhost","root","")or die("la connexion à la base a échoué");
		// selection de la base à remplir:
		mysql_select_db("base_stage")or die("Impossible de se connecter à la base de données");
;
		
		// requête d'affichage de la liste des tables
		$sql="SHOW TABLES";

		$resultat_show_table=mysql_query($sql); //on place le résultat de la requête dans une variable
				
		/*affichage des données de la liste déroulante*/ 
						
		while($aff_nom_table = mysql_fetch_row($resultat_show_table))

		{  // tant que $aff_nom_entreprise existe on fait:
			
				echo"<OPTION>".$aff_nom_table[0]."</OPTION>";
				
		} // fin du while/tant que
				
		// Fermeture de la base 
		mysql_close($liendb);
		
	?>
	<!-- Fin du script en php -->
			
			</select></TD>
		</TR>
	
	
	</TABLE>
	
	<BR><BR>
	<input type="hidden"  name="modif_action_form" value="">
		
	<TABLE align="center">
						
		<TR>
			<TD><INPUT type="submit" value="Afficher la structure" onClick="document.forms['form_consultation'].elements['modif_action_form'].value='structure'"></TD>
			<TD width="100"></TD>
			<TD><INPUT type="submit" value="Afficher les données" onClick="document.forms['form_consultation'].elements['modif_action_form'].value='donnees'"></TD>
			<TD width="100"></TD>
			<TD><INPUT TYPE="reset" VALUE="Effacer"></TD>
		</TR>
		
	</TABLE>

	</FORM>


</BODY>

</HTML>
en debut de mes deux script php j'ai mis:
<?
session_start(); 

// récupération des données depuis la page HTML/PHP pour PHP4 ou supérieur

$table_a_afficher= $_SESSION['table_select'];

par Cyrano » 06 mai 2005, 12:02

Dans l'idée, c'est ça, mais tu vas tester en PHP, donc :
if(isset($_POST['champ_cache']))
{
    $choix = $_POST['champ_cache'];
    if($choix == "structure")
    {
        // redirection vers la page pour la structure
    }
    elseif($choix == "donnees")
    {
        // redirection vers la page pour les données
    }
}

par Darkbibou » 06 mai 2005, 11:58

Si je met ca comme submit :

Code : Tout sélectionner

<input type="hidden" name="modif_action_form" value=""> <TABLE align="center"> <TR> <TD><INPUT type="submit" value="Afficher la structure" onClick="document.forms['form_consultation'].elements['modif_action_form'].value='structure'"></TD> <TD width="100"></TD> <TD><INPUT type="submit" value="Afficher les données" onClick="document.forms['form_consultation'].elements['modif_action_form'].value='donnees'"></TD> <TD width="100"></TD> <TD><INPUT TYPE="reset" VALUE="Effacer"></TD> </TR> </TABLE>
et en première ligne de fichier ca sachant que les deux fichiers php4 sont dans le meme repertoire que le formulaire:
<?
	if(modif_action_form.value== "donnees"){
		fopen("consultation_données.php4");
	}else{
		fopen("consultation_structure.php4");
	}	
?>
C bon ou je me plante completement ? :(

par Cyrano » 06 mai 2005, 11:07

Non, faudrait que je te mette la page de code du site du client, ça ne me parait pas approprié.

Mais si tu as compris le principe, commence à mettre du code:
- ajuste ton formulaire: si tu as un doute, passe ici.
- Prépare le traitement PHP d'en-tête de fichier, même chose, si tu as un doute ou que tu es carrément à l'ouest, viens ici.
- teste, note les messages d'erreur éventuels (avec les numéros de ligne) et reviens ici avec l'erreur et la ligne incriminée si tu arrive pas à trouver tout seul :)

par Darkbibou » 06 mai 2005, 10:58

T'as un exemple pour le test stp ? :)

par iclo » 06 mai 2005, 10:43

En effet, dans le cas ou de nombreuses actions sont possible, c'est plus simple à implémenter :wink: :wink: :wink:

par Cyrano » 06 mai 2005, 10:41

On peut remplacer le champ caché en nommant le submit
Oui, mais en utilisant le champ caché, je ne teste qu'une seule valeur au lieu de tester les deux boutons. Cette méthode me permet d'ajouter éventuellement autant de boutons que je veux sans changer une ligne du test :)

par iclo » 06 mai 2005, 10:31

Excellent résumé de la méthode Cyrano
On peut remplacer le champ caché en nommant le submit

par Cyrano » 06 mai 2005, 10:16

Schématiquement, ta page va avoir ceci:

-1- Du PHP pour tester si un des boutons a été cliqué et dans ce cas traitement des variables pour les mettre dans des variables de session et redirection sur la bonne page

-2- En-tête html et formulaire

Tout ça sur ta page formulaire, comprends-tu le principe ? à la première arrivée sur la page, le PHP vas vérifier si un bouton submit a été cliqué: comme ce n'est pas le cas, le formulaire va s'afficher. Quand l'internaute va avoir rempli le formulaire, il va cliquer sur un des boutons, ça va recharger la page. La page en se rechargeant recommence le même processus. Là, le PHP détecte qu'un bouton a été cliqué: ton programme va déterminer lequel en testant la valeur du champ caché, mettre les valeurs du formulaire dans une variable de session et rediriger vers la bonne page de traitement sans ré-afficher le formulaire puisqu'on quitte la page.