Nouveau Login

Eléphant du PHP | 81 Messages

23 mars 2011, 16:25

Bonjour
Je viens de faire un script pour enregistrer un nouvel utilisateur.
voici le script

Code : Tout sélectionner

<?php if (isset ($_POST['submit'])) { // verification du nom -- if (mb_eregi("^[[:alpha:].'-]{2,30}$",stripslashes (trim($_POST['nom'])))) { $no=echappement($_POST['nom']); } else { $no=FALSE; echo "<p><font color='blue' size='+1'>"."Indiquez votre nom"."</font></p>"; } // verification du prenom -- if (mb_eregi("^[[:alpha:].'-]{2,15}$",stripslashes (trim($_POST['prenom'])))) { $pre=echappement($_POST['prenom']); } else { $pre=FALSE; echo "<p><font color='red' size='+1'>"."Indiquez votre prenom"."</font></p>"; } // verification du nom utilisateur -- if (mb_eregi("^[[:alnum:].'-]{2,30}$",stripslashes (trim($_POST['nom_utilisateur'])))) { $util=echappement($_POST['nom_utilisateur']); } else { $util=FALSE; echo "<p><font color='red' size='+1'>"."Indiquez votre nom d'utilisateur"."</font></p>"; } // verification du mail -- if (mb_eregi("^[a-z0-9_.]+@[a-z0-9-_]+\.[a-z]{2,4}$",stripslashes (trim($_POST['email'])))) { $em=echappement($_POST['email']); } else { $em=FALSE; echo "<p><font color='red' size='+1'>"."Indiquez votre mail correctement"."</font></p>"; } // verification du mot de passe -- if (mb_eregi("^[[:alnum:]]{4,20}$",stripslashes (trim($_POST['mot_de_passe1'])))) { if ($_POST ['mot_de_passe1']==$_POST['mot_de_passe2']) { $mdp=echappement($_POST['mot_de_passe1']); } else { $mdp=FALSE; echo "<p><font color='red' size='+1'>"."Les deux saisies du mot de passe ne sont pas identiques"."</font></p>"; } } else { $mdp= FALSE; echo "<p><font color='red' size='+1'>"."Mot de passe invalide"."</font></p>"; } // Validation du commentaire if (mb_eregi ("^[[:alnum:][:space:].,;\'\?-]+$",stripslashes(trim($_POST['commentaire'])))) { $mg= echappement($_POST['commentaire']); } else { $mg=FALSE ; echo "<p><font color='red' size='+1'>"."Votre texte contient des caractères non valides"."</font></p>"; } if(($no==true) && ($pre==true) && ($util==true) && ($em==true) && ($mdp==true) && ($mg==true)) { $rq="SELECT * FROM utilisateur WHERE nom_utilisateur='$util'"; $result=@mysql_query($rq); $ligne=mysql_num_rows($result); if($ligne==0) { $rpl="INSERT INTO utilisateur(id,nom_utilisateur,prenom,nom,email,mot_de_passe,message)VALUES('','$util','$pre','$no','$em',password('$mdp'),'$mg')"; $result=@mysql_query($rpl); if($result) { echo 'Merci de vous être enregistré'; exit (); } } else { echo 'Nom utilisateur déjà utilisé'; } } else { echo"<p><font color='red' size='+1'>"."Recommencez, Merci"."</font></p>"; } } ?> <form action="<?php echo $_SERVER['PHP_SELF']; ?> "method="post"> <fieldset> <label><b>Nom : </b></label> <input type="text" size="30" maxlength="30" name="nom" value="<?php if(isset($_POST['nom'])) {echo $_POST['nom'];} ?>" /> <br /> <label><b>Prenom : </b></label> <input type="text" size="30" maxlength="30" name="prenom" value="<?php if(isset($_post['prenom'])){echo $_POST['prenom'];}?>" /> <br /> <label><b>Nom d'utilisateur : </b></label> <input type="text" size="30" maxlength="30" name="nom_utilisateur" value="<?php if(isset($_post['utilisateur'])){echo $_POST['utilisateur'];}?>" /> <br /> <label><b>E-Mail : </b></label> <input type="text" size="30" maxlength="100" name="email" value="<?php if(isset($_post['email'])){echo $_POST['email'];}?>" /> <br /> <label><b>Un commentaire</b></label> <textarea name="commentaire" cols="50" rows="10"></textarea> <br /> <label><b>Mot de passe</b></label> <input type="password" name="mot_de_passe1" size="20" maxlength="20" /> <br /> <label><b>Confirmation du mot de passe</b></label> <input type="password" name="mot_de_passe2" size="20" maxlength="20" /> </fieldset> <input type="submit" name="submit" value="Enregistrement" /> <input type="reset" name="reset" value="Remise a zero"/> </form>
Mais j'ai cette erreur
(code]
Fatal error: Call to undefined function echappement() in C:\wamp\www\Emploi\formulaire_login.php on line 30
[/code]

La ligne 30 correspond à cela

Code : Tout sélectionner

$no=echappement($_POST['nom']);
Si je saute cette étape j'ai le même message avec l'echappement suivant.

merci
Modifié en dernier par 63renaud le 03 avr. 2011, 18:37, modifié 2 fois.

Eléphant du PHP | 241 Messages

23 mars 2011, 16:29

Salut,
c'est quoi cette fonction echappement() ? c'est peut-être un htmlspecialchars que tu essaye de faire non ? http://php.net/manual/fr/function.htmlspecialchars.php

Tu te casse pas mal la tête pour vérifier le formulaire en tout cas :shock:

Eléphant du PHP | 81 Messages

23 mars 2011, 16:52

oui je me suis trompé c'était bien un htmlspecialchars
Tu te casse pas mal la tête pour vérifier le formulaire en tout cas :shock:
pourquoi il y a plus simple pour contrôler le formulaire d'inscription ?

merci

Eléphant du PHP | 241 Messages

23 mars 2011, 17:27

j'utiliserai plutôt des empty() et isset() pour tester si les champs sont remplis.

Pour vérifier l'email il y a une fonction pour
<?php
filter_var('$mail', FILTER_VALIDATE_EMAIL));
?>

Eléphant du PHP | 81 Messages

23 mars 2011, 18:50

ok merci je vais essayer .

merci

Eléphant du PHP | 81 Messages

03 avr. 2011, 18:39

Bonjour je viens de faire les corrections.
<?php
if (isset ($_POST['submit']))
{
    // verification du nom --
    if (mb_eregi("^[[:alpha:].'-]{2,30}$",stripslashes (trim($_POST['nom']))))
    {
        $no=htmlspecialchars($_POST['nom']);
    }
    else
    {
        $no=FALSE;
        echo "<p><font color='blue' size='+1'>"."Indiquez votre nom"."</font></p>";
    }

    // verification du prenom --
    if (mb_eregi("^[[:alpha:].'-]{2,15}$",stripslashes (trim($_POST['prenom']))))
    {
        $pre=htmlspecialchars($_POST['prenom']);
    }
    else
    {
        $pre=FALSE;
        echo "<p><font color='red' size='+1'>"."Indiquez votre prenom"."</font></p>";
    }

    // verification du nom utilisateur --
    if (mb_eregi("^[[:alnum:].'-]{2,30}$",stripslashes (trim($_POST['nom_utilisateur']))))
    {
        $util=htmlspecialchars($_POST['nom_utilisateur']);
    }
    else
    {
        $util=FALSE;
        echo "<p><font color='red' size='+1'>"."Indiquez votre nom d'utilisateur"."</font></p>";
    }

    // verification du mot de passe --
    if (mb_eregi("^[[:alnum:]]{4,20}$",stripslashes (trim($_POST['mot_de_passe1']))))
    {
        if ($_POST ['mot_de_passe1']==$_POST['mot_de_passe2'])
        {
            $mdp=htmlspecialchars($_POST['mot_de_passe1']);
        }

        else
        {
        $mdp=FALSE;
        echo "<p><font color='red' size='+1'>"."Les deux saisies du mot de passe ne sont pas identiques"."</font></p>";
        }
    }
    else
    {
        $mdp= FALSE;
        echo "<p><font color='red' size='+1'>"."Mot de passe invalide"."</font></p>";

    }

   if(($no==true) && ($pre==true) && ($util==true) && ($mdp==true))
    {
        $rq="SELECT * FROM utilisateur WHERE nom_utilisateur='$util'";
        $result=@mysql_query($rq);
        $ligne=mysql_num_rows($result);
        if($ligne==0)
        {
          $rpl="INSERT INTO utilisateur(id_utilisateur,nom_utilisateur,prenom,nom,mot_de_passe)VALUES('','$util','$pre','$no',password('$mdp'))";
          $result=@mysql_query($rpl);
           if($result)
           {
               echo 'Merci de vous être enregistré';
               exit ();
           }
        }
        else {
            echo 'Nom utilisateur déjà utilisé';
        }
    }
    else {
        echo"<p><font color='red' size='+1'>"."Recommencez, Merci"."</font></p>";
    }

}
?>


    <fieldset>
<form action="<?php echo $_SERVER['PHP_SELF']; ?> "method="post">


    
        <label><b>Nom : </b></label>
        <input type="text" size="30" maxlength="30" name="nom" value="<?php if(isset($_POST['nom'])) {echo $_POST['nom'];} ?>" />
        &nbsp;&nbsp;&nbsp;
        <label><b>Prenom : </b></label>
        <input type="text" size="30" maxlength="30" name="prenom" value="<?php if(isset($_post['prenom'])){echo $_POST['prenom'];}?>" />
        <br/><br/>
        <label><b>Nom d'utilisateur : </b></label>
        <input type="text" size="30" maxlength="30" name="nom_utilisateur" value="<?php if(isset($_post['utilisateur'])){echo $_POST['utilisateur'];}?>" />
        <br /><br/>
        <label><b>Mot de passe</b></label>
        <input type="password" name="mot_de_passe1" size="20" maxlength="20" />
        &nbsp;&nbsp;&nbsp;
        <label><b>Confirmation du mot de passe</b></label>
        <input type="password" name="mot_de_passe2" size="20" maxlength="20" />

<br /><br/><br/>


    <div align="center">
<input type="submit" name="submit" value="Enregistrement" />
&nbsp;&nbsp;&nbsp;
<input type="reset" name="reset" value="Remise a zero"/>
</div>
</form>
    </fieldset>
mais voici la nouvelle erreur l'erreur

Code : Tout sélectionner

Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\wamp\www\B_A_ba\enregistrement.php on line 82 Call Stack # Time Memory Function Location 1 0.0010 709912 {main}( ) ..\enregistrement.php:0 2 0.0181 718872 mysql_num_rows ( ) ..\enregistrement.php:82
La ligne 82 est

Code : Tout sélectionner

$ligne=mysql_num_rows($result);
Merci

Eléphant du PHP | 101 Messages

03 avr. 2011, 19:43

et si tu remplaces
if($ligne==0)
par:
if(mysql_num_rows($result) == 0)
je ne suis pas certain de ma réponse...

ViPHP
xTG
ViPHP | 7331 Messages

03 avr. 2011, 20:05

Enlèves le @ devant le mysql_query() et il te dira comme un grand où se trouve ton erreur.

Eléphant du PHP | 81 Messages

03 avr. 2011, 23:26

bonjour

J'ai ajouté le fichier connect.php à ma page.
Parce que je ne l'avais pas ajouté.

J'ai essayé en supprimant les deux @

j'ai essayé en remplaçant $ligne par mysql_num_rows($result).

Mais j'ai toujours la même erreur et sans autre explications .

Eléphant du PHP | 101 Messages

04 avr. 2011, 00:24

la connexion à la bdd se fait correctement ?
avant de faire une requête sql on a toujours tendance à mettre
$connect = mysql_connect($host, $user, $password);
mysql_select_db($bdd, $connect) or die("Impossible de se connecter à la base de donnee $bdd");

Eléphant du PHP | 81 Messages

04 avr. 2011, 09:08

bonjour

Oui la connexion se fait correctement , j'ai bien le OR Die , et mon fichier connect me sert aussi sur une autre page sans protection.

J'ai mis var_dump() après ma requête $ligne=mysql_num_rows($result);
et le message est boolean False

Merci