Je souhaite créer une page d'inscription pour mon site, et le problème est qu'il ne veut pas insérer les données dans la base de donnée et il ne m'affiche aucune erreur.
Voici mon code :
<!DOCTYPE html>
<html>
<head>
<title>S'inscrire | PrograMed-IP.com</title>
<meta charset="utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<link href="../css/inscription.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<?php
include '../includes/header_nav.html';
for($i = 0; $i != 5; $i++){
echo '<br/>';
}
?>
<form method="POST" action="">
<table align="center">
<tr>
<td>
<label for="prenom">Votre prénom : </label>
</td>
<td>
<input type="text" name="prenom" id="prenom" placeholder="Entrez votre prénom" required/>
</td>
</tr>
<tr>
<td>
<label for="pseudo">Créez un pseudo : </label>
</td>
<td>
<input type="text" name="pseudo" id="pseudo" placeholder="Entrez votre pseudo" required/>
</td>
</tr>
<tr>
<?php
if(isset($emailerror)){
echo $emailerror;
}
?>
<td>
<label for="email">Votre e-mail : </label>
</td>
<td>
<input type="email" name="email" id="email" placeholder="xyz@exemple.com" required/>
</td>
</tr>
<tr>
<?php
if(isset($erreurpass)){
echo $erreurpass;
}
?>
<td>
<label for="passwd">Créez un mot de passe : </label>
</td>
<td>
<input type="password" name="passwd" id="passwd" placeholder="Entrez un mot de passe" required/>
</td>
</tr>
<tr>
<td>
<label for="confirm-passwd">Confirmez votre mot de passe : </label>
</td>
<td>
<input type="password" name="confirm-passwd" id="confirm-passwd" placeholder="Ré-entrez votre mot de passe" required/>
</td>
</tr>
</table>
<br/>
<center>
<input type="submit" name="submit" value="S'inscrire"/>
</center>
</form>
<br/>
<br/>
<?php
$dbconnect = new PDO('mysql:host=127.0.0.1;dbname=website_accounts', 'root', '');
if(isset($_POST['submit'])){
if(!empty($_POST['prenom']) AND !empty($_POST['pseudo']) AND !empty($_POST['email']) AND!empty($_POST['passwd']) AND!empty($_POST['confirm-passwd'])){
$prenom = strip_tags($_POST['prenom']);
$pseudo = strip_tags($_POST['pseudo']);
$email = strip_tags($_POST['email']);
$passwd = sha1($_POST['passwd']);
$confirm = sha1($_POST['confirm-passwd']);
$passwdlength = strlen($passwd);
if($passwdlength < 8){
$erreurpass = '<span style="color: #bbb" align="center">Le mot de passe doit contenir au moins 8 caractères</span>';
if(filter_var($email, FILTER_VALIDATE_EMAIL)){
if($passwd == $confirm){
$inscription = $dbconnect->prepare('INSERT INTO no_offer_accounts(prenom, pseudo, email, passwd) VALUES (?, ?, ?)');
$inscription->execute(array($prenom, $pseudo, $email, $passwd));
}
else{
echo '<span style="color: #ee4444;" align="center">Vos mot de passe ne correspondent pas !</span>';
}
}
else{
$emailerror = '<span style="color: #bbb;" align="center">Ceci n\'est pas un e-mail !</span>';
}
}
}
else{
echo '<span style="color: #ee4444;">Tous les champs doivent être remplis !</span>';
}
}
?>
</body>
</html>
- Edité par ProgramedIp 28 décembre 2017 à 15:17:52
Avant toute chose, direction la FAQ PHP en passant par le lien dans ma signature, ceci afin d'activer l'affichage des erreurs PHP ET PDO.
J'ai bien vu ce qui pose problème en fait : quelque part, il y a trois trucs attendus, mais on en fournit 4… Avec le message d'erreur, ce sera très clair
On est d'accord que tu as bien changé la connexion comme te l'a montré philodick (et comme c'est expliqué dans la FAQ) ou que tu as bien mis ce qui correspond à ton premier bloc de code ? Parce que juste le second ne fait que capturer les erreurs s'il y en a de jetées, mais si tu ne demandes pas qu'il y en ait , ça ne servira pas à grand chose.
Je reformule : mettre un try { … } catch (…) { … } n'active pas les erreurs, cela ne fait que les capturer s'il y en a. Mais pour qu'il y en ait, il faut le demander à PDO (en plus de demander à PHP), d'où l'utilité de l'autre partie.
J'ai corrigé le problème et ça marche très bien. Mais, quand j'ai fait la page de connexion, il me renvoie une erreur bizarre :
Fatal error: Uncaught PDOException: You cannot serialize or unserialize PDOStatement instances in [no active file]:0 Stack trace: #0 [internal function]: PDOStatement->__sleep() #1 {main} thrown in [no active file] on line 0
Voici mon code :
<?php
if(isset($_POST['submit'])){
if(!empty($_POST['user']) AND !empty($_POST['pass'])){
$user = strip_tags($_POST['user']);
$pass = sha1($_POST['pass']);
$db_connect = new PDO('mysql:host=localhost;dbname=website', 'root', 'Local-Server/PrograMed', [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);
$verif = $db_connect->prepare('SELECT * FROM accounts WHERE pseudo = ? AND passwd = ?');
$verif->execute([$user, $pass]);
$exist = $verif->rowCount();
if($exist === 1){
$email = $db_connect->prepare('SELECT accounts.email FROM accounts WHERE pseudo = ? AND passwd = ?');
$email->execute([$user, $pass]);
$check_email = $email->rowCount();
$email->fetch();
$prenom = $db_connect->prepare('SELECT accounts.prenom FROM accounts WHERE pseudo = ? AND passwd = ?');
$prenom->execute([$user, $pass]);
$check_prenom = $prenom->rowCount();
$prenom->fetch();
$verif->fetch();
$_SESSION['prenom'] = $prenom;
$_SESSION['pseudo'] = $user;
$_SESSION['email'] = $email;
$_SESSION['pass'] = $pass;/*
echo '<script> document.location.href = "index.php?id=profile"; </script>';*/
}
else{
$verif = $db_connect->prepare('SELECT * FROM accounts WHERE email = ? AND passwd = ?');
$verif->execute([$user, $pass]);
$exist = $verif->rowCount();
if($exist === 1){
$pseudo = $db_connect->prepare('SELECT accounts.pseudo FROM accounts WHERE email = ? AND passwd = ?');
$pseudo->execute([$user, $pass]);
$check_pseudo = $pseudo->rowCount();
$pseudo->fetch();
$prenom = $db_connect->prepare('SELECT accounts.prenom FROM accounts WHERE email = ? AND passwd = ?');
$prenom->execute([$user, $pass]);
$check_prenom = $prenom->rowCount();
$prenom->fetch();
$verif->fetch();
$_SESSION['prenom'] = $prenom;
$_SESSION['pseudo'] = $pseudo;
$_SESSION['email'] = $user;
$_SESSION['pass'] = $pass;/*
echo '<script> document.location.href = "index.php?id=profile"; </script>';*/
}
else{
$err = '<span style="color: #f44;">E-mail, pseudo ou mot de passe incorrecte(s)</span>';
}
}
}
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Se connecter | PrograMed-IP.com</title>
<meta http-equiv="Content-Type" content="text/html"/>
<meta charset="utf-8"/>
<meta http-equiv="Content-Language" content="fr-FR"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<link rel="stylesheet" type="text/css" href="css/connect.css"/>
<link rel="stylesheet" type="text/css" href="css/icons.css"/>
<link rel="stylesheet" type="text/css" href="css/footer.css"/>
<link rel="stylesheet" type="text/css" href="css/header_nav.css"/>
</head>
<body>
<div id="desktop">
<?php include 'includes/header_nav.html'; ?>
<div id="form" align="center">
<h2 style="text-align:center;">Se connecter</h2>
<form method="POST">
<table>
<tr>
<td>
<label for="user">E-mail ou pseudo : </label>
</td>
<td>
<input type="text" name="user" id="user"/>
</td>
</tr>
<tr>
<td>
<label for="pass">Mot de passe : </label>
</td>
<td>
<input type="password" name="pass" id="pass"/>
</td>
</tr>
</table>
<button type="submit" name="submit" id="submit">Se connecter</button>
<div id="errors">
<?php if(isset($err)){ echo $err; } ?>
</div>
</form>
<p style="font-size: 14px;">Pas encore de compte ? Créez-en un <a href="index.php?id=register">ici</a> !</p>
</div>
<?php include 'includes/footer.html'; ?>
<script type="text/javascript" src="js/fix_menu.js"></script>
</div>
</body>
</html>
Merci pour vos réponses.
NB : Le mot de passe a changé car j'ai installé Apache, PHP, MySQL et phpMyAdmin manuellement.
Tu essayes de mettre tout le résultat de la requête en session, ça ne va pas. Il faut que tu fetch la requête et qu'ensuite tu prennent juste le prenom, etc...
Tu ne m'as pas compris, j'ai fait une page "index.php" et dans l'url je lui passe un id ($_GET['id']), si cette variable existe, sa valeur sera stockée dans une variable $id. Si la variable $id est égale à "home" il va inclure la page "home.php", si $id = "connect", il inclut la page "connect.php".
Voici pour être plus lisible :
<?php
session_start();
if(isset($_GET['id'])){//Si la variable $_GET['id'] existe, sa valeur va être stockée dans $id
$id = $_GET['id'];
}
else{
$id = 'home';
}
if($id === 'home'){//Si $id est égale à "home", on inclut la page home.php
require '../pages/home.php';
}
elseif($id === 'register'){//Si $id est égale à "register", on inclut la page register.php
require '../pages/register.php';
}
elseif($id === 'connect'){//Si $id est égale à "connect", on inclut la page connect.php
require '../pages/connect.php';
}
elseif($id === 'profile'){//Si $id est égale à "profile", on inclut la page profile.php
require '../pages/profile.php';
}
elseif($id === 'deconnect'){//Si $id est égale à "deconnect", on inclut la page deconnect.php
require '../pages/deconnect.php';
}
?>
Donc après avoir inclut la page connect.php, ça sera comme ça :
C'est plus facile d'écrire $id que $_GET['id']. Autre chose, j'ai mis que si $_GET['id'] n'existe pas, la variable $id sera égale à "home", donc si dans l'url on écrit "index.php" ou "index.php?id=home", ça renvoierai la même page.
Ca éviterait une erreur 404 (puisque ça ne marche pas pour moi, ici).
- Edité par ProgramedIp 17 janvier 2018 à 10:07:02
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
N'oubliez pas d'activer les erreurs PDO.
N'oubliez pas d'activer les erreurs PDO.
Keep It Simple Stupid - SF4 conf Swift - Cours 1/4 SF4 - Exceptions PDO - Formes Normales
N'oubliez pas d'activer les erreurs PDO.
N'oubliez pas d'activer les erreurs PDO.
Keep It Simple Stupid - SF4 conf Swift - Cours 1/4 SF4 - Exceptions PDO - Formes Normales
Keep It Simple Stupid - SF4 conf Swift - Cours 1/4 SF4 - Exceptions PDO - Formes Normales
Keep It Simple Stupid - SF4 conf Swift - Cours 1/4 SF4 - Exceptions PDO - Formes Normales
Keep It Simple Stupid - SF4 conf Swift - Cours 1/4 SF4 - Exceptions PDO - Formes Normales