[PHP] Formulaire sur plusieurs pages

Fermé
Hervé - 28 janv. 2008 à 17:34
Alain_42
Messages postés
5358
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
- 7 avril 2010 à 10:16
Bonjour,

Comment faire pour vérifier si un formulaire a été complètement rempli et si ce n'est pas le cas, recharger le formulaire avec les valeurs déjà entrées par l'utilisateur?

De même comment remplir efficacement une base de données MySQL à partir d'un formulaire sur plusieurs pages?

Merci beaucoup.

17 réponses

Bonsoir,

Concernant le fichier JS: pas besoin de <script ......></script> dans ce fichier, tu l'enregistres seulement en .js

Tu ne l'as pas conçu correctement, il faut tester dans l'autre sens, comme tu as fait si le premier est bon, les autres ne seront jamais testés.
Fais comme ça:

function checkForm(form) 
{
    if (document.form.monChamp1.value == "") // idem pour chaque champ
    {
        return false;
    }
    else if((document.form.monChamp1.value == "") 
	{
	return false;
	}
	else{
	return true;
	}
}


Ensuite, en plus de la vérif par JS (pour les cas ou il est désactivé), il faut fairte une vérif php


<?php
$champ1=(isset($_POST['champ1'])) ? $_POST['champ1'] : ""; //idem pour tous les champs  (methode de test conditionnel par opérateur ternaire)
//ensuite tu vérifie si vide ou pas en php, pour chaque champ
if($champ1==""){
	echo "Vous devez saisir le champ1 ";
}elseif($champ2==""){ //etc....

}else{
//enregistrement des donnes dans un fichier .text puis appel de la page suivante
header("Location:next_page.php" // attention il ne faut aucune balise HTML avant ce header

}
?>
<html>
<head>
<script language="javascript" src="ton_fichier.js"></script> <!-- ca c'est le lien vers ton fichier JS -->
</head>
<form .....>
<input type="text" name="champ1" value="<?php echo $champ1; ?>"> <!-- ça va te réafficher la valeur déja saisie
</form>
</html>


attention, pour ça il faut que le formulaire s'appelle lui même, c à d action="nom_formulaire.php"
1
Bonsoir,

Formulaire sur plusieurs pages:

- page 2, tu mets en champ caché type="hidden" les valeurs déja saisies dans la page 1( que tu as récupéré par $_POST....)

Lorsque la page 2 sera submit, elle te postera tous les champs, les cachés et les autres et tu pourras ainsi les enregistrer dans ta base.

Pour que les valeurs saisies restent, le plus simple est de faire la verif par Javascript, comme ça la page ne se recharge pas, elle n'est submit que qd tout est bon;

Tu mets dans la balise <form............ onSubmit= "return ta_fonction_verif(....);">

si tout ok ta fonction verif JS doit faire return true sinon return false.
0
Tout d'abord, merci de votre réponse.

Mais si le formulaire fait 5 pages avec environ 15 champs par pages, ça fait une quantité de champs hidden assez impressionnante... n'est-ce pas dérangeant?
0
Et comment intéragir entre PHP et JavaScript? Ma fonction de vérification (dans un fichier séparé) était écrite comme ça:
<?php
    if (isset($_POST['value']) && !empty($_POST['value']) && /* idem pour tous les champs */) {
        // on traite les valeurs
    }
    else {
        // on recharge la page
       include "index.php";;
    }
?>


Merci.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bonjour,

A ma connaissance,il n'y a pas de limite au nombre de champs, cachés ou pas dans un formulaire.

Sinon, tu as une solution:

à chaque fois qu'une page est postée, dans le script qui charge la suivante, au début, tu enregistres les valeurs dans un fichier .txt temporaire spécifique à cet utilisateur, ligne par ligne.
A la page suivante tu enregistre à la suite dans ce fichier.
A la dernière page, tu lis tout ça et enregistres dans ta BDD.


Ou même tu peux faire ça directement dans la BDD, chaque page vient compléter l'enregistrement, et en dernière page on valide

Pour la vérif c'est bon ce que tu as fait en php.

Tu peux faire en plus une verif en JS
<form............ onSubmit= "return ta_fonction_verif(....);">
tu passes en parametres les id des champs à verifier et tu mets ton script JS en fichier séparé
et ta fonction JS viens lire le contenu du champ, si ok passe au suivant et au dernier return True , si non ok return False

Vas voir sur moteur de recherche "javascript verification formulaire"
0
C'est étrange, on dirait que mon script de vérification n'est pas appelé...
Voilà ce que j'ai fait:

// formulaire
<form id="monForm" action="nextPage.php" onSubmit="return checkForm(this.form)" method="post">
...
</form>

// script de vérification (dans un fichier séparé)
<script language="javascript">
function checkForm(form) 
{
    if (document.form.monChamp.value != "") // idem pour chaque champ
    {
        return true;
    }
    else { return false; }
}
</script>


Merci encore de votre aide précieuse.
0
Je viens également de tomber sur un post intéressant:
-En javascript, je trouve que c'est pas très bien, quelqu'un qui a désactivé Javascript ne pourra pas utiliser ton formulaire. 


Ce qui me semble effectivement un argument valable. Serait-il dès lors possible d'effectuer ma vérification en php, mais de manière à ce que les champs déjà rempli conservent leur valeur?

Merci encore.
0
J'ai finalement opté pour une version PHP (qui semble marcher plutôt bien !).
Merci beaucoup de vos conseils.
0
Je viens de remarquer un autre problème...
J'ai créer mon formulaire en version bilingue (un fichier francais.php et un fichier anglais.php avec les variables dans leur langue respective) avec un lien pour changer la langue (méthode GET).
Lorsque je change la langue, les données déjà entrées sont perdues. Existe-il un moyen similaire de conserver ces données ?
Les liens se présentent comme suit:
<a href="index.php?langue=francais">francais</a>

Merci.
0
Bonjour,

Pourquoi veux tu changer le nom des variables en fonction de la langue. Ces noms sont invisibles pour l'utilisateur.

Mets les toutes en anglais.

Changes seulement les libellés des champs.

Quand à la vérif, fais la avec les deux JS et PHP

Pour debugger JS utilises la console d'erreurs Javascript de FireFox si tu as ce navigateur.

@lain
0
En fait, je pense que j'ai mal formulé ma question. J'ai les mêmes noms de variables en anglais/français, mais quand je change la langue, les données entrées ne sont pas conservées.

Quand à la vérification, je ne comprends pas vraiment l'intérêt de faire une double vérification PHP/JavaScript... (je débute en programmation internet, alors veuillez m'excuser si mes questions paraissent triviales.)

Merci encore.
0
L'interêt de la double verif JS et php:

- si javascript n'est pas désactivé sur le poste client, la verif est immédiate et se fait sans recharger la page, c'est plus fluide

- si javascript désactivé, alors la verif php vient en "sécurité"

Pour le changement de langue il faut t'arranger pour que se ne soit possible qu'au début du formulaire (première page), ou a l'entrée sur le site. Souvent on voit sur certains sites des petits drapeaux sur lesquels il faut cliquer pour entrer sur le site correspondant à la langue.
0
J'éprouve encore quelques difficultés à effectuer ma double vérification Javascript/PHP...
Ma vérification Javascript marche bien, par contre je m'embrouille un peu avec PHP...

Je vous explique avec un peu plus de détails la façon dont j'ai construit tout cela:

- index.php // ma page d'accueil, elle s'occupe de charger les fichiers form?.php.
- page1.php, page2.php, page3.php: les différentes pages de mon formulaire.
- verifiePages.php, verifiePages.js: s'occupent de vérifier la validité des entrées.
- francais.php, anglais.php: contiennent les variables dans leur langue respective.
- langue.php: s'occupe de charge les variables en français ou en anglais.

La première ligne de mon fichier form1.php (form2 et 3 sont identiques):
<form id="monForm" action="index.php?langue=<?php echo $_GET['langue']; ?>&page=2" onsubmit="return verifiePage1(this)" method="post">


Dans index.php, je charge la langue et la page (via GET).
<?php include("langue.php"); ?>
...
if (isset($_GET['page'] && !empty($_GET['page'])) 
{
    if ($_GET['page'] == 2 && verifiePage1()) { include("page2.php"); }
    else include("page1.php");

}


Dois-je inclure une balise?
<script type="text/php" src="verifiePages.php"></script>

Ne risque-t'il pas d'y avoir des conflits entre les versions Javascript et PHP si les fonctions portent le même nom ?

Merci encore.
0
Alain_42
Messages postés
5358
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
898
4 févr. 2008 à 10:29
Bonjour,

<script type="text/php" src="verifiePages.php"></script> Non

verifiePages.php et verifiePages.js ce n'est pas le même nom

Pour accéder à un script javascript dans un fichier externe à ta page:

<script language="javascript" type="text/javascript" src="verifiePages.js"></script>


pour utiliser un script php tu fais plutôt un include ("verifiePages.php"); au début de ta page
ce fichier externe contiendra une fonction php qui te servira pour chaque page

est ce que toutes tes pages ont le mêm nombre de champs à vérifier ?

principe fonction JS:
si champ pas bon return false si tous bons return true

principe fonction php:
idem

avant ta partie formulaire page 2 pour faire la verif par php de la page 1:
include("ton_fichier_fct_php.php");
$champs_corrects=false; //init à false au départ
$champs_corrects=ta_fonction_php(en_parametres_tous_les_champs_a_verifier); //si pas bon te renverra false, si bon true
if(!$champs_corrects){
  header("Location:page1.php"); // si pas bon on réaffiche la page1
}else{
  // ta partie formulaire page2

}


etc idem pour les autres pages

Essayes de faire comme ça avec les 2 premières pages, si le nombre de champs n'est pas pareil dans toutes les pages c'est un peu plus compliqué, il faut faire une fonction a nombre d'arguments variables (tu peux aller voir sur Google comment faire)

Au fait as tu testé le moteur de recherche français EXALEAD: http://www.exalead.fr/search/

En espérant avoir été assez clair, ce n'est pas simple ce que tu veux faire.

Procèdes par étapes
0
Merci. J'ai finalement légèrement revu mon architecture qui compliquait quelque peu la programmation, et suis finalement parvenu à réaliser ce que je souhaitais.
Le concept d'Exalead m'a l'air intéressant, il mérite que l'on s'y intéresse!
0
Bonjour,
J'ai réalisé un formulaire sur 2 pages en suivant le même principe que le votre. Mais lorsque j'arrive sur le formulaire pour la première fois il m'affiche tout de suite les messages du type "veuillez saisir le champ machin".
Est-ce que vous savez comment faire pour que les erreurs ne s'affichent qu'a l'envoi de la page?

Claire
0
Alain_42
Messages postés
5358
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
898
7 avril 2010 à 10:16
sans le code c'est impossible de t'aider, donnes nous le

merci
0