Mes données ne s'inscrivent pas dans ma BDD :'(

Mes données ne s'inscrivent pas dans ma BDD :'( - PHP - Programmation

Marsh Posté le 20-10-2009 à 21:01:26    

Bonjour :D
voilà, je vous présente mon code qui est presque fonctionnel. Les erreurs s'affichent à bon escient, et lorsque l'inscription est OK, le mail est envoyé. Le soucis c'est que il me dit que le membre n'est pas dans la table donc le script a une défaillance quelque part.
 

Spoiler :

<?php include("../includes/head1.php" ); ?>
 
 
<body>
 
<!-- wrap starts here -->
<div id="wrap">
   
 <?php include("../includes/menu2.php" ); ?>    
   
 <!-- content-wrap starts here -->
 <div id="content-wrap">
   
  <div id="main">    
     
      <?php //texte début  
   ?>
   
  <?php
 
if(isset($_SESSION['log']['pseudo']) AND !empty($_SESSION['log']['pseudo'])){
 
?><p class="erreur2">Vous êtes déjà inscrit sur Énigmatique</p>
 
 <?php
}
else
{
?><?php
/* Vérifie que les inscriptions sont autorisées */
if(STATUSINSC == 1){
 
 if(isset($_POST['email']) AND isset($_POST['pseudo']) AND isset($_POST['password']) AND isset($_POST['password2']) AND isset($_POST['pseudo'])){
 
  /* Vérifie que les variables ne sont pas vide */
  if(!empty($_POST['email']) AND !empty($_POST['pseudo']) AND !empty($_POST['password']) AND !empty($_POST['password2'])){
 
   /* Vérifie que l'email est valide */
   if(isMail($_POST['email'])){
   
    $sql = 'SELECT id, email, pseudo, password FROM _users WHERE pseudo="'. $_POST['pseudo'] .'"';
    $req = $connexion->query($sql);
    $req->setFetchMode(PDO::FETCH_OBJ);
    $res = $req->rowCount();
    $requetes++; /* Ajouter +1 à la variable requetes */
     
    /* Vérifie si le pseudo est déjà utilisé */
    if(($res) == 0){
     
     /* Vérifie que le mot de passe contient au moins 8 caractères */
     if(strlen($_POST['password']) >= NBCARSMIN){
     
      /* Vérifie si les deux mots de passes sont pareils */
      if($_POST['password'] == $_POST['password2']){
       
       /* Vérifie que le pseudo contient au moins 2 caractères */
       if(strlen($_POST['pseudo']) >= NBCARSMINP){
       
        /* Vérifie que le pseudo est valide (sans caractères spéciaux sauf - et _ ) */
        if(preg_match("#^[a-zA-Z0-9-_]+$#", $_POST['pseudo'])){
         
         /* Tout est bon, ajout dans la base de données */
         
         /* Déclaration et traitement */
         $email = mysql_real_escape_string(htmlentities(addslashes($_POST['email'])));
         $pseudo = mysql_real_escape_string(htmlentities(addslashes($_POST['pseudo'])));
         $password = mysql_real_escape_string(sha1($_POST['password']));
         /* dateinscription = NOW() */
         $prenom = mysql_real_escape_string(ucfirst($_POST['prenom']));
         $nom = mysql_real_escape_string(ucfirst($_POST['nom']));
         $datenaissance = ''.$_POST['annee_naissance'].'-'.$_POST['mois_naissance'].'-'.$_POST['jour_naissance'].'';
         $pays = mysql_real_escape_string(ucfirst($_POST['pays']));
         $ville = mysql_real_escape_string(ucfirst($_POST['ville']));
         $typedemembre = 'Membre'; // Type par défaut
         $points = 0;
         /* Compte activé = 0 */
         $codeactivation = chaineAleatoire(18);
 
 
         
         /* Insertion dans la base de données */
         $sql = 'INSERT INTO _users VALUES("", "'. $email .'", "'. $pseudo .'", "'. $password .'", NOW(), "'. $prenom .'", "'. $nom .'", "'. $datenaissance .'", "'. $pays .'", "'. $ville .'", "'. $typedemembre .'", "'. $codeactivation .'", "'. $points .'" )';
         $connexion->exec($sql);
         $requetes++; /* Ajouter +1 à la variable requetes */
         
         $contenumessage = '
         Bonjour,
         
         vous venez de vous inscrire sur Enigmatique, cependant votre compte n\'est pour le moment pas actif.
         Pour l\'activer, vous devez cliquer sur ce lien, si ce lien ne fonctionne pas, essayez de faire un copier/coller dans la barre d\'adresse de votre navigateur.
         En cas de probleme d\'activation, veuillez contacter l\'administrateur.
         
         Votre lien : '. CHEMINROOT .'activation/?&pseudo='. $pseudo .'&ac='. $codeactivation .'
         
         A bientôt sur Enigmatique, et bonne visite.
         
 
         ';
         
         echo '<p class="ok">Votre inscription s\'est bien effectuée. Vous allez recevoir un email pour activer votre compte</p>';
         
         mail($email, "Activation de votre compte", $contenumessage);
         
         
         
        }
        else{
         
         echo '<p class="erreur2">Votre pseudo est incorrecte, il ne doit être composé que de caractères alphanumériques ou des symboles suivants : - _</p>';
         
        }
       
       }
       else{
       
        echo '<p class="erreur2">Votre pseudo doit être composé d\'au moins 2 caractères</p>';
       
       }
       
      }
      else{
       
       echo '<p class="erreur2">Les deux mots de passes sont différents</p>';
       
      }
     
     }
     else{
     
      echo '<p class="erreur2">Votre mot de passe doit être composé d\'au moins 8 caractères</p>';
     
     }
     
    }
    else{
     
     echo '<p class="erreur2">Le pseudo <em>'. $_POST['pseudo'] .'</em> est déjà utilisé par quelqu\'un d\'autre</p>';
     
    }
   
   }
   else{
   
    echo '<p class="erreur2">Le format de votre email est invalide</p>';
   
   }
 
  }
  else{
 
   echo '<p class="erreur2">Veuillez remplir tous les champs obligatoires</p>';
 
  }
   
 }
 
}
else{
 
 echo '<p class="erreur2">Les inscriptions sont actuellement fermées !</p>';
 
}
 
?>
 
 
 
<form method="post" action="">
 
 <p><em>* Champs obligatoires</em><br /><br /><br />
 
 <label for="email">Votre email * :</label> <input type="text" name="email" id="email" size="28" /><span class="erreur"></span><br /><br />
 <label for="pseudo">Votre pseudo * :</label> <input type="text" name="pseudo" id="pseudo" size="28" /><span class="erreur"></span><br /><br />
 <label for="password">Mot de passe * : </label> <input type="password" name="password" id="password" size="28" /><br /><br />
 <label for="password2">Confirmation * :</label> <input type="password" name="password2" id="password2" size="28" /><span class="erreur"></span><br /><br /><br />
 
 <label for="prenom">Votre prénom :</label> <input type="text" name="prenom" id="prenom" size="28" /><br /><br />
 <label for="nom">Votre nom :</label> <input type="text" name="nom" id="nom" size="28" /><br /><br />
 
 <label for="datenaissance">Naissance :</label>
 <select name="jour_naissance">
  <option value="01">1</option>
  <option value="02">2</option>
  <option value="03">3</option>
  <option value="04">4</option>
  <option value="05">5</option>
  <option value="06">6</option>
  <option value="07">7</option>
  <option value="08">8</option>
  <option value="09">9</option>
  <option value="10">10</option>
  <option value="11">11</option>
  <option value="12">12</option>
  <option value="13">13</option>
  <option value="14">14</option>
  <option value="15">15</option>
  <option value="16">16</option>
  <option value="17">17</option>
  <option value="18">18</option>
  <option value="19">19</option>
  <option value="20">20</option>
  <option value="21">21</option>
  <option value="22">22</option>
  <option value="23">23</option>
  <option value="24">24</option>
  <option value="25">25</option>
  <option value="26">26</option>
  <option value="27">27</option>
  <option value="28">28</option>
  <option value="28">29</option>
  <option value="30">30</option>
  <option value="31">31</option>
 </select>
 
 <select name="mois_naissance">
  <option value="01">Janvier</option>
  <option value="02">Février</option>
  <option value="03">Mars</option>
  <option value="04">Avril</option>
  <option value="05">Mai</option>
  <option value="06">Juin</option>
  <option value="07">Juillet</option>
  <option value="08">Août</option>
  <option value="09">Septembre</option>
  <option value="10">Octobre</option>
  <option value="11">Novembre</option>
  <option value="12">Décembre</option>
 </select>
 
 <select name="annee_naissance">
  <?php
   
   $date = date("Y" )-101;
   while($date < date("Y" )){
   
    $date++;
    echo '<option value="'. $date .'">'. $date .'</option>';
   
   }
   
  ?>
 </select>
 <br /><br />
 
 <label for="pays">Pays :</label> <input type="text" name="pays" id="pays" size="28" /><br /><br />
 <label for="ville">Ville :</label> <input type="text" name="ville" id="ville" size="28" /><br /><br />
 
 <?php  
 
 if(STATUSINSC == 1){
 
 echo '<input type="submit" id="submit" value="S\'inscrire" />';
 
 }
 
 ?>
 
 </p>
 
</form>
 <?php }  
//texte fin ?></div>
   
   <?php  
include("../includes/sidebar1.php" );
?>
   
     
 <!-- content-wrap ends here -->  
 </div>
     
 <!--footer starts here-->
<?php include("../includes/foot.php" ); ?>
 
<!-- wrap ends here -->
</div>
 
</body>
</html>


 
merci de votre aide :)

Reply

Marsh Posté le 20-10-2009 à 21:01:26   

Reply

Marsh Posté le 20-10-2009 à 23:25:35    

et dans les logs Apache tu n'as rien ?
 
ceci dit, même s'il y a de l'objet derrière, je trouve bizarre de donner "exec" pour nom à une méthode ... :/


---------------
NewsletTux - outil de mailing list en PHP MySQL
Reply

Marsh Posté le 21-10-2009 à 07:42:29    

1) Les chaines de caractères dans une requetes sont délimitées par des simples quotes, pas des doubles.
2) On peut voir ton objet connexion? [:pingouino]


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 21-10-2009 à 09:43:56    

ça serait bien de récupérer le code d'erreur de l'exécution de ta requête sql. :/
et faire commencer le nom d'une table par un _, je me demande si c'est une bonne idée...


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 21-10-2009 à 13:34:39    

Non mais en fait ça marchait il y a encore 3 jours. Là le truc c'est que j'ai supprimé ma case  : Avatar.  

Reply

Marsh Posté le 22-10-2009 à 13:21:48    

Bonjour,
 
Tu as bien regardé comment tu enregistres tes valeurs ?  :heink:  
 

Code :
  1. $email = mysql_real_escape_string(htmlentities(addslashes($_POST['email'])));
  2.          $pseudo = mysql_real_escape_string(htmlentities(addslashes($_POST['pseudo'])));
  3.          $password = mysql_real_escape_string(sha1($_POST['password']));
  4.          /* dateinscription = NOW() */
  5.          $prenom = mysql_real_escape_string(ucfirst($_POST['prenom']));
  6.          $nom = mysql_real_escape_string(ucfirst($_POST['nom']));
  7.          $datenaissance = ''.$_POST['annee_naissance'].'-'.$_POST['mois_naissance'].'-'.$_POST['jour_naissance'].'';
  8.          $pays = mysql_real_escape_string(ucfirst($_POST['pays']));
  9.          $ville = mysql_real_escape_string(ucfirst($_POST['ville']));
  10.          $typedemembre = 'Membre'; // Type par défaut
  11.          $points = 0;
  12.          /* Compte activé = 0 */
  13.          $codeactivation = chaineAleatoire(18);


 
htmlentities + addslashes qui n'ont rien à faire en ce lieu de ton code.
un mysql_real_escape_string sur un sha1 ? :pt1cable:  
Des ucfirst() on ne peut plus douteux, serait mieux d'utiliser une casse insensible pour les colonnes concernées de ta table.
A moins d'avoir mal lu ton code,n je ne vois rien qui controle la date de naissance => injection sql.

Reply

Marsh Posté le 22-10-2009 à 14:15:06    

les ucfirst, je pense que c'est pour le réaffichage des données dans l'IHM.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed