Moi je pensais envoyé un mail avec le lien du formulaire 2, à partir du moment où le service 1 a validé son formulaire, juste pour prévenir le service 2. Exemple : "Etape 1 terminée, à vous de remplir".
Ben oui.
Et dans ce lien tu rajoutes les infos remplies dans le formulaire 1.
Ca te permet de ne créer ta ligne en base que lorsque tu as toutes tes infos.
Sinon tu crées une ligne dans ta table une fois que le formulaire 1 a été envoyé et tu fais des update a chaque formulaire suivant.
Ou, 3eme option, tu remplis une table tampon et tu ne remplis ta table de prod qu'une fois que tu as toutes tes infos
La première solution m'a l'air bien mais cela voudrait dire que je rajoute à chaque fois les informations. Par exemple : Formulaire 1 -> lien.php (avec les infos du formulaire 1 et un bouton pour accéder au formulaire 2) -> Formulaire 2 -> lien.php (avec les infos du formulaire 1 et 2, et un bouton pour accéder au formulaire 3) etc... ???
2ème option : Pour remplir une ligne, on peut faire un Insert pour 3 champs (Formulaire 1), ensuite un update pour le 4eme 5eme 6eme champs (Formulaire 2), etc ... ?
3ème option : Une table tampon c'est à dire ?
Je ne sais pas si j'ai été bien clair sur les 3 options. Merci de prendre de ton temps depuis le début pour me répondre, c'est sympa
Enfin en week end !
Pour reprendre, ce que je te propose :
1) Quand tu submit form1.php, tu envoies un mail qui contient un lien sous cette forme :
http://mon/chemin/vers/form2.php?var1=toto&var2=tata&var3=blabla
Dans ta page form2.php, tu recuperes ces valeurs avec $_GET['var1'], etc.
Le probleme, c'est que les url ont une taille max, donc ti tu tentes de passer 50 infos tu vas te retrouver a court d'espace. Egalment, comme ça passe en clair dans l'URL, aucune donnée sensible ne doit transiter par la (password et cie).
2) oui, tu peux parfaitement faire des updates. Le probleme de cette méthode c'est que si tu as un certain laps de temps entre l'envoi de ton 1er formulaire et l'envoi du dernier, tu vas te retrouver avec une base dans laquelle il manque des infos.
Par exemple, si tu as une table Personne avec age, nom, sexe comme champs, et que ton 1er formulaire ne remplis que "age", alors si tu fais un select * from Personne, tu vas avoir une ligne sans nom ni sexe. Tu peux y pallier en rajoutant par exemple un flag booleen "pret_a_etre_utilise" que tu ne passes a true que lorsque ton dernier formulaire a été envoyé. Et au lieu de faire select * from Personne, tu feras select * from Personne where pret_a_etre_utilise = true pour recuperer ta liste de personnes
3) Une table dans laquelle tu mets les infos au fur et a mesure, et une fois que ta ligne est crée completement, tu la bascules sur ta table de prod. pour reprendre l'exempel du dessus, tu auras une table Personne_buffer dans laquelle tu vas ecrire nom, age et sexe, et quand tu auras envoyé le derniere formulaire, tu recopie cette ligne dans la table Personne et tu la supprimes (ou pas) de Personne_buffer
D'accord, merci pour ta réponse, je testerais ça lundi au boulot. Pour toi quelle est la meilleur solution ?
Probablement la 2
J'up le sujet, j'ai opté pour la solution 2, ça a l'air de fonctionner mais mettre au moins 50 champs dans une table d'une bdd me paraît beaucoup non ?
C'est vrai que ça fait beaucoup, mais ce n'est pas forcement une erreur
Ce serait pas mieux de faire plusieurs tables avec un même ID article ?
Si tu stockes des infos relatives a divers objets (utilisateur, client, article, whatever), alors oui.
Si tu ne stockes que des infos relatives a un même objet, je ne suis pas fan de morceler les tables
C'est des infos que sur un article..
Utilise les variables de sessions pour transmettre les informations de pages en pages, pas les variables d'environnement GET et POST, qui, elles sont moins sécurisé.
Dans le cadre d'un formulaire, le formulaire est remplis la variable GET ou POST reçoit les données, seulement, la variable GET et POST est modifiable par le client, et ça, c'est très dangereux. Never trust user input
Tandis qu'avec les variables de sessions, c'est le serveur qui s'occupe de tout ce que contient $_SESSION, et c'est ainsi plus sécurisé.
Il y a des moments ou utiliser chaque type de variable, mais pour les formulaires, privilèges les variables de sessions.
Bonjour à tous, je pense que tu pourrais même gérer le fais qu' un service ne peux remplir le formulaire sans qu'un autre n'est rempli le sien. Comment me diriez-vous , tout simplement en mettant dans la base de donnée un champ boolean ou un entier avec un 1 si le formulaire 1 a été rempli et 0 s'il n'as pas été rempli comme ça si le service tente de remplir le sien il ne pourra pas le validé car au préalable on ira cherche la valeur de teste du formulaire préalable a celui ci.
Plan POUR LA BASE DE DONNEE:
Table de la base de donnée :
table formulaire1 :
IDFORM1:int (identifiant le formulaire 1)
les autres infos du formulaire 1
IDTESTFORM1 : int (s'il vaut 1 c que le formulaire 1 a ete rempli)
table formulaire2 :
IDFORM2:int (identifiant le formulaire 2)
les autres infos du formulaire 2
IDFORM1 (permet de faire la jointure entre la table formulaire 1 et formulaire2 permet de recupere la variable IDTESTFORM1 qui permet de savoir si le formulaire 2 pourra etre valide)
IDTESTFORM2 : int (s'il vaut 1 c que le formulaire 2 a ete rempli et le formulaire 3 pourra etre alors validé)
table formulaire3 :
IDFORM3:int (identifiant le formulaire 2)
les autres infos du formulaire 2
IDFORM2 (permet de faire la jointure entre la table formulaire 2 et formulaire3 permet de récupéré la variable IDTESTFORM2 qui permet de savoir si le formulaire 3 pourra etre validé)
IDTESTFORM3 : int (s'il vaut 1 c que le formulaire 3 a ete rempli et le formulaire 4 pourra etre alors validé)
PARTI PROGRAMMATION :
•FORMULAIRE (<form action etc..></form>, <input …../> etc ….)
exemple :
<form method="POST" action="Panier.htm">
<input type="submit" name="panier" value="Panier"/>
</form>
•recuperation de donnee sur une autre feuille($_POST ou $_GET a toi de voir se que tu utilise)
exemple :
<?php
if(empty($_POST['numFilm'])){ //$_POST ici me permet de recupere le champ rempli avec le name= numFilm
echo "<br/>veuillez entrer un numero de film.";";
}
else{
$numerofilm = $_POST['numFilm'];
if(!is_numeric($numerofilm)){
echo "<br/>désolé ce n'est pas un numero .";
else etc...
•Acces base de donnee
exemple :
fonctions de connexion (mettre dans un fichier exemple outil.inc) :
function DB_Connect(){//db-oracle.ufr-info-p6.jussieu.fr
$cnx=mysql_pconnect("localhost", "nomprojet");
mysql_set_charset ('UTF8');
if($cnx==0){
echo "La connexion à échoue.\n";
return 0;
}
if(mysql_select_db("nomprojet",$cnx)==0){
echo "Accès à la base de donnée impossible.\n";
echo mysql_error($cnx);
return 0;
}
return $cnx;
}
function DB_execSQL($req, $serv){
$res=mysql_query($req, $serv);
if($res==0){
echo "La requete à échoue.\n";
echo mysql_error($serv);
return 0;
}
return $res;
}
puis on les utilise comme ca (dans un autre fichier):
include("Outils.inc");
$server = DB_connect();
if(ici le test){
echo "";
}else{
$req="select * from FILMS where NoFilm='".$numfilm."'";
$reponse =DB_execSQL($req, $server);//ici teste la requete req
$film = mysql_fetch_object($rep);
echo "<tr>" ;
echo "<td>$film->Titre</td>";
echo '<td><input type="checkbox" name="Case'.$i.'" /></td>';
echo "<tr>";
}
en espérant t'avoir aidé et encore désolé pour le roman.