Forum-webmaster
Technique - programmation => PHP / MySQL => Message commencé par: johnny-57 le le 22-03-2007 a 14:31:24

Titre: problème de controle formulaire
Posté par: johnny-57 le le 22-03-2007 a 14:31:24

Bonjour tout le monde,

Comme 2 têtes pensent mieux qu'une je vous fait part de mon problème parce qu'à force ma tête ne pense plus :P

J'ai une page avec un formulaire


Code:

<?
echo "<FORM enctype='multipart/form-data' ACTION='inscription-ok.php' METHOD=POST>";
echo "<TABLE width='80%' CELLPADDING=3 CELLSPACING=2 >";
echo "<tr>";
echo "   <td align= 'left'>";
echo "   </td></tr><tr><TD align='left' class='default'>";
echo " Société :</td><td>";
echo "      <INPUT TYPE='text' NAME='societe' VALUE='' SIZE=40 MAXLENGTH=50>";
echo " </TD></TR><TR>";
echo "   <td align= 'left'>";
echo "   </td></tr><tr><TD align='left' class='default'>    ";
echo "    Nom :</td><td>";
echo "      <INPUT TYPE='text' NAME='nom' VALUE='' SIZE=40 MAXLENGTH=50>";
echo " </TD></TR><TR>";
echo "   <td align= 'left'>";
echo "   </td></tr><tr><TD align='left' class='default'>    ";
echo "    Prénom :</td><td>";
echo "      <INPUT TYPE='text' NAME='prenon' VALUE='' SIZE=40 MAXLENGTH=50>";
echo " </TD></TR><TR>";
echo "   <td align= 'left'>";
echo "   </td></tr><tr><TD align='left' class='default'>    ";
echo "    Fonction : </td><td>";
echo "      <INPUT TYPE='text' NAME='fonction' VALUE='' SIZE=40 MAXLENGTH=50>";
echo " </TD></TR><TR>";
echo "   <td align= 'left'>";
echo "   </td></tr><tr><TD align='left' class='default'>    ";
echo "    Téléphone : </td><td>";
echo "      <INPUT TYPE='text' NAME='tel' VALUE='' SIZE=40 MAXLENGTH=50>";
echo " </TD></TR><TR>";
echo "   <td align= 'left'>";
echo "   </td></tr><tr><TD align='left' class='default'>    ";
echo "    Fax : </td><td>";
echo "      <INPUT TYPE='text' NAME='fax' VALUE='' SIZE=40 MAXLENGTH=50>";
echo " </TD></TR><TR>";
echo "   <td align= 'left'>";
echo "   </td></tr><tr><TD align='left' class='default'>    ";
echo "    Portable : </td><td>";
echo "      <INPUT TYPE='text' NAME='portable' VALUE='' SIZE=40 MAXLENGTH=50>";
echo " </TD></TR><TR>";
echo "   <td align= 'left'>";
echo "   </td></tr><tr><TD align='left' class='default'>    ";
echo "    Email : </td><td>";
echo "      <INPUT TYPE='text' NAME='email' VALUE='' SIZE=40 MAXLENGTH=50>";
echo " </TD></TR><TR>";
echo "   <td align= 'left'>";
echo "   </td></tr><tr><TD align='left' class='default'>    ";
echo "    Site web : </td><td>";
echo "      <INPUT TYPE='text' NAME='site' VALUE='' SIZE=40 MAXLENGTH=50>";
echo " </TD></TR><TR>";
echo "   <td align= 'left'>";
echo "   </td></tr><tr><TD align='left' class='default'>    ";
echo "    Adresse : </td><td>";
echo "      <INPUT TYPE='text' NAME='adresse' VALUE='' SIZE=40 MAXLENGTH=50>";
echo " </TD></TR><TR>";
echo "   <td align= 'left'>";
echo "   </td></tr><tr><TD align='left' class='default'>    ";
echo "    Code postal : </td><td>";
echo "      <INPUT TYPE='text' NAME='cp' VALUE='' SIZE=40 MAXLENGTH=50>";
echo " </TD></TR><TR>";
echo "   <td align= 'left'>";
echo "   </td></tr><tr><TD align='left' class='default'>    ";
echo "    Ville : </td><td>";
echo "      <INPUT TYPE='text' NAME='ville' VALUE='' SIZE=40 MAXLENGTH=50>";
echo " </TD></TR><TR>";
echo "   <td align= 'left'>";
echo "   </td></tr><tr><TD align='left' class='default'>    ";
echo "    Pays : </td><td>";
echo "      <INPUT TYPE='text' NAME='pays' VALUE='' SIZE=40 MAXLENGTH=50>";
echo " </TD></TR>";
echo " <TR><TD colspan=2 align='center'>";
echo " <CENTER>";
echo " <INPUT TYPE='reset' VALUE='Effacer' name='Annulation'> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ";
echo " <INPUT TYPE='submit' NAME='Validation' VALUE='Enregistrer'>";
echo " </CENTER>";
echo " </TD>";
echo "</TR>";
echo "</TABLE>";
echo "</FORM>";

?>


Elle renvoie vers une autre page en php également qui vas insérer le contenue du formulaire dans la base mysql.
Pour ne pas enregistrer n'importe quoi je contrôle le contenue des champs avec ce code qui est dans la 2ème page


Code:

<?
function verif($nom, $email, $tel) {
$retour=0;
   // vérification du nom
   if ($_POST[nom]=="")
   {
   echo "<center><font size=+2><b>Vous n'avez pas saisi votre nom</b></font></center>";
   $retour=1;
   return false;      
   }
   // vérfifcation de la présence du telephone   
   if ($_POST[tel]=="")
   {
   echo "<br><center><font size=+2><b>Vous n'avez pas saisi votre numéro de téléphone</b></font></center>";
   $retour=1;   
   return false;      
   }
   // vérification de l'E-MAIL
   if ($_POST[email])
    {
    $email = strtolower($_POST[email]);
   if (strlen($email) < 6){
   echo "$email : Email trop court<br>";
   $retour=1;
   }
    if (strlen($email) > 255) {
   echo "$email : Email trop long<br>";
   $retour=1;
   }
    if (!ereg("@", $email)){
    echo "$email : Le email n'a pas d'arobase (@)<br>";    
   $retour=1;
   }
    if (preg_match_all("/([^a-zA-Z0-9_\@\.\-])/i", $email, $trouve))
   {
    echo "$email : caractère(s) interdit dans un email (".implode(", ",$trouve[0]).").";
   echo "<br>";
   $retour=1;
   }
    if (!preg_match("/^([a-z0-9_]|\\-|\\.)+@(([a-z0-9_]|\\-)+\\.)+[a-z]{2,4}\$/i", $email))
    {
    echo "$email : ce n'est pas un la forme d'un email.<br>";
   $retour=1;
    }
    list($compte, $domaine)=split("@", $email, 2);
    if (!checkdnsrr($domaine, "MX")){
    echo "$email : Ce domaine ($domaine) n'accepte pas les emails<br>";
$retour=1;
    }
   return $email;
   }
   }
if ($retour==0)
{
return true;
}
else
{
return false;
}
$result=verif($_POST[nom],$_POST[email],$_POST[tel]);
if ($result==false)
{
echo "<br><br><center><font size=+2><b>Utilisez le bouton retour arrière pour modifier votre saisie</b></font></center>";
}
else
{

$carac = "abcdefghijklmnopqrstuvwxyz1234567890#$;*@";
$nbcarac = 7;
$password="";
srand((double)microtime()*1000000);
for($i=0; $i<$nbcarac;$i++){
$password.= $carac[rand()%strlen($carac)];
}
$Maintenant = date('dmY');

$instruction="INSERT INTO fournisseurs VALUES ('', '$Maintenant', '$_POST[societe]', '$_POST[nom]', '$_POST[prenon]', '$_POST[fonction]', '$_POST[tel]', '$_POST[fax]', '$_POST[portable]', '$_POST[email]', '$_POST[site]', '$_POST[adresse]', '$_POST[cp]','$_POST[ville]','$_POST[pays]','$_POST[email]','$password','0','','','','','','','')";
$res = mysql_query ($instruction, $connexion);
   $num_enreg= mysql_insert_id();

echo "<center><br><br><br><br><font color=red><b>Merci, les informations concernant votre profil sont maintenant enregistrées sous le numero : ".$num_enreg."</b></font><br><br><br><br>";
echo "Un mail de confirmation vous a été envoyé à l'adresse $_POST[email].<br><br><br><br>";

$aujourdhui = getdate();
$mois = $aujourdhui['mon'];
$jour = $aujourdhui['mday'];
$an = $aujourdhui['year'];
$heure = $aujourdhui['hours'];
$min = $aujourdhui['minutes'];
$sec = $aujourdhui['seconds'];
$total=$categorie+$valeur;
mail("$_POST[email]",
"texte d'accueil",
"From: webmaster");


$sqlcomp="SELECT id FROM fournisseurs ORDER BY id DESC LIMIT 1";
$repcomp = mysql_query($sqlcomp, $connexion);
while ($rescomp = mysql_fetch_row($repcomp))
{
//echo "$rescomp[0]";
$sqlcomp2="INSERT INTO competences VALUES ('','$rescomp[0]','','','','','','','0','','')";
$repcomp2 = mysql_query($sqlcomp2, $connexion);
//echo $sqlcomp2;
}
}
?>


Biensur je ne montre pas la partie connexion à la base mais elle est bien dans le code ;D

Si vous avez une idée je suis preneur merci d'avance

Titre: Re:problème de controle formulaire
Posté par: vertigo_76 le le 23-03-2007 a 21:00:32

salut

J'ai la fleme de tout lire peux tu expliquer ce que tu as remarquer (message d'erreur ou comportement annormal)

Ca me permettra de voir plus rapidement la partie du code a regarder

Vertigo

Titre: Re:problème de controle formulaire
Posté par: MarvinLeRouge le le 23-03-2007 a 21:04:56

salut,

Et le problème, c'est quoi ?

Titre: Re:problème de controle formulaire
Posté par: ToToMaStEr le le 23-03-2007 a 21:16:01

Problème non démontré, aide impossible!

Titre: Re:problème de controle formulaire
Posté par: johnny-57 le le 24-03-2007 a 07:41:38

désolé je fait les choses à moitié, je vous l'avais bien dit ce code m'a mis la tête a l'envers :P

en fait le problème est simple, que l'on remplisse le formulaire convenablement, pas du tout ou partiellement la page de contrôle reste blanche et aucune action sur la bdd

Titre: Re:problème de controle formulaire
Posté par: ToToMaStEr le le 24-03-2007 a 10:13:01

je n'ai pas vu de script de connexion sql.
Je vois que des recuperation sous fetch_row:
Code:
$sqlcomp="SELECT id FROM fournisseurs ORDER BY id DESC LIMIT 1";
$repcomp = mysql_query($sqlcomp, $connexion);
while ($rescomp = mysql_fetch_row($repcomp))
{
//echo "$rescomp[0]";
$sqlcomp2="INSERT INTO competences VALUES ('','$rescomp[0]','','','','','','','0','','')";
$repcomp2 = mysql_query($sqlcomp2, $connexion);
//echo $sqlcomp2;

Titre: Re:problème de controle formulaire
Posté par: johnny-57 le le 24-03-2007 a 10:26:05

comme je le dit dans mon 1er post, le script de connexion est bien là ;D mais je ne l'ai pas posté pour des raisons de discretion :P

Mais l'erreur ne peut venir de la connexion à la bdd puisque quand je supprime le code qui contrôle le formulaire avant l'injection des infos dans la base l'enregistrement se passe très bien mais on peut enregistrer n'importe quoi ;) donc il faut impérativement que je trouve l'erreur dans ce script pour avoir un formulaire optimum.

Titre: Re:problème de controle formulaire
Posté par: iowa le le 24-03-2007 a 12:24:21

Bon alors j'ai pas tout lu ton code.

Pour ta première page : Pourquoi tu n'écrit pas carément juste le formulaire dans le fichier sans utiliser PHP ?
Utilise toujours la balise ouvrante : <?php

Pour ta deuxième page : tu dois utiliser les fonctions isset ou empty pour vérifier les résultats.
Exemple :


Code:

if ($_POST[nom]=="")


se transforme en :


Code:

if (empty($_POST[nom]))


Il faut faire ça avec toutes les données à vérifier.

Un autre truc : quand tu essaie d'accéder à un array mais toujours des quotes pour entourer le nom.

Exemple :


Code:

if (!verif($_POST['nom'],$_POST['email'],$_POST['tel']))

Titre: Re:problème de controle formulaire
Posté par: johnny-57 le le 26-03-2007 a 19:07:07

bon,

ne parvenant pas a trouver l'erreur j'ai tout repris à 0 à tête reposé et sa donne sa


Code:

<?
//
// DEBUT Fonction de contrôle du mail PHP-UNIX
function check_mail($email) {
if( (preg_match('/(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/', $email)) ||
(preg_match('/^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/',$email)) ) {
$host = explode('@', $email);
if(checkdnsrr($host[1].'.', 'MX') ) return true;
if(checkdnsrr($host[1].'.', 'A') ) return true;
if(checkdnsrr($host[1].'.', 'CNAME') ) return true;
}
return false;
}
// FIN Fonction de contrôle du mail


$Envoi = 1; //initialisation de la variable envoi à 1

if ($nom == ""){ //nom du champ1
echo("Vous n'avez pas complété le champ nom.<br>"); //message qui s'affiche si le visiteur n'a pas rempli ce champ
$Envoi = 0; //si le champ1 n'a pas été rempli, la variable envoi prend la valeur de 0
}
if ($prenom == ""){
echo("Vous n'avez pas complété le champ prenom.<br>");
$Envoi = 0;
}
if ($fonction == ""){
echo("Vous n'avez pas complété le champ fonction<br>");
$Envoi = 0;
}
if ($email == ""){
echo("Vous n'avez pas complété le champ email<br>");
$Envoi = 0;
}
else {
if (check_mail($email)) {
echo("");
}
else {
echo("L'adresse e-mail n'est pas valide<br>");
$Envoi = 0;
}
}
if ($adresse == ""){
echo("Vous n'avez pas complété le champ adresse.<br>");
$Envoi = 0;
}
if ($cp == ""){
echo("Vous n'avez pas complété le champ code postal.<br>");
$Envoi = 0;
}
if ($Envoi == 0) echo "<br><br><center><font size=+2><b>Utilisez le bouton retour arrière pour modifier votre saisie</b></font></center>";
//Envoi du message

if ($Envoi == 1) { //vérification que la variable envoi est bien à 1


et sa marche bien, si sa peut vous servir ;)


Forum-webmaster | Actionné par YaBB SE
© 2001-2003, YaBB SE Dev Team. Tous droits réservés.