PDO d'inscriptions mauvais codage ?

Eléphant du PHP | 257 Messages

22 nov. 2013, 15:45

bonjour voilà je viens vers vous pour une petite aide . mon formulaire d'inscription fonction super bien, le seul petit souci que j'ai c'est les champs nom, email et email2 devraient disparaitre une fois l'enregistrement effectué.

Mais ils se raient affiché avec les données entrées, comment le faire disparaitre stp?

voici le code
<?php
//On verifie que le formulaire a ete envoye
if(isset($_POST['nom'], $_POST['email'], $_POST['email_2'], $_POST['sexe']) and $_POST['nom']!='')
{
      //On enleve lechappement si get_magic_quotes_gpc est active
      if(get_magic_quotes_gpc())
      {
         $_POST['nom'] = stripslashes($_POST['nom']);
         $_POST['email'] = stripslashes($_POST['email']);
         $_POST['email_2'] = stripslashes($_POST['email_2']);
	     $_POST['sexe'] = stripslashes($_POST['sexe']);
		 $_SESSION['security_code'] = $_POST['security_code'];
      }



      if(!preg_match('/^[a-zA-Z]$/',$_POST['nom']))
      {	 
      //On verifie si l'email est valide
      if(filter_var($_POST['email'], FILTER_VALIDATE_EMAIL))
      {
      //On verifie si l'email_2 est valide	
      if(filter_var($_POST['email_2'], FILTER_VALIDATE_EMAIL))
      {	   
      //On verifie les deux email si elle dont égale 
	  if($_POST['email'] == $_POST['email_2'])
      { 
	  // Controle du nom dans la basse de donnée 
      $reponse_nom = $connection->prepare('SELECT nom FROM comptes WHERE nom = :nom');   
      $reponse_nom->execute(array('nom'=> $_POST['nom']));
      $nb_resultats_recherche_membre=$reponse_nom->fetch();    
      if(!$nb_resultats_recherche_membre) /*si il n'y a pas de resultat*/
      {
	  // Controle de l'adresse mail si elle est dans la base de donnée
      $reponse_mail = $connection->prepare('SELECT email FROM comptes WHERE email= :email');
      $reponse_mail->execute(array('email'=> $_POST['email']));
      $nb_resultats_recherche_mail=$reponse_mail->fetch();    
      if(!$nb_resultats_recherche_mail) /*si il n'y a pas de resultat*/
      {
	  // code de sécurité 					
      if( $_SESSION['security_code'] == $_POST['security_code'] && !empty($_SESSION['security_code'] ) ) 
      {
	  // Insert you code for processing the form here, e.g emailing the submission, entering it into a database. 
	  unset($_SESSION['security_code']);  	  	  
      //On echape les variables pour pouvoir les mettre dans une requette SQL
      $nom = $_POST['nom'];
      $email =$_POST['email'];
	  $sexe = $_POST['sexe'];

      // Creation d'un identifiant
	  $tail = 8;
	  $lett = "abcdefghijklmnopqrstuvwxyz0123456789AZERTYUIOPMLKJHGFDSQWXCVBN";
	  srand(time());
	  for ($i=0;$i<$tail;$i++)
	  {
	  @$pass2.=substr($lett,(rand()%(strlen($lett))),1);
	  }
	  $pass1 = hash("sha512", $pass2);
		   
      //On enregistre les informations dans la base de donnee 
	    									  
       if ($form === true)
       {
/***********************************************************************************************/
                 $compte=array(	':nom'=> $nom,
				                ':pass'=> $pass1,
				                ':email'=> $email,
				                ':sexe'=> $sexe,
				                ':date'=> date("Y-m-d"),
				                ':quipass'=> date("Y-m-d"),
				                ':heure'=> date("H:i:s"),
				                ':heurepass'=> date("H:i:s"),
				                ':ip'=> $_SERVER['REMOTE_ADDR']);
 
                 $values= join(', ',array_keys($compte));
                 $req=$connection->prepare( 'INSERT INTO comptes ('.str_replace(':','',$values).') VALUES('.$values.')' );
                 $req->execute($compte);	
                 $idXX = $connection->lastInsertId();

                 $infoscompte=array(':idXX'=> $idXX, 
				                    ':nom'=> $_POST['nom'],
				                    ':email'=> $_POST['email']);
 
                 $values_info= join(', ',array_keys($infoscompte));
                 $req_info=$connection->prepare( 'INSERT INTO infoscomptes ('.str_replace(':','',$values_info).') VALUES('.$values_info.')' );
                 $req_info->execute($infoscompte);	
                 
									 	  
			                             $boundary = md5(uniqid(rand()));
                                          
										 $to = $email;
										 $reply = 'NO REPLY';
                                         $subject = 'Votre password H-immo';
										 $sujet = 'Votre password H-immo';
										 $logo_mail = 'http://www.h-immo.be/design/logo1.png';
										  
										 $headers = "From: [email protected] <".$to.">\r\n";
										 $headers .= "X-Sender: [email protected]\r\n";
                                         $headers .= "Reply-To: ".$reply."\r\n";
                                         $headers .= "Return-Path: ".$email."\r\n";
                                         $headers .= "MIME-Version: 1.0\r\n";
                                         $headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";

                                         $messages .= "--".$boundary."--";
                                         $messages  = "<html><body>";
                                         $messages .= "<img src=".$logo_mail." width='187' height='125' border='0'><br />";
                                         $messages .= "<b>Sujet</b> :".$sujet."<br />";
                                         $messages .= "<b>Nom</b> :".$nom."<br />";
                                         $messages .= "<b>Email</b> :".$email."<br />";
                                         $messages .= "<b>Password</b> :".$pass2."<br />";
                                         $messages .= "<a href='http://www.h-immo.be'>Connexion</a>";
                                         $messages .= "</body></html>";
                                         $messages .= "--".$boundary."--";

                                         (@mail($to,$subject,$messages,$headers)); 

?>
<br /><br /><br />
<div align="center" class="message">Vous avez bien été inscrit. Vous pouvez dor&eacute;navant vous connecter,<br />
 avec votre password envoyez par email.<br />
 <span color="#FF0000">Vérifier dans les spams pour votre password</span><br /><br /><br />
<span class="button"><a href="accueil.php">Se connecter</a></span></div>
<?php   	

									
            }
            else
            {                              									 
            //Sinon on dit quil y a eu une erreur
            $FORM = TRUE;
            $message = 'Une erreur est survenue lors de l\'inscription.';		
            }
            }
            else
            {
            //Sinon, on dit que l'email voulu est deja pris
            $FORM = TRUE;
            $message = 'Le code de sécurité n\'est pas valable!!!!!!!!!!..';
            }
	        }
            else
            {
            //Sinon, on dit que le pseudo voulu est deja pris
            $FORM = TRUE;
            $message = 'Un autre utilisateur utilise déjà l\' adresse mail contacter le webmaster pour fraude!!!!!!.';
            }
	        }
            else
            {
            //Sinon, on dit que les mail ne sont pas identiques
            $FORM = TRUE;
            $message = 'Un autre utilisateur utilise d&eacute;j&agrave; le nom d\'utilisateur que vous d&eacute;sirez utiliser.';
            }
            }
            else
            {
             //Sinon, on dit que l'email_2 nest pas valide
            $FORM = TRUE;
            $message = 'Les E-mail que vous avez entr&eacute; ne sont pas identiques.';
            }
            }									
            else
            {
             //Sinon, on dit que l'email nest pas valide
            $FORM = TRUE;
            $message = 'L\'email de comparaison que vous avez entr&eacute; n\'est pas valide.';
            }
            }			
            else
            { 
			//Sinon, on dit que le mot de passe nest pas assez long
            $FORM = TRUE;
            $message = 'L\'email que vous avez entr&eacute; n\'est pas valide.';
            }
            }
            else
            {
            //Sinon, on dit que les mail ne sont pas identiques
            $FORM = TRUE;
            $message = 'Le nom unqiquement des lettres svp!!!!null.';
            }
            }			
            else
            {
            $form = TRUE;
            }
            if($form)
            {
            //On affiche un message sil y a lieu
            if(isset($message))
            {
            echo '<div class="message" style="color:red;text-align:center;"><b>'.$message.'</b></div>';
            }
			
			
            //On affiche le formulaire
echo'<table style="width:100%;height:auto;border:0px;align:center;">
     <tr>
     <td style="white:1OO%;height:auto;">
     <form method="post" action="'.$_SERVER['PHP_SELF'].'">
     <table style="width:auto;border:0px;">
     <tr>
     <td style="width:auto;">
 
     <table style="width:100%;border:0px;">
     <tr>
     <td style="width:40%;"><b>Nom<img src="design/force.gif" width="16" height="16" alt=""/> :</b></td>
     <td style="width:60%;">'; 
	 ?>
<input class="contact_input" type="text" name="nom" value="<?php if(isset($_POST['nom'])){echo $_POST['nom'];} ?>" style="width:160px;"/>
     <?PHP
     echo'</td>
     </tr>
     <tr>
     <td style="width:40%;"><b>Email<img src="design/force.gif" width="16" height="16" alt="" /> :</b></td>
     <td style="width:60%;">'; 
	 ?>
<input class="contact_input" type="text" name="email" value="<?php if(isset($_POST['email'])){echo $_POST['email'];} ?>" style="width:160px;"/>
     <?PHP
     echo'</td>
     </tr>
     <tr>
     <td style="width:40%;"><b>Email2<img src="design/force.gif" width="16" height="16" border="0" alt="" /> :</b></td>
     <td style="width:60%">'; 
	 ?>
<input class="contact_input"  type="text" name="email_2" value="<?php if(isset($_POST['email'])){echo $_POST['email_2'];} ?>" style="width:160px;"/>
     <?PHP
     echo'</td>
     </tr>
     <tr>
     <td></td>
     <td><p><b>Mr&nbsp;:</b>
     <input class="input" type="radio"  name="sexe" value="H" />&nbsp;&nbsp;&nbsp;
     <b>Mme&nbsp;:</b>
     <input class="input" type="radio"  name="sexe" value="F" />
     </p>
     <p><b>Pro&nbsp;:</b><input class="input" type="radio"  name="sexe" value="pro" /></p></td>
     </tr>
     <tr>
     <td style="width:40%;"><b>Code sécurité</b></td>
     <td style="60%;"> 
     <img src="CaptchaSecurityImages.php??rand= rand()" id="captchaimg" alt="" /><br />
     <input class="contact_input" id="security_code" name="security_code" type="text" style="width:160px;"/>    
     </td> 
     </tr>
	 <tr>
	 <td style="width:40%;">&nbsp;</td>
	 <td style="width:60%;">Impossible de lire l&acute;image cliquez sur?&nbsp;<a href="javascript: refreshCaptcha();"><font color="red">ici</font></a>&nbsp;à rafraîchir</td>
	 </tr>
     </table>
     <table style="width:100%;border:0px;">
     <tr>
     <td>
     <div align="center"><input type="submit" name="Submit" class="bb" value="Envoyer"/></div>
     </td>
     </tr>
     </table>
     </td>
     </tr>
     </table>';	 
     echo'<script language="JavaScript" type="text/javascript">
     function refreshCaptcha()
     {
	 var img = document.images["captchaimg"];
	 img.src = img.src.substring(0,img.src.lastIndexOf("?"))+"?rand="+Math.random()*1000;
     }
     </script>';
     echo'<br /><br />
     </form></td>
     </tr>
     </table>';

}
	unset($compte);
	unset($infoscompte);
?>
Modifié en dernier par pacphil le 22 nov. 2013, 23:03, modifié 1 fois.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

22 nov. 2013, 22:54

salut,

c'est pas clair ton affaire, quel rapport avec PDO ?

un titre clair serait un bonne idée !

pour le reste tu ne conditionne pas l'affichage des champs (if).

Ce conditionnement doit être fait en fonction de ce que tu considère comme un enregistrement validé.

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 257 Messages

22 nov. 2013, 23:02

Merci déjà de votre premier réponse, cela est sympa, dans l'ancien versions de mon script , une fois l'enregistrement effectuer il me restait que cela du code.

Si il y a une autre méthode de codage seriez vous m'aidez svp?
<br /><br /><br />
<div align="center" class="message">Vous avez bien été inscrit. Vous pouvez dor&eacute;navant vous connecter,<br />
 avec votre password envoyez par email.<br />
 <span color="#FF0000">Vérifier dans les spams pour votre password</span><br /><br /><br />
<span class="button"><a href="accueil.php">Se connecter</a></span></div>

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

22 nov. 2013, 23:31

le if ($form === true) { conditionnant les requêtes SQL d'insertion ne sera jamais valide car la variable $form n'existe pas a cette endroit.

donc vire ce if et cela ira mieux ;) (n'oublie pas l'accolade et le else qui va avec ;) )


@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 257 Messages

27 nov. 2013, 21:05

Oui comme tu le dis cela ne serre à rien, cela va pas mieux non plus je recherche une fois enregistré à affiché le texte d'inscriptions réussise

Eléphant du PHP | 79 Messages

28 nov. 2013, 04:14

bonjour,

Je t'invite dans une histoire de retrouvé une plus grande lisibilité d'exploiter des fonctions. Une fonction = une action.

exemple :

<?php

// connexion à la base de données format PDO :
$database = new PDO( "mysql:dbname=mydb;host=127.0.0.1;port=3306", "root", null );

// -- LES FONCTIONS ------------------------------------------------------------

// insertion de l'utilisateur.
function create_user( PDO $database, $civilite, $nom, $mail )
{
    $sql = "INSERT INTO utilisateur(civilite,nom,mail) VALUES(?,?,?)" ;
    $req = $database-> prepare( $sql );
    $req-> execute( array( $civilite, $nom, $mail ) );
    return $database-> lastInsertId();
}

// vérifie si le mail existe et s'il est valide.
function valid_mail( PDO $database, $mail )
{
    $result = false ;
    
    $sql = "SELECT * FROM utilisateur WHERE mail = ?" ;
    $req = $database-> prepare( $sql );
    $req-> execute( array( $mail ) );
    $count = $req-> rowCount();
    
    if( $count == 0 and filter_var( $mail, FILTER_VALIDATE_EMAIL ) )
    {
        $result = true ;
    }
    
    return $result ;
}

// autre fonction..

// -- EXPLOITATION -------------------------------------------------------------

$erreur = array();

if( !empty( $_POST )
and isset( $_POST['mail'], $_POST['autre_post'] ) )
{
    if( !valid_mail( $database, $_POST['mail'] ) )
    {
        $erreur['mail'] = "Votre email est invalide." ;
    }
    
    // autre condition...
    
    // vérification si le tableau d'$erreur est vide
    if( empty( $erreur ) )
    {
        // on ajoute l'utilisateur.
        create_user( $database, $_POST['civilite'], $_POST['nom'], $_POST['mail'] );
        // redirection vers un page de succés.
        header( "location:index.php?page=success" );
    }
}

// Sinon le code html qui suit sera affichier avec un tableau $erreur
// avec les clé similaire au post.
// pour $_POST['mail'] si erreur il existera un clé mail dans la varible $erreur

?>

<form method="POST" action="index.php?page=submit">
    
    <div id="input">
    <label>Vote mail :</label>
    <input type="text" name="mail"/>
    <?php if( isset( $erreur['mail'] ) ): ?>
    <span><?php echo $erreur['mail'] ?></span>
    <?php endif ?>
    </div>
    
    <input type="submit" value="s'enregistrer"/>
    
</form>
Sinon pour créer des mot de passe 8 caractères lors de la création d'un compte je t'invite à exploiter ce petit script :

<?php

$rand = rand( 0, 1000000000000 );
$string = md5( $rand );
echo substr( $string, 0, 8 );
Ciao