Problème BDD
Résolu
NyriaOff
Messages postés
19
Date d'inscription
Statut
Membre
Dernière intervention
-
NyriaOff Messages postés 19 Date d'inscription Statut Membre Dernière intervention -
NyriaOff Messages postés 19 Date d'inscription Statut Membre Dernière intervention -
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
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.
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
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 = "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); }
Bonjour, j'ai simplifier le code :
Le code HTML reste le même et pourtant aucune information est perçu par la base de données.
<?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.
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
Merci d'appliquer ceci à ton code :
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
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 ?
<?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 ?
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.
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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
(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)
Bonjour,
1 - Ok sorry.
2 - C'est fait.
3 - Voici le code PHP (où si c'est la bonne variable) à été mise en premier :
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.
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.
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.
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.
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 !
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs