Bonjour cher tous. Je suis entrain de suivre un tuto php sur udemy que j'applique au fur et à mesure, mais j'ai un problème.
La connexion à la base données est bonne, tout est bien (je crois parce que pas d'erreur en retour), et après avoir renseigné le formulaire d'inscription le message disant que le compte a été crée avec succès s'affiche, mais le problème est quand je me rend sur localhost/phpmyadmin les données ne ce sont pas insérées. Je galère dessus. J'ai besoin de votre aide. Voici le code :
bdd.php
<?php
$dsn = 'mysql:dbname = sgn-daara; host=localhost';
$user = 'root';
$password = '';
try {
$bdd = new PDO($dsn, $user, $password);
$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
if($bdd){
echo "Vous êtes connecté à la base de données !" ;
}
} catch (PDOException $e) {
echo "Echec lors de la connexion : " .$e->getMessage() ;
}
?>
register.php
<?php
if (isset($_POST['inscription'])) {
if(empty($_POST['nom']) || !ctype_alpha($_POST['nom'])){
$erreur_message = "Votre nom doit être une chaine de caractères alphabétiques !" ;
}elseif(empty($_POST['prenom']) || !preg_match('#[^ <> *+/]#', $_POST['prenom'])){
$erreur_message = "Votre prenom doit être une chaine de caractères alphabétiques !" ;
}elseif(empty($_POST["email"]) || !filter_var($_POST["email"], FILTER_VALIDATE_EMAIL)){
$erreur_message = "Rentrez une adresse email valide !";
}elseif(empty($_POST['password']) || $_POST['password'] != $_POST['confirm_password']){
$erreur_message = "Rentrer un mot de passe valide !" ;
}elseif(empty($_POST['username']) || !ctype_alnum($_POST['username'])){
$erreur_message = "Votre nom d'utilisateur doit être une chaine de caractères alphanumériques !" ;
}else{
require_once "includes/bdd.php";
$requete = $bdd->prepare('INSERT INTO utilisateurs(nom_utilisateur, prenom_utilisateur, email_utilisateur, password_utilisateur, username, photo_utilisateur, token_utilisateur) VALUES(:nom, :prenom, :email, :password, :username, :photo_profil, :token');
$requete->bindvalue(':nom', $_POST['nom']);
$requete->bindvalue(':prenom', $_POST['prenom']);
$requete->bindvalue(':email', $_POST['email']);
$requete->bindvalue(':password', $_POST['password']);
$requete->bindvalue(':username', $_POST['username']);
$requete->bindvalue(':token', "aaaa");
$valid_message = "Votre compte a été crée avec succès !";
if(empty($_FILES['photo_profil']['name'])){
$photo_profil = 'avatar_defaut.png';
$requete->bindValue(':photo_profil', $photo_profil);
}else{
if(preg_match("#jpeg|png|jpg#", $_FILES['photo_profil']['type'])){
$path = "uploader/photo_profil/";
move_uploaded_file($_FILES["photo_profil"]["tmp_name"], $path.$_FILES["photo_profil"]["tmp_name"]);
}else{
$erreur_message = "La photo de profil doit être de type jpeg, jpg ou png";
}
$requete->bindValue(':photo_profil', $_FILES['photo_profil']['name']);
$requete->execute();
}
}
}
?>
Bonjour,
Il nous manque du code car je ne vois pas le echo de "$valid_message", ni le formulaire
Vous avez activé l'affichage des erreurs de php ?
Eviter les espaces dans DSN
la méthode est bindValue et non bindvalue
Il manque une ) à la fin de la requête INSERT
<?php require_once 'includes/header_register.php'; ?>
<?php
if (isset($_POST['inscription'])) {
if(empty($_POST['nom']) || !ctype_alpha($_POST['nom'])){
$erreur_message = "Votre nom doit être une chaine de caractères alphabétiques !" ;
}elseif(empty($_POST['prenom']) || !preg_match('#[^ <> *+/]#', $_POST['prenom'])){
$erreur_message = "Votre prenom doit être une chaine de caractères alphabétiques !" ;
}elseif(empty($_POST["email"]) || !filter_var($_POST["email"], FILTER_VALIDATE_EMAIL)){
$erreur_message = "Rentrez une adresse email valide !";
}elseif(empty($_POST['password']) || $_POST['password'] != $_POST['confirm_password']){
$erreur_message = "Rentrer un mot de passe valide !" ;
}elseif(empty($_POST['username']) || !ctype_alnum($_POST['username'])){
$erreur_message = "Votre nom d'utilisateur doit être une chaine de caractères alphanumériques !" ;
}else{
require_once "includes/bdd.php";
$requete = $bdd->prepare('INSERT INTO utilisateurs(nom_utilisateur, prenom_utilisateur, email_utilisateur, password_utilisateur, username, token_utilisateur, photo_utilisateur) VALUES(:nom, :prenom, :email, :password, :username, :token, :photo_profil)');
$requete->bindValue(':nom', $_POST['nom']);
$requete->bindValue(':prenom', $_POST['prenom']);
$requete->bindValue(':email', $_POST['email']);
$requete->bindValue(':password', $_POST['password']);
$requete->bindValue(':username', $_POST['username']);
$requete->bindValue(':token', "aaaa");
$valid_message = "Votre compte a été crée avec succès !";
if(empty($_FILES['photo_profil']['name'])){
$photo_profil = 'avatar_defaut.png';
$requete->bindValue(':photo_profil', $photo_profil);
}else{
if(preg_match("#jpeg|png|jpg#", $_FILES['photo_profil']['type'])){
$path = "uploader/photo_profil/";
move_uploaded_file($_FILES["photo_profil"]["tmp_name"], $path.$_FILES["photo_profil"]["tmp_name"]);
}else{
$erreur_message = "La photo de profil doit être de type jpeg, jpg ou png";
}
$requete->bindValue(':photo_profil', $_FILES['photo_profil']['name']);
$requete->execute();
}
}
}
?>
<!-- End Logo -->
<div class="card mb-3">
<div class="card-body">
<div class="pt-4 pb-2">
<div role="alert">
<?php if(isset($erreur_message)) { ?>
<div class="alert alert-danger alert-dismissible fade show">
<i class="bi bi-exclamation-octagon me-1"></i>
<?php echo $erreur_message; ?>
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
<?php } elseif(isset($valid_message)) { ?>
<div class="alert alert-success alert-dismissible fade show" >
<i class="bi bi-check-circle me-1"></i>
<?php echo $valid_message; ?>
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div> <?php } ?>
</div>
<h5 class="card-title text-center pb-0 fs-4">Créer un compte</h5>
<p class="text-center small">Renseignez vos données personnelles pour créer un compte</p>
</div>
<form action = "register.php" method = "POST" enctype = "multipart/form-data" class="row g-3 needs-validation" novalidate>
<div class="col-12">
<label for="nom" class="form-label">Votre nom</label>
<input type="text" name="nom" class="form-control" id="nom" required>
<div class="invalid-feedback">Veuillez saisir votre prénom !</div>
</div>
<div class="col-12">
<label for="prenom" class="form-label">Votre prénom</label>
<input type="text" name="prenom" class="form-control" id="prenom" required>
<div class="invalid-feedback">Veuillez saisir votre prénom !</div>
</div>
<div class="col-12">
<label for="email" class="form-label">Votre adresse email</label>
<input type="email" name="email" class="form-control" id="email" required>
<div class="invalid-feedback">Veuillez saisir une adresse mail valide !</div>
</div>
<div class="col-12">
<label for="yourPassword" class="form-label">Mot de passe</label>
<input type="password" name="password" class="form-control" id="yourPassword" required>
<div class="invalid-feedback">Veuillez saisir votre mot de passe !</div>
</div>
<div class="col-12">
<label for="yourPassword" class="form-label">Confirmez votre mot de passe</label>
<input type="password" name="confirm_password" class="form-control" id="yourPassword" required>
<div class="invalid-feedback">Veuillez confirmez votre nmot de passe !</div>
</div>
<div class="col-12">
<label for="yourUsername" class="form-label">Nom d'utilisateur</label>
<div class="input-group has-validation">
<span class="input-group-text" id="inputGroupPrepend">@</span>
<input type="text" name="username" class="form-control" id="yourUsername" required>
<div class="invalid-feedback">Veuillez saisir votre nom d'utilisateur !</div>
</div>
</div>
<div class="col-12">
<label for="photo" class="form-label">Photo de profil</label>
<div class="input-group has-validation">
<input type="hidden" name="MAX_FILE_SIZE" value = "1000000" class="form-control">
<input type="file" name = "photo_profil" class="form-control" id="photo">
</div>
</div>
<div class="col-12">
<div class="form-check">
<input class="form-check-input" name="terms" type="checkbox" value="" id="acceptTerms" required>
<label class="form-check-label" for="acceptTerms">J'accepte les <a href="#">termes & conditions</a></label>
<div class="invalid-feedback">Vous devez agréer avant de créer votre compte.</div>
</div>
</div>
<div class="col-12">
<button class="btn btn-primary w-100" type="submit" name = "inscription">Créer votre compte</button>
</div>
<div class="col-12">
<p class="small mb-0">Avez-vous déjà un compte ? <a href="login.php">Connectez-vous</a></p>
</div>
</form>
</div>
</div>
<?php require_once 'includes/footer_register.php'; ?>
Voici le code complet (register.php)
la première ligne de code. ce qui permet à PDO de savoir où se connecter.
Puisque vous avez résolu votre problème, il serait bien d'indiquer au autre où se situais le problème.
Non le problème n'est pas encore résolu. Désolé, j'ai appuyer sur valider sans me rendre compte
Bonjour à tous ! ouf enfin j'ai galéré. Mes données s'insère parfaitement dans phpmyadmin. Voici comment j'ai procédé : J'ai fait remonté ce bout de code $requete->bindValue(':photo_profil', $_FILES["photo_profil"]["name"]);
à la suite de move_uploaded_file($_FILES["photo_profil"]["tmp_name"], $path.$_FILES["photo_profil"]["tmp_name"]);
Pour que ça soit plus claire voici le code :
if(empty($_FILES['photo_profil']['name'])){
$photo_profil = 'avatar_defaut.png';
$requete->bindValue(':photo_profil', $photo_profil);
}else{
if(preg_match("#jpeg|png|jpg#", $_FILES["photo_profil"]["type"])){
$path = "uploader/photo_profil/";
move_uploaded_file($_FILES["photo_profil"]["tmp_name"], $path.$_FILES["photo_profil"]["tmp_name"]);
$requete->bindValue(':photo_profil', $_FILES["photo_profil"]["name"]);
}else{
$erreur_message = "La photo de profil doit être de type jpeg, jpg, ou png";
}
}
$requete->execute();
Voici l'ancien bout de code :
if(empty($_FILES['photo_profil']['name'])){
$photo_profil = 'avatar_defaut.png';
$requete->bindValue(':photo_profil', $photo_profil);
}else{
if(preg_match("#jpeg|png|jpg#", $_FILES['photo_profil']['type'])){
$path = "uploader/photo_profil/";
move_uploaded_file($_FILES["photo_profil"]["tmp_name"], $path.$_FILES["photo_profil"]["tmp_name"]);
}else{
$erreur_message = "La photo de profil doit être de type jpeg, jpg ou png";
}
$requete->bindValue(':photo_profil', $_FILES['photo_profil']['name']);
$requete->execute();
Maintenant mon challenge est d'uploader la photo de profil. Je vais éssayer moi-même et vous faire un retour en cas de succès ou d'échec. Encore merci
Et j'allais oublié la connexion à la base de données :
<?php
$dsn = 'mysql:dbname=sgn;host=localhost';
$user = 'root';
$password = '';
try {
$bdd = new PDO($dsn, $user, $password);
$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
//if($bdd){ echo "Vous êtes connecté à la base de données !" ; }
} catch (PDOException $e) {
echo "Echec lors de la connexion : " .$e->getMessage() ;
}
?>
Comme le problème a été réglé, je mets tout ce que j'ai fait et vos recommandations pour que celà aide aussi une autre personne.