Problème BDD

Résolu/Fermé
NyriaOff Messages postés 19 Date d'inscription mercredi 20 février 2019 Statut Membre Dernière intervention 10 mai 2019 - Modifié le 19 mars 2019 à 00:13
NyriaOff Messages postés 19 Date d'inscription mercredi 20 février 2019 Statut Membre Dernière intervention 10 mai 2019 - 4 avril 2019 à 20:34
Bonjour, j'ai hoster mon site sur : 000webhost.com , j'ai exporté les fichiers sur le site mot pour mot et la BDD aussi. J'avais donc une variable dans ma BDD avec une email et j'ai pu vérifier le lien entre les deux en entrant la même adresse-mail pour que le site disse que l'adresse était déjà utilisé, j'entre les infos puis je check la BDD, rien et pourtant ça marche en localhost. Bref le code PHP :

<?php

 $bdd = new PDO('mysql:host=localhost;dbname=******', '******', '******'); 


if(isset($_POST['forminscription']))
{
 $pseudo = htmlspecialchars($_POST['pseudo']);
 $mail = htmlspecialchars($_POST['mail']);
 $mail2 = htmlspecialchars($_POST['mail2']);
 $mdp = sha1($_POST['mdp']);
 $mdp2 = sha1($_POST['mdp2']);

 if(!empty($_POST['pseudo']) AND !empty($_POST['mail']) AND !empty($_POST['mail2']) AND !empty($_POST['mdp']) AND !empty($_POST['mdp2'])) {
      $pseudolength = strlen($pseudo);
      if($pseudolength <= 255) {
         if($mail == $mail2) {
            if(filter_var($mail, FILTER_VALIDATE_EMAIL)) {
               $reqmail = $bdd->prepare("SELECT * FROM membres WHERE mail = ?");
               $reqmail->execute(array($mail));
               $mailexist = $reqmail->rowCount();
               if($mailexist == 0) {
                  if($mdp == $mdp2) {
                     $insertmbr = $bdd->prepare("INSERT INTO membres(pseudo, mail, motdepasse) VALUES(?, ?, ?)");
                     $insertmbr->execute(array($pseudo, $mail, $mdp));
                     $erreur = header('Location: inscription_check.php');
                  } else {
                     $erreur = "Vos mots de passes ne correspondent pas !";
                  }
               } else {
                  $erreur = "Adresse mail déjà utilisée !";
               }
            } else {
               $erreur = "Votre adresse mail n'est pas valide !";
            }
         } else {
            $erreur = "Vos adresses mail ne correspondent pas !";
         }
      } else {
         $erreur = "Votre pseudo ne doit pas dépasser 255 caractères !";
      }
   } else {
      $erreur = "Tous les champs doivent être complétés !";
   }
}
?>


 <html>

  <head>

            <meta charset="utf-8" />
            <link rel="stylesheet" href="css/inscription.css" />
            <link rel="icon" href="css/images/cadenas.ico" />

   <title>Cadenas Connecté | Inscription</title> 
   
  </head>

  <body>

   <header> <!-- Entête -->
    
    <div id="menu">

     <img class="logo" src="css/images/cadenas.png">
     <h2>- CADENAS CONNECTE -</h2>

     <div id="nav">
      <a href="accueil.php">ACCUEIL</a>
      <a href="inscription.php">INSCRIPTION</a>
      <a href="connexion.php">CONNEXION</a>
     </div>

    </div>

   </header>

   <h1>INSCRIPTION</h1>

   <section class="contenu"> <!-- Contenu -->
    
    <form method="POST" action=""><p class="contenu">

     <label for="pseudo">Pseudo : <input type="text" placeholder="Inserez votre pseudo" id="pseudo" name="pseudo" value="<?php if(isset($pseudo)) { echo $pseudo; }?>" /></label><br/>

     <label for="mail">Adresse e-mail : <input type="email" placeholder="Taper votre adresse-mail" id="mail" name="mail" value="<?php if(isset($mail)) { echo $mail; }?>"/></label><br/>

     <label for="mail2">Confirmation de l'e-mail : <input type="email" placeholder="Retaper votre adresse-mail" id="mail2" name="mail2" value="<?php if(isset($mail2)) { echo $mail2; }?>"/></label><br/>

     <label for="mdp">Mot de passe : <input type="password" placeholder="Inserez votre mot de passe" id="mdp" name="mdp"/></label><br/>

     <label for="mdp2">Confirmation du mot de passe : <input type="password" placeholder="Retaper votre mot de passe" id="mdp2" name="mdp2"/></label><br/>

     <input type="submit" name="forminscription" value="S'inscrire"/>

    </p></form>

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

   </section>
     
     </body>

  </html>

7 réponses

jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 4 717
18 mars 2019 à 21:29
Bonjour
Je doute que le Host soit localhost...
Verifies les informations de la bdd...
0
jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 4 717
18 mars 2019 à 21:31
0
NyriaOff Messages postés 19 Date d'inscription mercredi 20 février 2019 Statut Membre Dernière intervention 10 mai 2019
Modifié le 20 mars 2019 à 19:42
Bonjour, je ne pensai pas que la réponse serait si rapide désoler pour le retard : J'ai sur www.000webhost.com des informations concernant la BDD que je vais vous transmettre par capture d'écran :
Il est possible que je me sois tromper mais pourtant le site en ligne communique avec la BDD mais ne veut pas recevoir d'informations. Je vais prendre connaissance de la page renseignée et je verrai si elle résolue mon problème merci.
0
jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 4 717
20 mars 2019 à 19:52
Pense à désactiver les redirections le temps des tests.. sinon tu ne verras pas les éventuels messages d'erreur lors de l'exectuion de ta requete d'insert


$sql = "INSERT INTO membres(pseudo, mail, motdepasse) VALUES(?, ?, ?)";
$datas = array($pseudo, $mail, $mdp);
try{
  $insertmbr = $bdd->prepare($sql);
  $insertmbr->execute($datas);
  //$erreur = header('Location: inscription_check.php'); //mis en commentaire le temps des tests

 }catch(Exception $e){
   echo " Erreur !" .$e->getMessage();
   echo "<br> Datas :";
   print_r($datas);
 }


Je te précise également qu'en PDO, il ne faut pas utiliser le RowCount sur une requête SELECT...
A la place on fera un count (sur un fetchAll par exemple)
$sql = "SELECT * FROM membres WHERE mail = ?";
$datas = array($mail);
try{
  $insertmbr = $bdd->prepare($sql);
   $insertmbr->execute($datas);
   $reqmail = $insertmbr->fetchAll(); // on stocke le resultat dans un array
   $mailexist = !empty($reqmail) ? count($reqmail) : NULL; // on fait un count dessus
 }catch(Exception $e){
   echo " Erreur !" .$e->getMessage();
   echo "<br> Datas :";
   print_r($datas);
 }
0
NyriaOff Messages postés 19 Date d'inscription mercredi 20 février 2019 Statut Membre Dernière intervention 10 mai 2019
Modifié le 1 avril 2019 à 22:17
Bonjour, j'ai simplifier le code :
<?php

$bdd = new PDO('mysql:host=localhost;dbname=******', '*****', '*****');

if(isset($_POST['forminscription']))
{
 $pseudo = htmlspecialchars($_POST['pseudo']);
 $mail = htmlspecialchars($_POST['mail']);
 $mail2 = htmlspecialchars($_POST['mail2']);
 $mdp = sha1($_POST['mdp']);
 $mdp2 = sha1($_POST['mdp2']);

$insertmbr = $bdd->prepare("INSERT INTO membres(pseudo, mail, motdepasse) VALUES(?, ?, ?)");
$insertmbr->execute(array($pseudo, $mail, $mdp));
//$erreur = header('Location: inscription_check.php');
}
?>

Le code HTML reste le même et pourtant aucune information est perçu par la base de données.
0
jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 4 717
1 avril 2019 à 16:57
Comme je te l'ai déjà indiqué .... tu dois gérer les éventuelles erreurs PDO !
Merci d'appliquer ceci à ton code :
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
0
jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 4 717
1 avril 2019 à 16:58
Au passage.... le htmlspecialchar ne doit s'utiliser que pour de l'affichage... Aucunement lors de l'insertion en bdd.
Autre point... le SHA1 n'est plus utilisé pour la géstion des password (pas assez sécurisé ).
Désormais, on utiliser les fonctions password_hash et password_verify
0
NyriaOff Messages postés 19 Date d'inscription mercredi 20 février 2019 Statut Membre Dernière intervention 10 mai 2019
Modifié le 1 avril 2019 à 22:15
J'ai appliquer le code donné par le lien et la page se charge normalement à moins que j'ai merder dans l'intégration du code, le voici après l'intégration (htmlspecialchar à été enlevé mais pas le SHA1 car password_hash ne marche pas pour moi) :

<?php

try{
$bdd =new PDO('mysql:host=localhost;
dbname=**********; charset=utf8', '*******_projet', '******');
// 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());
}
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

$bdd = new PDO('mysql:host=localhost;dbname=i******', '*******projet', '*****');

if(isset($_POST['forminscription']))
{
$pseudo = $_POST['pseudo'];
$mail = $_POST['mail'];
$mail2 = $_POST['mail2'];
$mdp = sha1($_POST['mdp']);
$mdp2 = sha1($_POST['mdp2']);

$insertmbr = $bdd->prepare("INSERT INTO membres(pseudo, mail, motdepasse) VALUES(?, ?, ?)");
$insertmbr->execute(array($pseudo, $mail, $mdp));
//$erreur = header('Location: inscription_check.php');
}
?>

PS : La version PHP du localhost était 5 alors que celle de 000webhost est 7.1 et celle de phpmyadmin sur 000webhost est 7.3.2. Je pense que des bugs peuvent provenir d'ici aussi mais je ne sais pas comment faire si c'est le cas :

1. Changer la version sur 000webhost pour celle de phpMyAdmin?
2. Changer la version sur 000webhost pour celle de localhost?
3. Réécrire le programme avec des variables plus récentes ?
0
jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 4 717
1 avril 2019 à 18:01
ou la lalala ....

1 - Je t'ai déjà dit d'utiliser les BALISES DE CODE pour poster ton code ........ ce n'est pas clair ?? Oo

2 - Tu as deux connexion à ta bdd dans le même code

3 - L'affichage des erreurs php se placent AU DEBUT du code (au tout début ! )


J'attendrai que tu aies déjà fait ces corrections avant de regarder le reste....


NB: password_hash fonctionne parfaitement....... sur quoi te bases tu pour dire qu'il ne fonctionne pas toujours correctement ??

NB² : Oui la version de php compte... et la 7.x est trois fois plus performante.... donc c'est bien celle la qu'il faut utiliser.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
NyriaOff Messages postés 19 Date d'inscription mercredi 20 février 2019 Statut Membre Dernière intervention 10 mai 2019
1 avril 2019 à 17:52
(Le message précédant était fossé puisque je n'avais pas changé les informations de connexion de la BDD pour voir si il y avait des bugs)
0
NyriaOff Messages postés 19 Date d'inscription mercredi 20 février 2019 Statut Membre Dernière intervention 10 mai 2019
Modifié le 4 avril 2019 à 11:04
Bonjour,

1 - Ok sorry.
2 - C'est fait.
3 - Voici le code PHP (où si c'est la bonne variable) à été mise en premier :

<?php
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

try{
$bdd =new PDO('mysql:host=localhost; dbname=xxxxx; charset=utf8', 'xxxxxxx', 'xxxxxx');
// 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());
}

if(isset($_POST['forminscription']))
{
 $pseudo = $_POST['pseudo'];
 $mail = $_POST['mail'];
 $mail2 = $_POST['mail2'];
 $mdp = sha1($_POST['mdp']);
 $mdp2 = sha1($_POST['mdp2']);

    $insertmbr = $bdd->prepare("INSERT INTO membres(pseudo, mail, motdepasse) VALUES(?, ?, ?)");
    $insertmbr->execute(array($pseudo, $mail, $mdp));
    //$erreur = header('Location: inscription_check.php');
}
?>


Pour le reste je préfère pour l'instant rester sur un simple sha1 que je maitrise que autre chose et 000webhost à sa version de PHP en 7 donc c'est à moi de changer le code si il y en a besoin.
0
Utilisateur anonyme
4 avril 2019 à 10:41
Bonjour Nyriaoff

C'est la troisième fois que tu mets tes identifiants de base de donnée en clair sur le forum.
Tu te rends compte des conséquences possibles ?

Il faut toujours cacher les noms d'utilisateur et mots de passe, par exemple en les remplaçant par des ***.
0
NyriaOff Messages postés 19 Date d'inscription mercredi 20 février 2019 Statut Membre Dernière intervention 10 mai 2019 > Utilisateur anonyme
4 avril 2019 à 17:39
Ah pardon excusez moi.
0
Utilisateur anonyme > NyriaOff Messages postés 19 Date d'inscription mercredi 20 février 2019 Statut Membre Dernière intervention 10 mai 2019
4 avril 2019 à 18:31
Tu n'as pas à t'excuser, ce n'est pas moi qui subirai les conséquences, c'est toi. Tu es légalement responsable si quelqu'un de mal intentionné utilise tes identifiants à des fins illégales.
Tu devrais changer de mot de passe rapidement, et mettre la connexion dans un fichier inclus, histoire que tes identifiants n'apparaissent jamais quand tu montres ton code.
0
jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 4 717
4 avril 2019 à 17:54
Et le try/catch au niveau de l'exécution de la requête ... il est où ?
ça pourrait permettre de savoir ce qui cloche...

De plus, peux tu ajouter un print_r($_POST); dans ton IF voir si il s'affiche et voir ce qu'il contient exactement...
0
NyriaOff Messages postés 19 Date d'inscription mercredi 20 février 2019 Statut Membre Dernière intervention 10 mai 2019
4 avril 2019 à 20:34
C'est bon j'ai trouvé la solution au problème que je n'ai pas trop compris mais bon : En localhost tout allait bien et pourtant sur 000webhost, la colonne "Avatar" de ma base de donnée n'étant pas rempli au moment de l'inscription, la BDD ne se remplissait pas (Je fais appelle à celle-ci dans la modification du profil mais pas dans l'inscription), j'ai pu trouvé le bug grâce à l'affichage de celui-ci avec la variable donné au-dessus. Bref merci encore à vous pour votre précieuse aide !
0