Valeurs ne rentrent pas dans la BDD [Résolu]

Matancy 677 Messages postés dimanche 14 juin 2015Date d'inscription 18 septembre 2017 Dernière intervention - 9 juil. 2017 à 18:19 - Dernière réponse : jordane45 19544 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 5 janvier 2018 Dernière intervention
- 10 juil. 2017 à 11:26
Bonjour tout le monde,

Le système d'inscription que j'ai créer doit envoyer 3 valeurs à la base de donnée.
Quand je les rentres toutes sans erreur, le programme m’indique bien que le compte à été crée, et qu'il n'y a pas d'erreur.
Je n'ai également pas d'erreur PHP ou autre.

Par contre, quand je vais dans PhpMyAdmin, je réactualise, mais aucune valeur n'apparaît dans le tableau.

Informations :
- Ma base de données se nomme : espace-membre
- Le tableau se nomme : membres
- L'IP du serveur ou est hébergé mes données est : 192.168.1.77
- L'identifiant de la bdd est : root
- Il n'y a pas de mot de passe

Le code est :
<?php

$bdd = new PDO('mysql:host=192.168.1.77;mysqldbname=espace-membre', 'root', '');

if(isset($_POST['Inscription']))
{
if(!empty($_POST['pseudo']) AND !empty($_POST['mail']) AND !empty($_POST['mail2']) AND !empty($_POST['mdp']) AND !empty($_POST['mdp2']))
{
$pseudo = htmlspecialchars($_POST['pseudo']);
$mail = htmlspecialchars($_POST['mail']);
$mail2 = htmlspecialchars($_POST['mail']);
$mdp = sha1($_POST['mdp']);
$mdp2 = sha1($_POST['mdp']);

$pseudolength = strlen($pseudo);
if($pseudolength <= 255)
{
if($mail == $mail2)
{
if($mdp == $mdp2)
{
$insertmbr = $bdd->prepare("INSERT INTO membes(pseudo, mail, motdepasse) VALUES($pseudo, $mail, $mdp)");
$insertmbr->execute(array($peudo, $mail, $mdp));
$erreur = "Votre compte à bien été créer";
}
else
{
$erreur = "Vos mots de passe ne correspondent pas";
}
}
else
{
$erreur = "Vos adresses mails ne correspondent pas !!";
}
}
else
{
$erreur = "Votre pseudo ne doit pas dépasser 255 caractères !!";
}
}
else
{
$erreur = "Tous les champs doivent êtres complétés";
}
}

?>

<!DOCTYPE html>
<html>
<head>
<title>Inscription - TLW</title>
<link rel="stylesheet" href="/css/style.css" type="text/css"/>
<meta charset="utf-8" />
<meta name="language" content="fr">
<meta name="description" content="Page d'inscription à l'espace membre. TLW est une création CPM Tech.">
<meta name="revisit after" content="2 days">
</head>
<body bgcolor="#EEE">
<center>
<br />
<br />
<?php include'../php/menu.php' ?>
</center>
<br />
<br />
<div style="width: 100%; height: auto; background-color: #AAA">
<center>
<img src="/img/banniere.png" style="width: 98%; height: auto; margin-top: 10px; margin-bottom: 10px">
</center>
</div>
<center>
<u>
<h1>Publicité</h1>
</u>
</center>
<div style="max-width: 773px; height: auto; background-color: #FFFFFF; margin: auto; box-shadow: 5px 5px 0px #AAA; font-size: 25px;">
<img src="/img/pubimage.php" alt="image aleatoire" />
</div>
<br />
<br />
<div align="center">
<center>
<h1><u>Inscription</u></h1>
</center><br /><br /><br />

<form method="POST" action="">
<table>

<td align="right">
<label>Pseudo :</label>
</td>
<td>
<input type="text" name="pseudo" placeholder="Votre pseudo" id="pseudo">
</td></tr>

<td align="right">
<label>Mail :</label>
</td>
<td>
<input type="email" name="mail" placeholder="Votre adresse mail" id="mail">
</td></tr>

<td align="right">
<label>Confirmation Mail :</label>
</td>
<td>
<input type="email" name="mail2" placeholder="Confirmez votre adresse mail" id="mail2">
</td></tr>

<td align="right">
<label>Mot de passe :</label>
</td>
<td>
<input type="password" name="mdp" placeholder="Entrez votre mot de passe" id="mdp">
</td></tr>

<td align="right">
<label>Confirmation Mot de passe :</label>
</td>
<td>
<input type="password" name="mdp2" placeholder="Confirmez votre mot de passe" id="mdp2">
</td></tr>

</table>
<br />
<input type="submit" name="Inscription" value="Je m'inscris">

</form><br />
<?php
if(isset($erreur))
{
echo '<font color="red">'.$erreur."</font>";
}
?>

<center><br /><br />
Vous avez déjà un compte ? <a href="connexion.php" rel="nofollow noopener noreferrer" target="_blank">Connectez-vous</a>
</center>
<br />
<br />
</div>
<footer>
<?php include('../php/footer.php') ?>
</footer>
</body>
</html>


J'attends vos propositions avec impatience.
Si il manque des informations, n'hésitez pas à les demander.

Matancy
Afficher la suite 

23 réponses

Répondre au sujet
jordane45 19544 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 5 janvier 2018 Dernière intervention - Modifié par jordane45 le 10/07/2017 à 11:15
+3
Utile
2
Voici ton code corrigé avec la gestion des erreurs PDO
<?php
//Affichage des erreurs PHP
error_reporting(E_ALL);
ini_set('display-errors','on');

//connexion à la bdd
try{
  $bdd =new PDO('mysql:host=localhost; dbname=espace-membre; charset=utf8', 'root', '');
  // Activation des erreurs PDO
   $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  // mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH
   $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
} catch(PDOException $e) {
    die('Erreur : ' . $e->getMessage());
}


//récupération propre des variables AVANT de les utiliser
$pseudo = !empty($_POST['pseudo']) ? $_POST['pseudo'] : NULL;
$mail = !empty($_POST['mail']) ? $_POST['mail'] : NULL;
$mail2 = !empty($_POST['mail2']) ? $_POST['mail2'] : NULL;
$mdp = !empty($_POST['mdp']) ? $_POST['mdp'] : NULL;
$mdp2 = !empty($_POST['mdp2']) ? $_POST['mdp2'] : NULL;


//traitement du submit
if(isset($_POST['Inscription'])){
 if($pseudo && $mail && $mail2 && $mdp && $mdp2){


  $pseudolength = strlen($pseudo);
  if($pseudolength <= 255) {
   if($mail == $mail2) {
    if($mdp == $mdp2) {
          //préparation de la requête et des variables
           $sql = "INSERT INTO membres(pseudo, mail, motdepasse) VALUES(?, ?, ?)";
           $datas = array($pseudo, $mail, $mdp);

          //Execution de la requete
          try{
            $requete = $bdd -> prepare($sql) ;
            $requete->execute($datas) ;
          }catch(Exception $e){
            // en cas d'erreur :
            $erreur = " Erreur dans la requete ! ".$e->getMessage();
          }
     
    } else {
      $erreur = "Vos mots de passe ne correspondent pas";
    }
   } else {
     $erreur = "Vos adresses mails ne correspondent pas !!";
   }
  } else {
    $erreur = "Votre pseudo ne doit pas dépasser 255 caractères !!";
  }
 } else {
   $erreur = "Tous les champs doivent êtres complétés";
 }
}

?>

<!DOCTYPE html>
<html>
 <head>
  <title>Inscription - TLW</title>
  <link rel="stylesheet" href="/css/style.css" type="text/css"/>
  <meta charset="utf-8" />
  <meta name="language" content="fr">
  <meta name="description" content="Page d'inscription à l'espace membre. TLW est une création CPM Tech.">
  <meta name="revisit after" content="2 days">
 </head>
 <body bgcolor="#EEE">
  <center>
   <br />
   <br />
   <?php include'../php/menu.php' ?>
  </center>
  <br />
  <br />
  <div style="width: 100%; height: auto; background-color: #AAA">
   <center>
    <img src="/img/banniere.png" style="width: 98%; height: auto; margin-top: 10px; margin-bottom: 10px">
   </center>
  </div>
  <center>
   <u>
    <h1>Publicité</h1>
   </u>
  </center>
  <div style="max-width: 773px; height: auto; background-color: #FFFFFF; margin: auto; box-shadow: 5px 5px 0px #AAA; font-size: 25px;">
   <img src="/img/pubimage.php" alt="image aleatoire" />
  </div>
  <br />
  <br />
  <div align="center">
   <center>
    <h1><u>Inscription</u></h1>
   </center><br /><br /><br />

   <form method="POST" action="">
    <table>
     
     <td align="right">
      <label>Pseudo :</label>
     </td>
     <td>
      <input type="text" name="pseudo" placeholder="Votre pseudo" id="pseudo">
     </td></tr>
     
     <td align="right">
      <label>Mail :</label>
     </td>
     <td>
      <input type="email" name="mail" placeholder="Votre adresse mail" id="mail">
     </td></tr>
     
     <td align="right">
      <label>Confirmation Mail :</label>
     </td>
     <td>
      <input type="email" name="mail2" placeholder="Confirmez votre adresse mail" id="mail2">
     </td></tr>

     <td align="right">
      <label>Mot de passe :</label>
     </td>
     <td>
      <input type="password" name="mdp" placeholder="Entrez votre mot de passe" id="mdp">
     </td></tr>

     <td align="right">
      <label>Confirmation Mot de passe :</label>
     </td>
     <td>
      <input type="password" name="mdp2" placeholder="Confirmez votre mot de passe" id="mdp2">
     </td></tr>

    </table>
    <br />
    <input type="submit" name="Inscription" value="Je m'inscris">

   </form><br />
   <?php 
   if(isset($erreur))
   {
    echo '<font color="red">'.$erreur."</font>";
   }
   ?>
  
  <center><br /><br />
   Vous avez déjà un compte ? <a href="connexion.php" rel="nofollow noopener noreferrer" target="_blank">Connectez-vous</a>
  </center>
  <br />
  <br />
 </div>
 <footer>
  <?php include('../php/footer.php') ?>
 </footer>
</body>
</html>


NB : Htmlspecialchar ne s'utilise qu'à l'affichage .... en aucun cas pour l'insertion en BDD !

NB² : Il est préférable d'écrire les IF/ELSE en suivant la norme PSR http://www.php-fig.org/psr/psr-2/#if-elseif-else

NB3 : On récupère PROPREMENT les variables avant de les utiliser (pour cela on se sert de l'écriture ternaire (sorte de if/else ) et de la fonction ISSET ou de !EMPTY

NB4 : On utilise de préférence && au lieu de AND ( c'est une question de priorité : http://php.net/manual/fr/language.operators.precedence.php )

Cordialement, 
Jordane                                                                 
Cette réponse vous a-t-elle aidé ?  
Matancy 677 Messages postés dimanche 14 juin 2015Date d'inscription 18 septembre 2017 Dernière intervention - 10 juil. 2017 à 11:24
Merci pour ton travail !!
Maintenant le code marche à merveille :)

Merci à tous ceux qui m'ont aidé.

Matancy
jordane45 19544 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 5 janvier 2018 Dernière intervention > Matancy 677 Messages postés dimanche 14 juin 2015Date d'inscription 18 septembre 2017 Dernière intervention - 10 juil. 2017 à 11:26
J'espère que tu as bien pris note de mes remarques et de ma façon de coder pour les réutiliser dans tes prochains codes ..... ça t'évitera de devoir revenir poster une question normalement :-)
Commenter la réponse de jordane45
Reivax962 3112 Messages postés jeudi 16 juin 2005Date d'inscription 4 janvier 2018 Dernière intervention - 10 juil. 2017 à 09:35
+1
Utile
1
Bonjour,

$insertmbr = $bdd->prepare("INSERT INTO membes(pseudo, mail, motdepasse) VALUES($pseudo, $mail, $mdp)");
$insertmbr->execute(array($peudo, $mail, $mdp));

Ces deux lignes sont bancales.
Tu places directement les variables PHP lors de la préparation de la requête, qui seront donc remplacés par leur valeur (sans les guillemets, qui plus est), au lieu de mettre les jetons ADO.
Regarde la doc : http://php.net/manual/en/pdo.prepare.php

(Et tu as une faute de frappe à $peudo dans la deuxième ligne)

Quelque chose comme ça serait mieux :
$insertmbr = $bdd->prepare("INSERT INTO membres(pseudo, mail, motdepasse) VALUES(?, ?, ?)");
$insertmbr->execute(array($pseudo, $mail, $mdp));


Xavier
Matancy 677 Messages postés dimanche 14 juin 2015Date d'inscription 18 septembre 2017 Dernière intervention - 10 juil. 2017 à 09:45
Merci de m'avoir corrigé cette erreur !!

Je l'ai corrigé puis testée, mais cependant, aucune valeur dans la base de données.

Matancy
Commenter la réponse de Reivax962
astuces72 3906 Messages postés vendredi 15 janvier 2010Date d'inscription 4 janvier 2018 Dernière intervention - 9 juil. 2017 à 18:23
0
Utile
5
il manque un r à "membres" !
$insertmbr = $bdd->prepare("INSERT INTO membes(pseudo, mail, motdepasse) VALUES($pseudo, $mail, $mdp)");
Matancy 677 Messages postés dimanche 14 juin 2015Date d'inscription 18 septembre 2017 Dernière intervention - 9 juil. 2017 à 18:45
Merci beaucoup de m'avoir signalé cette erreur.
Mais malheureusement, après avoir modifié cette valeur, rien n'apparaît dans la BDD.

Matancy
astuces72 3906 Messages postés vendredi 15 janvier 2010Date d'inscription 4 janvier 2018 Dernière intervention > Matancy 677 Messages postés dimanche 14 juin 2015Date d'inscription 18 septembre 2017 Dernière intervention - 10 juil. 2017 à 01:07
tu as encore des erreurs, même si elle ne sont pas la réponse !!!
$mail = htmlspecialchars($_POST['mail']);
$mail2 = htmlspecialchars($_POST['mail']); ====mail2
$mdp = sha1($_POST['mdp']);
$mdp2 = sha1($_POST['mdp']);====mdp2

sinon c'est forcement ==
if($mail == $mail2)
{
if($mdp == $mdp2)
{


je te conseille de faire le tour de tes noms de variable de ta table
Matancy 677 Messages postés dimanche 14 juin 2015Date d'inscription 18 septembre 2017 Dernière intervention > astuces72 3906 Messages postés vendredi 15 janvier 2010Date d'inscription 4 janvier 2018 Dernière intervention - 10 juil. 2017 à 10:03
Dans ma base de donnée, il n'y a pas de mdp2 ni de mail2, je les ai mis juste pour la vérification, pour éviter que l'utilisateur se trompe.
astuces72 3906 Messages postés vendredi 15 janvier 2010Date d'inscription 4 janvier 2018 Dernière intervention > Matancy 677 Messages postés dimanche 14 juin 2015Date d'inscription 18 septembre 2017 Dernière intervention - 10 juil. 2017 à 10:06
j'ai pas dis qu'ils manquaient, je dis que tu te plantes dans la récupération des POST.
$mail2 = htmlspecialchars($_POST['mail2']);
$mdp2 = sha1($_POST['mdp2']);
sinon $mail à la même valeur que $mail2 vue que $mail2 est égal à $_POST['mail']
Matancy 677 Messages postés dimanche 14 juin 2015Date d'inscription 18 septembre 2017 Dernière intervention > astuces72 3906 Messages postés vendredi 15 janvier 2010Date d'inscription 4 janvier 2018 Dernière intervention - 10 juil. 2017 à 10:07
Je corrige ça tout de suite :)
Commenter la réponse de astuces72
yg_be 4364 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 5 janvier 2018 Dernière intervention - Modifié par yg_be le 9/07/2017 à 22:14
0
Utile
10
bonsoir, Je pense que tu te trompes quand tu écris "Je n'ai également pas d'erreur PHP ou autre. "
Ce qui se passe, c'est que tes erreurs restent invisibles. La preuve, c'est que tu n'avais pas de message d'erreur alors que tu avais l'erreur remarquée par astuces72.
Je pense donc que tu dois améliorer ton code pour détecter les erreurs mysql.
A titre d'exemple, la fonction "execute" retourne TRUE en cas de succès ou FALSE si une erreur survient.
Matancy 677 Messages postés dimanche 14 juin 2015Date d'inscription 18 septembre 2017 Dernière intervention > jordane45 19544 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 5 janvier 2018 Dernière intervention - 10 juil. 2017 à 10:16
L'erreur qui apparaît est celle que j'ai configuré dans mon code.
Si il y a un problème dans la bdd, afficher :

$erreur="Erreur technique dans execute insert";
jordane45 19544 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 5 janvier 2018 Dernière intervention > Matancy 677 Messages postés dimanche 14 juin 2015Date d'inscription 18 septembre 2017 Dernière intervention - 10 juil. 2017 à 10:33
Montre ton code modifié suite à la mise en place des erreurs pdo
Matancy 677 Messages postés dimanche 14 juin 2015Date d'inscription 18 septembre 2017 Dernière intervention > jordane45 19544 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 5 janvier 2018 Dernière intervention - 10 juil. 2017 à 10:35
le code est disponible en bas de page si tu veut (je l'ai remis)
jordane45 19544 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 5 janvier 2018 Dernière intervention > Matancy 677 Messages postés dimanche 14 juin 2015Date d'inscription 18 septembre 2017 Dernière intervention - 10 juil. 2017 à 10:36
Tu n'as pas mis de try catch autour de ta requete comme dand le lien que je t'ai donné
Matancy 677 Messages postés dimanche 14 juin 2015Date d'inscription 18 septembre 2017 Dernière intervention > jordane45 19544 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 5 janvier 2018 Dernière intervention - 10 juil. 2017 à 10:40
Quand je l'ai mis, ça na pas marché;
Je l'ai peut être mal mis, j'en ait essayé un autre mais ça n'a aussi rien donné.

Merci pour ton aide
Commenter la réponse de yg_be
Matancy 677 Messages postés dimanche 14 juin 2015Date d'inscription 18 septembre 2017 Dernière intervention - 10 juil. 2017 à 10:11
0
Utile
Après plusieurs erreurs trouvés puis corrigés, je re-poste le code pour que vous puissiez vous baser sur quelque chose de plus actuel.

Par contre les données ne vont toujours pas dans la BDD :(

<?php

$bdd = new PDO('mysql:host=192.168.1.77;mysqldbname=espace-membre', 'root', '');

if(isset($_POST['Inscription']))
{
if(!empty($_POST['pseudo']) AND !empty($_POST['mail']) AND !empty($_POST['mail2']) AND !empty($_POST['mdp']) AND !empty($_POST['mdp2']))
{
$pseudo = htmlspecialchars($_POST['pseudo']);
$mail = htmlspecialchars($_POST['mail']);
$mail2 = htmlspecialchars($_POST['mail2']);
$mdp = sha1($_POST['mdp']);
$mdp2 = sha1($_POST['mdp2']);

$pseudolength = strlen($pseudo);
if($pseudolength <= 255)
{
if($mail == $mail2)
{
if($mdp == $mdp2)
{
$insertmbr = $bdd->prepare("INSERT INTO membres(pseudo, mail, motdepasse) VALUES(?, ?, ?)");

if($insertmbr->execute(array($pseudo, $mail, $mdp)))
{
$erreur = "Votre compte à bien été créer";
}
else
{
$erreur = "Erreur technique !!";
}
}
else
{
$erreur = "Vos mots de passe ne correspondent pas";
}
}
else
{
$erreur = "Vos adresses mails ne correspondent pas !!";
}
}
else
{
$erreur = "Votre pseudo ne doit pas dépasser 255 caractères !!";
}
}
else
{
$erreur = "Tous les champs doivent êtres complétés";
}
}

?>

<!DOCTYPE html>
<html>
<head>
<title>Inscription - TLW</title>
<link rel="stylesheet" href="/css/style.css" type="text/css"/>
<meta charset="utf-8" />
<meta name="language" content="fr">
<meta name="description" content="Page d'inscription à l'espace membre. TLW est une création CPM Tech.">
<meta name="revisit after" content="2 days">
</head>
<body bgcolor="#EEE">
<center>
<br />
<br />
<?php include'../php/menu.php' ?>
</center>
<br />
<br />
<div style="width: 100%; height: auto; background-color: #AAA">
<center>
<img src="/img/banniere.png" style="width: 98%; height: auto; margin-top: 10px; margin-bottom: 10px">
</center>
</div>
<center>
<u>
<h1>Publicité</h1>
</u>
</center>
<div style="max-width: 773px; height: auto; background-color: #FFFFFF; margin: auto; box-shadow: 5px 5px 0px #AAA; font-size: 25px;">
<img src="/img/pubimage.php" alt="image aleatoire" />
</div>
<br />
<br />
<div align="center">
<center>
<h1><u>Inscription</u></h1>
</center><br /><br /><br />

<form method="POST" action="">
<table>

<td align="right">
<label>Pseudo :</label>
</td>
<td>
<input type="text" name="pseudo" placeholder="Votre pseudo" id="pseudo">
</td></tr>

<td align="right">
<label>Mail :</label>
</td>
<td>
<input type="email" name="mail" placeholder="Votre adresse mail" id="mail">
</td></tr>

<td align="right">
<label>Confirmation Mail :</label>
</td>
<td>
<input type="email" name="mail2" placeholder="Confirmez votre adresse mail" id="mail2">
</td></tr>

<td align="right">
<label>Mot de passe :</label>
</td>
<td>
<input type="password" name="mdp" placeholder="Entrez votre mot de passe" id="mdp">
</td></tr>

<td align="right">
<label>Confirmation Mot de passe :</label>
</td>
<td>
<input type="password" name="mdp2" placeholder="Confirmez votre mot de passe" id="mdp2">
</td></tr>

</table>
<br />
<input type="submit" name="Inscription" value="Je m'inscris">

</form><br />
<?php
if(isset($erreur))
{
echo '<font color="red">'.$erreur."</font>";
}
?>

<center><br /><br />
Vous avez déjà un compte ? <a href="connexion.php" rel="nofollow noopener noreferrer" target="_blank">Connectez-vous</a>
</center>
<br />
<br />
</div>
<footer>
<?php include('../php/footer.php') ?>
</footer>
</body>
</html>


Merci pour tous ceux qui m'aideront !!
Commenter la réponse de Matancy