Formulaire 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 : Formulaire dans un formulaire

J'ai choisi javascript

par stefane321 » 28 nov. 2006, 04:17

Finalement j'ai opté pour un javascript que j'ai trouvé sur hotscripts.com

Voici le javascript:

Code : Tout sélectionner

<script> //Random password generator- by javascriptkit.com //Visit JavaScript Kit (http://javascriptkit.com) for script //Credit must stay intact for use var keylist="abcdefghijklmnopqrstuvwxyz123456789" var temp='' function generatepass(plength){ temp='' for (i=0;i<plength;i++) temp+=keylist.charAt(Math.floor(Math.random()*keylist.length)) return temp } function populateform(enterlength){ document.pgenerate.password.value=generatepass(enterlength) } </script>
notez que pgenerate est le nom du formulaire:

Code : Tout sélectionner

echo "<form name='pgenerate' method='post' action='update_client.php' enctype='multipart/form-data'>";
Voici le bouton de création du mot de passe :

Code : Tout sélectionner

echo "<input type=\"button\" value=\"G&eacute;n&eacute;rer un mot de passe\" onClick=\"populateform(this.form.thelength.value)\"> <input type=\"hidden\" name=\"thelength\" size=3 value=\"7\">";
Le champ caché sert a définir le nombre de caractère que contiendra le mot de passe.

J'ai écrit ici la soluion à mon problème pour les prochains qui chercherons la solution a un problème semblable.

par Cyrano » 27 nov. 2006, 22:25

Pas nécessairement. Regarde ceci dans la FAQ

Hummm! merci encore

par stefane321 » 27 nov. 2006, 22:20

Ok, pour mon niveau de connaisance je devrais utiliser la solution #1 car je ne connais actuellement pas ajax et très peu javascript.

Pour que mon formulaire revienne avec les info déjà saisi j'imagine que je dois les mettre dans une session?

Merci pour ton aide tu es très fort!

par Cyrano » 27 nov. 2006, 21:52

Tu aurais précisé que ta fonction de génération aléatoire était existante et en PHP, je t'aurais proposé une autre solution.

Là, on a un problème puisque le PHP s'exécute coté serveur. Donc deux solutions possibles :
-1- Le bouton soumet le formulaire mais au passage envoie un indicateur pour préciser qu'il faut juste compléter un champ en lui assignant la valeur aléatoire et ré-afficher le formulaire avec les données déjà saisies;
-2- Le bouton avec un gestionnaire d'évènement onclick par exemple appelle une fonction JavaScript qui génère un objet XMLHTTPRequest et interroge ta fonction serveur pour alimenter le champ avec la fonction PHP sans recharger la page = AJAX;

Solution alternative : recréer la même fonction en JavaScript et tout faire coté client avec le même onclick dans ton bouton qui appelle la fonction JavaScript.

OK!

par stefane321 » 27 nov. 2006, 21:42

M'expliquerais-tu plus en détail ou me dirigerais vers un tuto ou un Post pour que je comprenne bien la partie "gestionnaire d'évènement qui va appeler une fonction JavaScript"

Qand tu parle fonction javascript pour générer ma valeur aléatoire sa veux-tu dire que ma fonction php qui fait cela elle doit être en javascript?

Voici ma fonction:
mt_srand((double)(microtime() ^ posix_getpid()));
    $tableau=array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','1','2','3','4','5','6','7','8','9','0');
    $newpass='';
    for($i=0;$i<8;$i++)
    {
        $hasard=rand(0,61);
        $newpass.=$tableau[$hasard];
    }

par Cyrano » 27 nov. 2006, 21:28

L'imbrication de formulaires est interdite : par contre ce que tu peux faire, c'est ajouter un champ input de type button auquel tu ajoutes un gestionnaire d'évènement qui va appeler une fonction JavaScript pour générer ta valeur aléatoire, bouton qui sera indépendant du bouton submit.

Formulaire dans un formulaire

par stefane321 » 27 nov. 2006, 21:24

Bonjour,

J'ai un formulaire qui sert à créer ou modifier un compte client.

Dans ce formulaire je souhaite un bouton qui en cliquant dessus génère un mot de passe aléatoire qui sera affiché dans mon champ mot de passe de mon formulaire.

Le mot de passe sera enregistré dans la BD en même temps que les autres données du compte client.

J'ai déjà la fonction de création du mot de passe. Mais je ne sais pas comment l'intégrer à mon formulaire.

J'ai essayé encréant un formulaire dans mon formulaire mais quand je clic sur mon bouton "Créer le mot de passe" je suis dirigé vers la cible de mon premier formulaire.

Pouvez-vous me diriger vers la bonne voie SVP?

Voici mon code:
echo "<form name='form' method='post' action='update_client.php' enctype='multipart/form-data'>";
include("../config.php");
$connect=mysql_connect($host,$login,$password) or die("Impossible d'&eacutetablir la connexion");
$result=mysql_select_db($db) or die("Impossible d'ouvrir la base de donn&eacute;es");
$sqlquery="select * from $table where id='".$_GET["id_client"]."'";
$queryresult=mysql_query($sqlquery);
$row=mysql_fetch_array($queryresult);
///////////////////////////////////////////////////////////
echo "<table width=\"550\" cellpadding=\"5\" align=\"center\" cellspacing=\"0\"  class=\"border\">\n";
echo "<tr>\n";
echo "<td colspan=\"2\" align=\"center\" class=\"border\">Fiche d'enregistrement des clients</td>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<td width=\"47%\" class=\"soustitre1\">Num&eacute;ro de client:</td>\n";
echo "<td colspan=\"2\" class=\"etoile\">".$row["id"]."</td>\n";
echo "<input type=\"hidden\" name=\"id_client\" value=\"".$row["id"]."\" size=\"25\">";
echo "</tr>\n";
echo "<tr>\n";
echo "<td width=\"47%\" class=\"soustitre1\">Nom de l'entreprise:</td>\n";
echo "<td colspan=\"2\" class=\"etoile\">*<input type=\"text\" name=\"nom_entreprise\" value=\"".$row["nom_entreprise"]."\" size=\"25\"></td>\n";
echo "</tr>\n";

echo "<tr>\n";
echo "<td width=\"47%\" class=\"soustitre1\">Personne ressource:</td>\n";
echo "<td colspan=\"2\">&nbsp;&nbsp;<input type=\"text\" name=\"pers_ressource\" value=\"".$row["pers_ressource"]."\" size=\"25\" ></td>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<td width=\"47%\" class=\"soustitre1\">Adresse:</td>\n";
echo "<td colspan=\"2\" class=\"etoile\">*<input type=\"text\" name=\"adresse\" value=\"".$row["adresse"]."\" size=\"25\"></td>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<td width=\"47%\" class=\"soustitre1\">Ville:</td>\n";
echo "<td colspan=\"2\" class=\"etoile\">*<input type=\"text\" name=\"ville\" value=\"".$row["ville"]."\" size=\"25\"></td>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<td width=\"47%\" class=\"soustitre1\">Province:</td>\n";
echo "<td colspan=\"2\" class=\"etoile\">*<input type=\"text\" name=\"province\" value=\"".$row["province"]."\" size=\"25\"></td>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<td width=\"47%\"  class=\"soustitre1\">Code postal:</td>\n";
echo "<td colspan=\"2\" class=\"etoile\">*<input type=\"text\" name=\"code_postal\" value=\"".$row["code_postal"]."\" size=\"25\"></td>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<td width=\"47%\" class=\"soustitre1\">Téléphone:</td>\n";
echo "<td colspan=\"2\" class=\"etoile\">*<input type=\"text\" name=\"telephone\" value=\"".$row["telephone"]."\" size=\"25\"></td>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<td width=\"47%\" class=\"soustitre1\">Télécopieur:</td>\n";
echo "<td colspan=\"2\">&nbsp;&nbsp;<input type=\"text\" name=\"telecopieur\" value=\"".$row["telecopieur"]."\" size=\"25\"></td>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<td width=\"47%\" class=\"soustitre1\">Téléphone sans frais:</td>\n";
echo "<td colspan=\"2\">&nbsp;&nbsp;<input type=\"text\" name=\"tel_sans_frais\" value=\"".$row["tel_sans_frais"]."\" size=\"25\"></td>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<td width=\"47%\" class=\"soustitre1\">Couriel:</td>\n";
echo "<td colspan=\"2\" class=\"etoile\">*<input type=\text\" name=\"courriel\" value=\"".$row["courriel"]."\" size=\"25\"></td>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<td width=\"47%\" class=\"soustitre1\">Site Internet:</td>\n";
echo "<td colspan=\"2\">&nbsp;&nbsp;<input type=\"text\" name=\"url_web\" value=\"".$row["url_web"]."\" size=\"25\"></td>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<td width=\"47%\" class=\"soustitre1\">Mot de passe:\n";
echo "<form action=\"display_clients.php\" method=\"post\">\n";
echo "<input type=\"submit\" name=\"create_passwd\" value=\"G&eacute;n&eacute;rer un mot de passe\">";
echo "</form>\n";

echo "</td>\n";
echo "<td colspan=\"2\">\n";
if(isset($_POST["create_passwd"]))
{
echo "&nbsp;&nbsp;<input type=\"password\" name=\"password\" value=\"".$newpass."\" size=\"25\">";
}
else
{
echo "&nbsp;&nbsp;<input type=\"password\" name=\"password\" value=\"".$row["password"]."\" size=\"25\">";
}
echo "</td>\n";
echo "</tr>\n";

echo "<tr><td colspan=\"2\"><h3>Produits actuellement au dossier:</h3></td></tr>\n";
mysql_connect($host, $login, $password);
mysql_select_db($db);
$query2="select * from clients_produits where id_client='".$row["id"]."'";
$result2=mysql_query($query2);
$nb = mysql_num_rows($result2);
if($nb==0)
{
echo "<tr><td colspan=\"2\">Il n'y a pas de produit associ&eacute; &agrave; ce client actuellement!</td></tr>\n";
}
while($row2=mysql_fetch_array($result2))
{
mysql_connect($host, $login, $password);
mysql_select_db($db);
$query3="select * from produits where id='".$row2["id_produit"]."'";
$result3=mysql_query($query3);
while($row3=mysql_fetch_array($result3))
{
echo "<tr><td>".$row3["nom"]."<input type=\"hidden\" name=\"id_produit_".$row2["id"]."\" value=\"".$row2["id"]."\" size=\"25\"></td><td><input type=\"text\" name=\"prix_".$row2["id"]."\" size=\"6\" value=\"".$row2["prix"]."\">$&nbsp;&nbsp;&nbsp;<a href=\"supprime_produit_conf.php?id=".$row2["id"]."&id_client=".$row2["id_client"]."\">Supprimer</a></td></tr>\n";
}
}

echo "<tr>\n";
echo "<td colspan=\"2\" align=\"center\"><input type=\"submit\" name=\"submit\" value=\"Envoyer\" class=\"submit\">\n";
echo "</tr>\n";
echo "</table>\n";
echo "</form>\n";
Merci!