Problème enregistrement mbre

Anthony
Invité n'ayant pas de compte PHPfrance

18 janv. 2006, 14:20

Suite à vos conseils j'ai mis de la logique dans le code :
<?php 
     $dbhost="localhost"; 
     $dblogin="root"; 
     $dbpassword=""; 
     $dbname="mysql";  

     if ($rempli == 1) {
       mysql_connect($dbhost,$dblogin,$dbpassword);mysql_selectdb($dbname); 
       mysql_select_db("users");

       if (empty($login) || empty($password) || empty($password2))     
         $message = 'Vous devez remplir tous les champs'; 
       if ($password != $password2) 
         $message ='Votre mot de passe ne concorde pas'; 
       if (strlen ( $password ) < 4) 
         $message = 'Votre mot de passe doit comporter au moin 4 caractères'; 
       if (strlen ($login) < 4) 
         $message = 'Votre login doit comporter au moin 4 caractères.'; 
       if (getRow($login)) 
         $message='Le nom de connexion $login existe deja'; 
       mysql_close();
     } 
     ?> 
       
<html> 
<body> 
<!-- debut du document --> 

<form action="valide.php"> 
Identifiant: <input type=text name=login value "" maxlenght=15 ><br> 
Nom: <input type=text name=nom value "" maxlenght=15><br> 
Prénom: <input type=text name=prenom value "" maxlenght=15><br> 
Adresse e-mail: <input type=text name=adresse><br> 
Mot de passe: <input type=password name=password value "" maxlenght=15><br> 
Confirmation Mot de passe: <input type=password name=password2 value "" maxlenght=15><br> 
<input type=submit value="Enregistrer"> 
<input type=hidden name=rempli value=1>
</form> 

<!-- Fin du document --> 
</body> 
</html> 
Mais ça ne marche toujours pas ... il me dit que je n'ai pas définis $rempli (ligne 7) je doit le définir comment ?

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

18 janv. 2006, 19:17

dis tu n'as pas du regarder beaucoup le script que j'ai proposé... je n'y retrouve aucune des modifications apportées.

dans ton code tu as:
if ($rempli == 1)
et tu sais que l'erreur vient de cette variable il faut donc l'iitialiser... comment en lui affectant une valeur par défaut et qui en prend une autre (valeur) si le formulaire est remplis.
dans le script proposé il y a cette ligne qui est equivalente:
if (isset($_POST['valider']) // si le formulaire est validé 
ensuite il faut aussi récupérer les autres champs du formulaire ce qui est fait par:
 //récupération des variables POST
    $login     = isset($_POST['login'])     ? $_POST['login']     : "" ;
    $password  = isset($_POST['password'])  ? $_POST['password']  : "" ;
    $password2 = isset($_POST['password2']) ? $_POST['password2'] : "" ; 
ensuite la construction du message d'erreur le cas échéant, en initialisant le message a vide:
$message="";
et concaténer les différents messages, qui est fait avec ".="
$message .= 'Vous devez remplir tous les champs <br />';
Ensuite n'exécuter le traitement du script que s'il ny a pas de message d'erreur sinon afficher ce message:
if ( $message == "" ) // si pas d'erreur
        {                                mysql_connect($dbhost,$dblogin,$dbpassword);mysql_selectdb($dbname);
         mysql_select_db("users");    
                     //traitement du formulaire
                 mysql_close();         
        }
        else
            echo $message;   
Apres j'avais aussi corrigé les champs du formulaire avec un = apres l'attribut "value":

tu peux meme affecter une valeur par défaut au champs si le formulaire est validé mais avec erreur alors on retombe sur le formulaire avec les champs préremplis:
Identifiant: <input type="text" name="login" value="<? echo $login; ?>" maxlenght=15 ><br />

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 101 Messages

18 janv. 2006, 20:52

Hey Truc tu peux me dire si on est obligé d'initialiser le message d'erreur à vide et ensuite concaténer ???

je suis en train de dévolopper mon espace membre moi aussi mais ça je ne l'ai pas fait : |
ha oui aussi, moi je travaille uniquement avec mes variables en $_POST['login'] .... c'est pas important de créer des variables $login $pass etc si ?

merci de m'éclaicir : x

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

18 janv. 2006, 21:59

Hey Truc tu peux me dire si on est obligé d'initialiser le message d'erreur à vide et ensuite concaténer ???
Oui on est obligé d'initiamliser dans ce cas précis. En effet les différents messages ne vont pas etre affichés a tous les coups suivant les erreurs donc on concatène un nouveau message à celui qui existait déjà avant. La 1ère ligne qui fait appel à la variable $message est:
$message .= 'Vous devez remplir tous les champs <br />';
dans ce cas on concatène le message "'Vous devez .." au contenu d'avant donc "" (rien). Si on n'initialise pas cette variable il y aura un message d'erreur.
ha oui aussi, moi je travaille uniquement avec mes variables en $_POST['login'] .... c'est pas important de créer des variables $login $pass etc si ?
non, il n'y a pas d'impact direct sur le comportement du script. mais ça permet de ne pas se balader avec des variables sous forme de tableau $_POST[''] c'est donc plus court. :wink:

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Anthony
Invité n'ayant pas de compte PHPfrance

18 janv. 2006, 22:11

J'ai mis cela :

mais tjs une erreur : Parse error: parse error in c:\program files\easyphp1-8\www\fofo.php on line 16


<html> 
<body> 

<?php 
        //récupération des variables POST 
    $login     = isset($_POST['login'])     ? $_POST['login']     : "" ; 
    $password  = isset($_POST['password'])  ? $_POST['password']  : "" ; 
    $password2 = isset($_POST['password2']) ? $_POST['password2'] : "" ; 
     
     $dbhost="localhost"; 
     $dblogin="root"; 
     $dbpassword=""; 
     $dbname="mysql"; 
     
    if (isset($_POST['valider']) // si le formulaire est validé 
    {      
         
        $message=""; 
         
        if ( empty( $login ) || empty( $password ) || empty( $password2 ) )       
            $message .= 'Vous devez remplir tous les champs <br />'; 
         
        if ($password != $password2 )     
            $message .='Votre mot de passe ne concordent pas <br />'; 
         
        if ( strlen ( $password ) < 4 )               
            $message .= 'Votre mot de passe doit comporter au moin 4 caractères <br />'; 
                   
        if ( strlen ( $login ) < 4 )               
            $message .= 'Votre login doit comporter au moin 4 caractères. <br />'; 
                   
        if ( geRow($login))               
            $message .='Le nom de connexion '.$login.' existe déjà <br />'; 
                   
        if ( $message == "" ) // si pas d'erreur 
        {                                mysql_connect($dbhost,$dblogin,$dbpassword);mysql_selectdb($dbname); 
         mysql_select_db("users");     

                     //traitement du formulaire 

                 mysql_close();          
        } 
        else 
            echo $message;         
         
    }         
       
       
     ?> 
       

<!-- début du document --> 
<form action="valide.php" method="POST"> 
Identifiant: <input type="text" name="login" value="" maxlenght=15 ><br /> 
Nom: <input type="text" name="nom" value="" maxlenght=15><br /> 
Prénom: <input type="text" name="prenom" value="" maxlenght=15><br /> 
Adresse e-mail: <input type="text" name="adresse"><br /> 
Mot de passe: <input type="password" name="password" value="" maxlenght=15><br /> 
Confirmation Mot de passe: <input type="password" name="password2" value="" maxlenght=15><br /> 
<input type="submit" value="Enregistrer" name="valider"> 
</form> 
<!-- Fin du document --> 
</body> 
</html>

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

18 janv. 2006, 22:41

J'ai mis cela :
:lol: as tu compris le fonctionnement ? ça ne sert à rien de copier/coller un code si tu n'as pas compris queqlue chose, je t'expliquerai le cas échéant :wink:

pour l'erreur,comment débugger un "parse error":

La cause (le plus souvent):
. un point virgule manquant
. une parenthèse manquante

il n'y a pas mille possibilitées.

La ligne est aussi donnée, ici 16, le plus souvent l'erreur se situe juste au dessus de la ligne donnée dans le message (normal l'accolade ou point virgule peut se placer apres une instruction meme apres un saut de ligne donc, le signe manquant est recherché a la ligne du dessous).

Donc je reprend:
"parse error" => manque soit ";" soit ")"
ligne 16=> regarde la ligne au dessus (15)

je ne donne pas l'erreur (meme si c'est moi qui l'ai faite dans le code initial :wink: ) tu vas trouvé par toi meme et ce sera d'autant plus valorisant :wink:

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Mammouth du PHP | 1511 Messages

18 janv. 2006, 22:59

Pfiou, j'en pouvais plus de te voir ne pas te rendre a l'evidence qu'il manquait des parentheses...
<html>
<body>
<?php
//récupération des variables POST
$login     = isset($_POST['login'])     ? $_POST['login']     : "" ;
$password  = isset($_POST['password'])  ? $_POST['password']  : "" ;
$password2 = isset($_POST['password2']) ? $_POST['password2'] : "" ; 
$dbhost="localhost";
$dblogin="root";
$dbpassword="";
$dbname="mysql";  
if(isset($_POST['valider']))
	{
	if(empty($login) || empty($password) || empty($password2))
	{      
	$message = 'Vous devez remplir tous les champs <br />';
	echo $message;
	exit;
	}
	elseif($password != $password2 )
	{
	$message ='Votre mot de passe ne concordent pas <br />';
	echo $message;
	exit;
	}
	elseif(strlen($password) < 4 )
	{
	$message = 'Votre mot de passe doit comporter au moin 4 caractères <br />';
	echo $message;
	exit;
	}
	elseif(strlen($login) < 4 )
	{
	$message = 'Votre login doit comporter au moin 4 caractères. <br />';
	echo $message;
	exit;
	}
	elseif(geRow($login))
	{
	$message ='Le nom de connexion '.$login.' existe déjà <br />';
	echo $message;
	exit;
	}
	elseif(empty($message)) // si pas d'erreur
	{
	mysql_connect($dbhost, $dblogin, $dbpassword);
	mysql_select_db($dbname);
	mysql_close();          
	}
	else
	echo 'impossible de traiter le formulaire';
	exit;        
}
else
{
?>
<!-- début du document -->
<form action="valide.php" method="POST">
Identifiant: <input type="text" name="login" value="" maxlenght=15 ><br />
Nom: <input type="text" name="nom" value="" maxlenght=15><br />
Prénom: <input type="text" name="prenom" value="" maxlenght=15><br />
Adresse e-mail: <input type="text" name="adresse"><br />
Mot de passe: <input type="password" name="password" value="" maxlenght=15><br />
Confirmation Mot de passe: <input type="password" name="password2" value="" maxlenght=15><br />
<input type="submit" value="Enregistrer" name="valider">
</form>
<!-- Fin du document -->
<?php
}
?>
</body>
</html>
J'espere que les admins ne m'en voudront pas d'avoir craqué :oops:
@+

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

18 janv. 2006, 23:10

J'espere que les admins ne m'en voudront pas d'avoir craqué :oops:
@+
Peut être pas eux mais MOI oui :evil: :evil:

Il est toujours plus important de trouver son erreur soie même pour ne plus les refaire !!

en passant, évite donc de mettre des exit() un peu partout dans le code, c'est pas propre :wink:
de plus en cas d'erreur avec cette proposition comment fera l'utilisateur pour faire les changements ? puisqu'il n'y aura plus rien d'affiché à par le message :wink:

aller c'est mi-grave :x

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 101 Messages

19 janv. 2006, 15:57

quelqu'un pourrait m'expliquer la fonction geRow ?
google il veut pas être mon ami aujourd'hui : |

et dans son bout de code ça marche la vérification du login ? jme dis que pour vérifier faut être connecté à la base sql et comparer alors que là il teste le champ login et il se connecte à sa base après : / :?:

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

19 janv. 2006, 18:23

quelqu'un pourrait m'expliquer la fonction geRow ?
google il veut pas être mon ami aujourd'hui : |
je dirais que tu auras du mal à la trouver cette fonction :wink:
Tu fais appel à une fonction getRow() mais la fonction est absente du fichier et tu n'as aucun include;
en ce qui concerne la fonction geRow() il faut effectivement l'ajouter au reste du code.
c'est une fonction maison, sans plus d'info du posteur pas de réponse :wink:

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 101 Messages

19 janv. 2006, 18:44

aaaaaaaah oui j'avais pas capté : D : )


comme quoi c'est vrai ce qu'on dit.. partir de rien c'est mieux au moins on comprend tout.. en plus on s'appercoit que le php c'est vraiment intéressant...
par contre c'est vachement long et fastidieux de le créer soit même : O !
pile poil 10 jours que je développe le mien et j'ai même pas fini le stade de l'inscription encore ...

moi jlui conseille pour son formulaire d'utiliser les champs du type:

Code : Tout sélectionner

<input type="text" name="nom" id="nom" value="<?php if (isset($_POST['nom'])) echo stripslashes(htmlentities(trim($_POST['nom']))); ?>" >
c'est plus sécurisé il me semble