Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2347 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Création de forum : problème avec l'inscription

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Création de forum : problème avec l'inscription

n°1552865
Tristou
This is where the fun begins
Posté le 03-05-2007 à 02:36:00  profilanswer
 

Bonsoir,

 

je suis en train de réaliser un forum, j'ai actuellement un problème avec la page d'inscription. En effet, après des vérifications du pseudo et de l'e-mail, après avoir protégé les données, après avoir généré le mot de passe aléatoirement, j'insère dans la base de donnée, je créé les variable de session et j'ai un message selon si cela a marché ou pas. Seul problème, au moment de valider, la seule chose que j'ai, c'est une page "blanche"

 

Voici mon code (du moins une partie) :

 
Code :
  1. //  Pour gérer le cas ?valid=inscription
  2.  else if ($confirmation == 'inscription')
  3.     {
  4.     $pseudo = $_POST['pseudo'];
  5.      $email = $_POST['email'];
  6.      $i = 0;
  7.     // Vérification de la conformité du pseudo
  8.     $nombre_pseudo = mysql_result(mysql_query("SELECT COUNT(membre_pseudo) FROM forum_membres WHERE membre_pseudo = '".mysql_real_escape_string($_POST['pseudo'])."'" )
  9.     , 0)  or die(mysql_error());
  10.     if ($nombre_pseudo != 0)
  11.      {
  12.     $erreur_pseudo1 = 'Votre pseudo est déjà utilisé par un membre';
  13.     $i++;
  14.      }
  15.     if (strlen($_POST['pseudo']) < 3 || strlen($_POST['pseudo']) > 15)
  16.      {
  17.     $erreur_pseudo2 = 'Votre pseudo fais moins de 3 ou plus de 15 caract&egrave;res';
  18.     $i++;
  19.      }
  20.   
  21.     if (!preg_match("/[^a-z0-9_ ]+/i",$pseudo))
  22.      {
  23.        $erreur_pseudo3 = 'Il y a des caract&egrave;res interdits dans ce pseudo. Seuls abcdefghijklmnopqrstuvwxyz0123456789 et _ sont auroris&eacute;s';
  24.        $i++;
  25.   }
  26.   
  27.      // Vérification de la conformité de l'e-mail
  28.     $nombre_email = mysql_result(mysql_query("SELECT COUNT(membre_email) FROM forum_membres WHERE membre_email = '".mysql_real_escape_string($_POST['email'])."'" )
  29.     , 0) or die(mysql_error());
  30.   
  31.     if ($nombre_email != 0)
  32.      {
  33.     $erreur_mail1 ='Cette adresse e-mail est d&eacute;j&agrave; utilis&eacute;e';
  34.     $i++;
  35.   }
  36.     if(!preg_match("#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#", $_POST['email']) || !empty($_POST['email']))
  37.      {
  38.     $erreur_mail2 = 'Le format d\'e-mail n\'est pas correct';
  39.               $i++;
  40.   }
  41.   
  42.     if($i == 0)
  43.      {
  44.         
  45.     //On traite les données à insérer dans la BDD
  46.     $temps = time();
  47.     $pseudo = htmlspecialchars($_POST['pseudo'], ENT_QUOTES);
  48.     $email = htmlspecialchars($_POST['email'], ENT_QUOTES);
  49.    
  50.      // On s'occupe de la génération du mot de passe
  51.     $caracteres = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
  52.     $caracteres_melange = str_shuffle($caracteres);  // mélange des caractères de la variable $caracteres
  53.     $motdepasse = stubstr($caracteres_melange, 0, 8); //selection de  8caractères
  54.     $mdp_crypte = md5($motdepasse); //hashage du mot de passe
  55.    
  56.     mysql_query ('INSERT INTO forum_membres(membre_pseudo, membre_mdp, membre_email, membre_inscrit, membre_derniere_visite)
  57.     VALUES ('.$pseudo.', '.$mdp_crypte.', '.$email.', '.$temps.', '.$temps.')');
  58.    
  59.     $_SESSION['pseudo'] = $pseudo;
  60.     $_SESSION['id'] = mysql_insert_id();
  61.     $SESSION['level'] = 1;
  62.    
  63.     echo'<div class="acces_ok"><img src="./template/images/accept.png"/>F&eacute;licitations' ,$_POST['pseudo'], ',
  64.     vous &ecirc;tes inscrit sur le forum.<br/> Notez ce mot de passe temporaire :' ,$motdepasse, '
  65.           <br/><a href="index.php" title="Aller à l\'index du forum">Retour &agrave; l\'index du forum</a>.</div>';
  66.         
  67.             }
  68.          else
  69.      {
  70.    echo '<div class="erreur_forum"><img src="./template/images/cancel.png"/> Erreur : les probl&grave;mes suivants sont survenus :<br/>' ,
  71.    $erreur_pseudo1, '<br/>' ,
  72.    $erreur_pseudo1, '<br/>' ,
  73.    $erreur_email1, '<br/>' ,
  74.    $erreur_email2, '<br/>
  75.          <a href="index.php" title="Aller à l\'index du forum">Retour &agrave; l\'index du forum</a>.</div>';
  76.   }
  77.         }
  78.    else
  79.      {   
  80.    echo '<div class="erreur_forum"><img src="./template/images/cancel.png"/> Erreur : vous ne devez pas arriver sur cette page
  81.          <br><a href="index.php" title="Aller à l\'index du forum">Retour &agrave; l\'index du forum</a>.</div>';
  82.  }


   

 

Comment puis-je régler ce problème ? Merci d'avance ;)


Message édité par Tristou le 03-05-2007 à 14:40:21
mood
Publicité
Posté le 03-05-2007 à 02:36:00  profilanswer
 

n°1552872
Shinuza
This is unexecpected
Posté le 03-05-2007 à 04:42:30  profilanswer
 

Code :
  1. if (strlen($_POST['pseudo']) < 3 || strlen($_POST['pseudo']) > 15)
  2.                 {
  3.                   $erreur_pseudo2 = 'Votre pseudo est trop grand /trop petit';
  4.                   $i++;
  5.                 }
  6.              
  7.                if (!preg_match("/[^a-z0-9_ ]+/i",$pseudo))
  8.                 {
  9.                   $erreur_pseudo3 = 'Il y a des caract&egrave;res interdits dans ce pseudo';
  10.                   $i++;
  11.                 }
 

Juste un problème d'ergonomie, ces messages d'erreurs n'aident pas l'utilisateur, tu dois rappeler les conditions qui font foirer ton test.

 

Pour le reste il manque un bout.


Message édité par Shinuza le 03-05-2007 à 04:42:41

---------------
Mains power can kill, and it will hurt the entire time you’re dying from it.
n°1552995
Tristou
This is where the fun begins
Posté le 03-05-2007 à 10:30:12  profilanswer
 

Je vais modifier cela ;)
 
Autrement, je n'ai mis la que la partie du script qui concerne le cas valid=inscription ;) (et il y a tout )

n°1553018
NewsletTux
&lt;Insérez ici votre vie /&gt;
Posté le 03-05-2007 à 11:23:08  profilanswer
 

Encore des SELECT * ... Pourquoi faire un SELECT * (ou SELECT COUNT(*)) qui rapatrie TOUT l'enregistrement alors que seul le pseudo est vérifié ?
 
Après on dit que php n'est pas sécurisé, mais ce sont les gens qui ne savent pas l'utiliser, en fait.
 
2èmement, il y a une magnifique injection SQL dans ta recherche des pseudos, encore une faille de sécurité.
 
Idem pour la vérif du mail.

n°1553116
Tristou
This is where the fun begins
Posté le 03-05-2007 à 13:33:40  profilanswer
 

Je ne me suis pas prétendu expert en PHP, c'est pour cela que je viens demander de l'aide ;)
 
Pour les deux requêtes de recherche, ceci serait-il plus optimisé ?
 

Code :
  1. mysql_query("SELECT COUNT(membre_pseudo) FROM forum_membres


 

Code :
  1. mysql_query("SELECT COUNT(membre_email) FROM forum_membres


 
Ensuite, à propos de l'injection SL, où est le problème et comment le corriger ?
 
Cela peut-il aider pour le problème de départ qui est le problème d'inscription  [:toph] ?

n°1553123
dwogsi
Défaillance cérébrale...
Posté le 03-05-2007 à 13:51:03  profilanswer
 

Si tu n'as pas les magic_quote activés c'est dangereux. Et même avec c'est peu recommandable. Imagine que comme pseudo je saisisse ' OR 1=2 -- ta requête ne renverra jamais de résultat et je pourrais donc créer des doublons à la pelle. pour éviter cela : http://fr.php.net/mysql_real_escape_string


Message édité par dwogsi le 03-05-2007 à 14:38:58

---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
n°1553140
soulmanto
Chat Noir replica
Posté le 03-05-2007 à 14:22:11  profilanswer
 

Citation :

$motdepasse = stubstr($caracteres_melange, 0, 8); //selection de  8caractères


 
je sais pas si c'est une faute de frappe dans le code que tu as mis ici, mais ça m'a tout l'air d'une erreur! ;)


Message édité par soulmanto le 03-05-2007 à 14:22:52
n°1553166
Tristou
This is where the fun begins
Posté le 03-05-2007 à 14:37:29  profilanswer
 

J'ai corrigé les requêtes, le substr et ajouté un mysql_real_escape_string() pour les deux requêtes de recherche mais j'ai toujours la page blanche :(


Message édité par Tristou le 03-05-2007 à 14:37:57
n°1553170
dwogsi
Défaillance cérébrale...
Posté le 03-05-2007 à 14:44:19  profilanswer
 

C'est quoi ce stockage des erreurs?? C'est un peu moyen limite bof...
Plutôt que d'utiliser un $i et des tonnes de variables pour tes erreurs utilise plutôt quelque chose comme ça :
Ligne 6, remplacer par :
$lesErreurs = array();
 
A chaque fois que tu veux ajouter une erreur tu fais simplement :
$lesErreurs[] = "Le texte blablabla erreur dégage tu pue";
 
Et pour l'affichage, plutôt que de faire plusieurs echo tu fais un simple :
foreach($lesErreurs as $erreur) echo $erreur,'<br />';
 
A la place du test sur le $i tu fais :
if(count($lesErreurs)==0)
 
Enfin je dis ça... C'est comme tu veux mais ça me parait bien plus logique et plus clair.
 
Pour ton problème de page blanche, tu es sûr que le problème ne vient pas du code que tu ne nous montre pas?


---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
n°1553172
Shinuza
This is unexecpected
Posté le 03-05-2007 à 14:45:39  profilanswer
 

Google-> Prepared Statements


---------------
Mains power can kill, and it will hurt the entire time you’re dying from it.
mood
Publicité
Posté le 03-05-2007 à 14:45:39  profilanswer
 

n°1553174
dwogsi
Défaillance cérébrale...
Posté le 03-05-2007 à 14:48:17  profilanswer
 

+1
mais long a expliquer/comprendre...


---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
n°1553175
Shinuza
This is unexecpected
Posté le 03-05-2007 à 14:50:09  profilanswer
 

dwogsi a écrit :

+1
mais long a expliquer/comprendre...


Gné?  :??:


---------------
Mains power can kill, and it will hurt the entire time you’re dying from it.
n°1553176
dwogsi
Défaillance cérébrale...
Posté le 03-05-2007 à 14:51:29  profilanswer
 

Ba j'le vois bien revennir avec pas mal de questions s'il part la dessus.
Donc je proposais de simples mysql_real_escape_string(). Mais je suis tout à fait d'accord, les prepared statements c'est bien mieux.


Message édité par dwogsi le 03-05-2007 à 14:56:07

---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
n°1553180
Tristou
This is where the fun begins
Posté le 03-05-2007 à 14:54:07  profilanswer
 

Je prends en compte toutes les suggestions, avec un array, ça sera peut-être plus "simple", je vais voir ça ;)

 

Voilà le début de mon code( ça gère la validation de la connexion) :

 
Code :
  1. <?php
  2. session_start();
  3. ?>
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  5. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
  6. <head>
  7.    <title>Confirmation</title>
  8.    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  9.    <link rel="stylesheet" media="screen" type="text/css" title="Design" href="./template/style.css" />
  10. </head>
  11. <body>
  12. <?php
  13.      $confirmation = $_GET['valid'];
  14.       include ('./fonctions/fonctions.php');
  15.          mysql_connect($hote, $login, $motdepasse);
  16.              mysql_select_db($base);
  17.  
  18.    // Pour gérer le cas ?valid=connexion
  19.    if($confirmation == 'connexion')
  20.      {
  21.   $pseudo = $_POST['pseudo'];
  22.   $password = $_POST['password'];
  23.  
  24.   if (empty($_POST['pseudo']) || empty($_POST['password']))
  25.         {
  26.          echo '<div class="erreur_forum"><img src="./template/images/cancel.png"/> Erreur : un des deux champs n\'est pas rempli<br>
  27.         <a href="connexion.php" title="Recommencer l\'identification">Retour au formulaire de connexion</a>.</div>';
  28.         }
  29.       else
  30.         {
  31.          if(isset($_SESSION['pseudo']))
  32.     {
  33.       echo '<div class="erreur_forum"><img src="./template/images/cancel.png"/> Erreur : vous ne pouvez acc&eacute;der cette page
  34.          <br><a href="index.php" title="Aller à l\'index du forum">Retour &agrave; l\'index du forum</a>.</div>';
  35.     }
  36.   else
  37.     {
  38.    $pseudo = htmlspecialchars($_POST['pseudo'], ENT_QUOTES);
  39.    $motdepasse = htmlspecialchars($_POST['password'], ENT_QUOTES);
  40.    $requete_connexion = mysql_query(' SELECT membre_mdp, membre_id, membre_rang FROM forum_membres WHERE membre_pseudo = "'.mysql_real_escape_string($pseudo).'" ') or die (mysql_error());
  41.       $affichage = mysql_fetch_assoc($requete_connexion);
  42.    
  43.    if($affichage['membre_mdp'] == $password)
  44.       {
  45.        $_SESSION['pseudo'] = $pseudo;
  46.                     $_SESSION['level'] = $affichage['membre_rang'];
  47.                     $_SESSION['id'] = $affichage['membre_id'];
  48.      echo'<div class="acces_ok"><img src="./template/images/accept.png"/> Bienvenue ' ,$_SESSION['pseudo'], ',
  49.       vous &ecirc;tes maintenant connect&eacute;.<br/><a href="index.php" title="Aller à l\'index du forum">Retour &agrave; l\'index du forum</a>.</div>';
  50.    }
  51.               else {
  52.                      echo '<div class="erreur_forum"><img src="./template/images/cancel.png"/> Erreur : Le pseudo et/ou le mot de passe est/sont incorrect(s).<br>
  53.               <a href="connexion.php" title="Recommencer l\'identification">Retour au formulaire de connexion</a>.</div>';
  54.                    }
  55.            }  
  56.    }
  57.  }


Message édité par Tristou le 03-05-2007 à 14:58:16
n°1553186
dwogsi
Défaillance cérébrale...
Posté le 03-05-2007 à 15:00:25  profilanswer
 

Franchement, si $_GET['valid'] a bien pour valeur inscription je vois pas trop comment tu pourrais avoir une page blanche. Tu es sûr de la valeur?


---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
n°1553204
Tristou
This is where the fun begins
Posté le 03-05-2007 à 15:11:41  profilanswer
 

C'est à dire :??:
 
Pour le foreach, j'ai procédé comme tu m'as indiqué, j'ai une parse error
 

Code :
  1. echo '<div class="erreur_forum"><img src="./template/images/cancel.png"/> Erreur : les probl&grave;mes suivants sont survenus :<br/>' ,
  2.    foreach ($erreurs as $erreur) echo $erreur, '<br/>
  3.          <a href="index.php" title="Aller à l\'index du forum">Retour &agrave; l\'index du forum</a>.</div>';


n°1553208
dwogsi
Défaillance cérébrale...
Posté le 03-05-2007 à 15:15:02  profilanswer
 

Code :
  1. echo '<div class="erreur_forum"><img src="./template/images/cancel.png"/> Erreur : les probl&grave;mes suivants sont survenus :<br/>';
  2. foreach ($erreurs as $erreur) echo $erreur, '<br/>';
  3. echo '<a href="index.php" title="Aller à l\'index du forum">Retour à l\'index du forum</a>.</div>';



---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
n°1553214
Tristou
This is where the fun begins
Posté le 03-05-2007 à 15:20:47  profilanswer
 

Ah ok, d'accord [:joce]
 
Sinon j'ai vérifié, dans la page inscription.php, j'ai bin mis confirmation.php?valid=inscription, soit la valeur du $_GET['valid']. S'il en avait été autrement, il y a le else qui affiche un message d'erreur disant que l'on ne devrait pas se trouver là.

n°1553219
dwogsi
Défaillance cérébrale...
Posté le 03-05-2007 à 15:23:15  profilanswer
 

Oui c'est aussi ce que je me disais en fait.
Bon, par page blanche tu entends quoi? Visuellement? Si oui, y-a-t-il quelque chose dans la source de la page?
Si c'est en ligne, envois un lien.


---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
n°1553226
Tristou
This is where the fun begins
Posté le 03-05-2007 à 15:27:54  profilanswer
 

Bah y'a vraiment rien, juste le fond de page (qui est coloré mais OSEF :o)

 

J'ai ça dans la source

 
Code :
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
  3. <head>
  4.    <title>Confirmation</title>
  5.    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  6.    <link rel="stylesheet" media="screen" type="text/css" title="Design" href="./template/style.css" />
  7. </head>
  8. <body>
  9. <!-- Fonctions.php
  10. Regroupe les différentes fonctions qui permetront de faire fonctionner le forum -->
 

Mes balises body et html sont bien fermées dans mon code, j'ai vérifié.

 

Par contre j'ai rien mis en ligne .

 

EDIT : et le commentaire vient du fichier où j'ai mis mes fonctions (identifiants de connexion, calcul du temps de génération de la page) qui est inclus dans ce fichier-ci


Message édité par Tristou le 03-05-2007 à 15:30:41
n°1555118
Tristou
This is where the fun begins
Posté le 04-05-2007 à 00:03:28  profilanswer
 

Bon, on a trouvé la solution. Ca pas été simple mais on a trouvé comment corriger le problème. Si ça intéresse quelqu'un de savoir, j epeux mettre le code final  :jap:  

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Création de forum : problème avec l'inscription

 

Sujets relatifs
Problème de bordures en CSS?[JAR] Probleme avec la creation d'un .jar
Problème avec l'insertion d'une dateProbleme affichage image dans une applet
problème de requete en fonction de l'url de la page[C++] Problème de redirections des I/O standards
Probleme Flux RSSProbleme avec une page PHP
Problème avec la fonction avg en double jointure 
Plus de sujets relatifs à : Création de forum : problème avec l'inscription


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR