Formulaire dans un formulaire

Eléphant du PHP | 331 Messages

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!

Mammouth du PHP | 19672 Messages

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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 331 Messages

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];
    }

Mammouth du PHP | 19672 Messages

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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 331 Messages

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!

Mammouth du PHP | 19672 Messages

27 nov. 2006, 22:25

Pas nécessairement. Regarde ceci dans la FAQ
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 331 Messages

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.