Page inscription.php
Résolu/Fermé
A voir également:
- Page inscription.php
- Supprimer une page word - Guide
- Word numéro de page 1/2 - Guide
- Comment traduire une page - Guide
- Mettre google en page d'accueil - Guide
- Créer une page facebook - Guide
7 réponses
jordane45
Messages postés
38358
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
28 décembre 2024
4 719
Modifié le 4 févr. 2021 à 16:05
Modifié le 4 févr. 2021 à 16:05
Au niveau du html, il faut indiquer l'action dans le form
Si le PHP se trouve dans la même page que ton code html
Si le code PHP se trouve dans un autre fichier
A noter, que pour que le code php s'exécute, il faut que l'extension de ton fichier soit bien .php
(sauf à faire du paramétrage au niveau du serveur... )
Côté php
1 - Activer l'affichage des erreurs PHP ( à placer TOUT AU DEBUT de ton code php )
Ensuite, tu pourrais aussi vérifier si ta variable $_POST te retourne bien ce que tu as entré dans tes champs.
Pour ça, avant ton premier IF, tu pourrais faire un print_r
Au niveau de tes requêtes ... tu as ajouté l'utilisation du beginTransaction();
... j'ai l'impression que tu copies/colle bêtement des codes trouvés au hasard sur le net ...
Tu sais à quoi ça sert au moins ??
Et donc.. ben.. si tu utilises cette instruction... il ne faut pas oublier de commit() pour que les modifs soient prises en compte !!
Mais.. ça n'a d'utilité que si tu gères un eventuel rollback ....
PS: La fonction htmlentities ne doit s'utiliser que pour de l'affichage ... jamais pour le stockage des données en BDD.
Si le PHP se trouve dans la même page que ton code html
<form method="post" action="">
Si le code PHP se trouve dans un autre fichier
<form method="post" action="chemin/vers/ton/fichier.php">
A noter, que pour que le code php s'exécute, il faut que l'extension de ton fichier soit bien .php
(sauf à faire du paramétrage au niveau du serveur... )
Côté php
1 - Activer l'affichage des erreurs PHP ( à placer TOUT AU DEBUT de ton code php )
<?php //démarrage des sessions session_start(); // Affichage des erreurs PHP error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); // puis la suite de ton code
Ensuite, tu pourrais aussi vérifier si ta variable $_POST te retourne bien ce que tu as entré dans tes champs.
Pour ça, avant ton premier IF, tu pourrais faire un print_r
print_r($_POST);
Au niveau de tes requêtes ... tu as ajouté l'utilisation du beginTransaction();
... j'ai l'impression que tu copies/colle bêtement des codes trouvés au hasard sur le net ...
Tu sais à quoi ça sert au moins ??
Et donc.. ben.. si tu utilises cette instruction... il ne faut pas oublier de commit() pour que les modifs soient prises en compte !!
$query->commit();
Mais.. ça n'a d'utilité que si tu gères un eventuel rollback ....
PS: La fonction htmlentities ne doit s'utiliser que pour de l'affichage ... jamais pour le stockage des données en BDD.
jordane45
Messages postés
38358
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
28 décembre 2024
4 719
3 févr. 2021 à 19:41
3 févr. 2021 à 19:41
Bonjour
A mon avis
Et je t'invite à lire ceci
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
.
A mon avis
$query = $bdd->query("SELECT mail FROM Utilisateur WHERE mail = ?", $fetch_style = PDO::FETCH_COLUMN);a changer par
$query = $bdd->prepare("SELECT mail FROM Utilisateur WHERE mail = ?", PDO::FETCH_COLUMN); $query->execute(array($mail);
Et je t'invite à lire ceci
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
.
Voila une autre implémentation en m'appuyant sur les derniers conseils :
connexion_db.php
inscription.php
ça affiche une autre erreur :
Erreur ! SQLSTATE[HY093]: Invalid parameter number: parameter was not defined Les datas : Array ( [:mail] => ***@*** ) invalide
connexion_db.php
<?php
try {
$bdd = new PDO('mysql:host=localhost;dbname=db_gaming;charset=utf8', 'root', 'root');
$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
} catch (Exception $e) {
die('Erreur'.$e->getMessage());
}
?>
inscription.php
$sql = "SELECT * FROM Utilisateur WHERE mail = ?";
$datas = array(':mail' => $mail);
//Execution de la requete
try{
$requete = $bdd -> prepare($sql) ;
$requete->execute($datas) ;
}catch(Exception $e){
// en cas d'erreur :
echo " Erreur ! ".$e->getMessage();
echo " Les datas : " ;
print_r($datas);
}
ça affiche une autre erreur :
Erreur ! SQLSTATE[HY093]: Invalid parameter number: parameter was not defined Les datas : Array ( [:mail] => ***@*** ) invalide
jordane45
Messages postés
38358
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
28 décembre 2024
4 719
3 févr. 2021 à 22:17
3 févr. 2021 à 22:17
Avec cette syntaxe là il ne faut pas mettre un point d'interrogation en guise de paramètre au niveau de la requête SQL mais le même nom que ce que tu as mis comme clé dans l'array que tu envoies dans le exécute
En ce qui concerne le mail il n'ya plus ce problème. Mais il ne se passe rien.
Voici le code php à jour :
Edit: correctement des balises de code
Voici le code php à jour :
<?php session_start(); require_once "connexion_db.php"; if(isset($_SESSION["id"])) { header('Location: index.php'); exit; } if(!empty($_POST)) { $valid = true; // On se place sur le bon formulaire grâce au "name" de la balise "input" if(isset($_POST['inscription'])) { $nom = htmlentities(trim($_POST['nom'])); // On récupère le nom $prenom = htmlentities(trim($_POST['prenom'])); // on récupère le prénom $mail = htmlentities(strtolower(trim($_POST['mail']))); // On récupère le mail $mdp = trim($_POST['mdp']); // On récupère le mot de passe $confmdp = trim($_POST['confmdp']); // On récupère la confirmation du mot de passe // Vérification du nom if (empty($nom)) { $valid = false; $er_nom = "Le nom d' utilisateur ne peut pas être vide"; } // Vérification du prénom if(empty($prenom)){ $valid = false; $er_prenom = "Le prenom d' utilisateur ne peut pas être vide"; } // Vérification du mail if(empty($mail)){ $valid = false; $er_mail = "Le mail ne peut pas être vide"; // On vérifit que le mail est dans le bon format } else if(!preg_match("/^[a-z0-9\-_.]+@[a-z]+\.[a-z]{2,3}$/i", $mail)){ $valid = false; $er_mail = "Le mail n'est pas valide"; } else { // On vérifit que le mail est disponible $query = $bdd->prepare("SELECT mail FROM Utilisateur"); $query->execute(array($mail)); $data = $query->fetch(); if ($data) { $valid = false; echo "existe déjà"; } } // Vérification du mot de passe if(empty($mdp)) { $valid = false; $er_mdp = "Le mot de passe ne peut pas être vide"; } else if($mdp != $confmdp){ $valid = false; $er_mdp = "La confirmation du mot de passe ne correspond pas"; } // Si toutes les conditions sont remplies alors on fait le traitement if($valid){ $mdp = crypt($mdp, "$6$rounds=5000$macleapersonnaliseretagardersecret$"); $date_creation = date('Y-m-d H:i:s'); // On insert nos données dans la table utilisateur $bdd->insert("INSERT INTO Utilisateur (nom, prenom, mail, mdp, date_creation) VALUES (?, ?, ?, ?, ?)", array($nom, $prenom, $mail, $date_creation)); header('Location: index.php'); exit; } /* else { echo "invalide"; } */ } } ?>
Edit: correctement des balises de code
jordane45
Messages postés
38358
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
28 décembre 2024
4 719
4 févr. 2021 à 06:52
4 févr. 2021 à 06:52
Elle vient d'où ta methode insert
Ps: merci de préciser le langage dans les balises de code
Explications à lire entièrement disponibles ici
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
.
$bdd->insert(
Ps: merci de préciser le langage dans les balises de code
Explications à lire entièrement disponibles ici
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
.
jordane45
Messages postés
38358
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
28 décembre 2024
4 719
>
jordane45
Messages postés
38358
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
28 décembre 2024
4 févr. 2021 à 06:54
4 févr. 2021 à 06:54
En plus tu as retiré le where dans ta requête select...
Et tu n'as pas remis les try/catch ( A CHQUE REQUÊTE !)
Et tu n'as pas remis les try/catch ( A CHQUE REQUÊTE !)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Merci pour l'information sur les balises.
"insert" venait de PDO dans le fichier importé "connexion_db.php".
Cela dit, j'ai fait quelques changement avec notamment les try-catch. Le problème est maintenant ailleurs et elle se trouve plutôt au niveau de la requête dans laquelle j'ai changé la structure. Mais, ça ne marche pas. Voici le code :
"insert" venait de PDO dans le fichier importé "connexion_db.php".
Cela dit, j'ai fait quelques changement avec notamment les try-catch. Le problème est maintenant ailleurs et elle se trouve plutôt au niveau de la requête dans laquelle j'ai changé la structure. Mais, ça ne marche pas. Voici le code :
<?php session_start(); require_once "connexion_db.php"; if(isset($_SESSION["id"])) { header('Location: index.php'); exit; } if(!empty($_POST)) { $valid = true; // On se place sur le bon formulaire grâce au "name" de la balise "input" if(isset($_POST['inscription'])) { $nom = htmlentities(trim($_POST['nom'])); // On récupère le nom $prenom = htmlentities(trim($_POST['prenom'])); // on récupère le prénom $mail = htmlentities(strtolower(trim($_POST['mail']))); // On récupère le mail $mdp = trim($_POST['mdp']); // On récupère le mot de passe $confmdp = trim($_POST['confmdp']); // On récupère la confirmation du mot de passe // Vérification du nom if (empty($nom)) { $valid = false; $er_nom = "Le nom d' utilisateur ne peut pas être vide"; } // Vérification du prénom if(empty($prenom)){ $valid = false; $er_prenom = "Le prenom d' utilisateur ne peut pas être vide"; } // Vérification du mail if(empty($mail)) { // On vérifit que le mail est dans le bon format $valid = false; $er_mail = "mail vide"; } else if(!preg_match("/^[a-z0-9\-_.]+@[a-z]+\.[a-z]{2,3}$/i", $mail)) { $valid = true; $er_mail = "Le mail invalide"; } // Vérification du mot de passe if(empty($mdp)) { $valid = false; $er_mdp = "Le mot de passe ne peut pas être vide"; } else if($mdp != $confmdp){ $valid = false; $er_mdp = "La confirmation du mot de passe ne correspond pas"; } // Si toutes les conditions sont remplies alors on fait le traitement if($valid) { $mdp = crypt($mdp, "$6$rounds=5000$macleapersonnaliseretagardersecret$"); $date_creation = date('Y-m-d H:i:s'); // On insert nos données dans la table utilisateur try { //$bdd->insert("INSERT INTO Utilisateur (nom, prenom, mail, mdp, date_creation) VALUES (?, ?, ?, ?, ?)"); $query = $bdd->prepare("INSERT INTO Utilisateur (nom, prenom, mail, mdp, date_creation) VALUES (?, ?, ?, ?, ?)"); $query->bindValue(':nom', $nom); $query->bindValue(':prenom', $prenom); $query->bindValue(':mail', $mail); $query->bindValue(':mdp', $mdp); $query->bindValue(':date_creation', $date_creation); $query->execute([$nom, $prenom, $mail, $mdp, $date_creation]); header('Location: index.php'); exit; } catch (Exception $e) { echo $e->getMessage(); } } } } ?>
jordane45
Messages postés
38358
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
28 décembre 2024
4 719
4 févr. 2021 à 09:51
4 févr. 2021 à 09:51
Tu dis :
Et donc.. quel est le problème ??
Tu as un message d'erreur ? si oui.. ben... faut nous le donner.
A savoir que
Si tu fais du BIND ... il ne faut pas, en plus, passer les variables dans le execute ...
Donc, soit tu fais :
ou alors
Et donc.. quel est le problème ??
Tu as un message d'erreur ? si oui.. ben... faut nous le donner.
A savoir que
Si tu fais du BIND ... il ne faut pas, en plus, passer les variables dans le execute ...
Donc, soit tu fais :
try { //$bdd->insert("INSERT INTO Utilisateur (nom, prenom, mail, mdp, date_creation) VALUES (?, ?, ?, ?, ?)"); $query = $bdd->prepare("INSERT INTO Utilisateur (nom, prenom, mail, mdp, date_creation) VALUES (:nom, :prenom, :mail, :mdp, :date_creation)"); $query->bindValue(':nom', $nom); $query->bindValue(':prenom', $prenom); $query->bindValue(':mail', $mail); $query->bindValue(':mdp', $mdp); $query->bindValue(':date_creation', $date_creation); $query->execute(); header('Location: index.php'); // je te conseille de le mettre en commentaire le temps de tes testes.. pour pouvoir lire les éventuelles erreurs .... exit; } catch (Exception $e) { echo $e->getMessage(); }
ou alors
try { //$bdd->insert("INSERT INTO Utilisateur (nom, prenom, mail, mdp, date_creation) VALUES (?, ?, ?, ?, ?)"); $query = $bdd->prepare("INSERT INTO Utilisateur (nom, prenom, mail, mdp, date_creation) VALUES (?, ?, ?, ?, ?)"); $query->execute([$nom, $prenom, $mail, $mdp, $date_creation]); header('Location: index.php'); // // je te conseille de le mettre en commentaire le temps de tes testes.. pour pouvoir lire les éventuelles erreurs .... exit; } catch (Exception $e) { echo $e->getMessage(); }
Oui j'avais oublié de le dire qu'il ne se passait rien.
J'ai tenté de faire ces changements que tu m'as dis de faire. Mais toujours la même chose.
Voila le code ainsi que le code html de la page :
J'ai tenté de faire ces changements que tu m'as dis de faire. Mais toujours la même chose.
Voila le code ainsi que le code html de la page :
<?php session_start(); require_once "connexion_db.php"; if(isset($_SESSION["id"])) { header('Location: index.php'); exit; } if(!empty($_POST)) { $valid = true; // On se place sur le bon formulaire grâce au "name" de la balise "input" if(isset($_POST['inscription'])) { $nom = htmlentities(trim($_POST['nom'])); // On récupère le nom $prenom = htmlentities(trim($_POST['prenom'])); // on récupère le prénom $mail = htmlentities(strtolower(trim($_POST['mail']))); // On récupère le mail $mdp = trim($_POST['mdp']); // On récupère le mot de passe $confmdp = trim($_POST['confmdp']); // On récupère la confirmation du mot de passe // Vérification du nom if (empty($nom)) { $valid = false; $er_nom = "Le nom d' utilisateur ne peut pas être vide"; } // Vérification du prénom if(empty($prenom)){ $valid = false; $er_prenom = "Le prenom d' utilisateur ne peut pas être vide"; } // Vérification du mail if(empty($mail)) { // On vérifit que le mail est dans le bon format $valid = false; $er_mail = "mail vide"; } else if(!preg_match("/^[a-z0-9\-_.]+@[a-z]+\.[a-z]{2,3}$/i", $mail)) { $valid = true; $er_mail = "Le mail invalide"; } // Vérification du mot de passe if(empty($mdp)) { $valid = false; $er_mdp = "Le mot de passe ne peut pas être vide"; } else if($mdp != $confmdp){ $valid = false; $er_mdp = "La confirmation du mot de passe ne correspond pas"; } // Si toutes les conditions sont remplies alors on fait le traitement if($valid) { $mdp = crypt($mdp, "$6$rounds=5000$macleapersonnaliseretagardersecret$"); //$date_creation = date('Y-m-d H:i:s'); // On insert nos données dans la table utilisateur try { //$bdd->insert("INSERT INTO Utilisateur (nom, prenom, mail, mdp, date_creation) VALUES (?, ?, ?, ?, ?)"); $bdd->beginTranscation(); $query = $bdd->prepare("INSERT INTO Utilisateur (nom, prenom, mail, mdp, $date_creation) VALUES (?, ?, ?, ?, ?)"); // $query->bindValue(':nom', $nom); // $query->bindValue(':prenom', $prenom); //$query->bindValue(':mail', $mail); //$query->bindValue(':mdp', $mdp); //$query->bindValue(':date_creation', $date_creation); $query->execute([$nom, $prenom, $mail, $mdp, $date_creation]); //header('Location: index.php'); echo "Réussi"; exit; } catch (Exception $e) { echo $e->getMessage(); } } } } ?>
<!DOCTYPE html> <html lang="fr"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Inscription</title> </head> <body> <div>Inscription</div> <form method="post"> <?php if (isset($er_nom)) { ?> <div><?php $er_nom ?></div> <?php } ?> <input type="text" placeholder="Votre nom" name="nom" value="<?php if(isset($nom)){ echo $nom; }?>" required> <?php if (isset($er_prenom)){ ?> <div><?= $er_prenom ?></div> <?php } ?> <input type="text" placeholder="Votre prénom" name="prenom" value="<?php if(isset($prenom)){ echo $prenom; }?>" required> <?php if (isset($er_mail)){ ?> <div><?= $er_mail ?></div> <?php } ?> <input type="email" placeholder="Adresse mail" name="mail" value="<?php if(isset($mail)){ echo $mail; }?>" required> <?php if (isset($er_mdp)){ ?> <div><?= $er_mdp ?></div> <?php } ?> <input type="password" placeholder="Mot de passe" name="mdp" value="<?php if(isset($mdp)){ echo $mdp; }?>" required> <input type="password" placeholder="Confirmer le mot de passe" name="confmdp" required> <button type="submit" name="inscription">Envoyer</button> </form> </body> </html>
J'ai pu enfin régler le problème. Le problème plutôt de la base de données. Il y avait un problème avec le "nom". j'ai retiré l'affectation de $POST_nom à $nom. et dans la requête j'ai mis la valeur récupéré dans le formulaire dans le bindValue. Quand tout cela s'exécute, dans la base de données l'id commence à 2 je ne sais pas si ça a un lien. Mais en tout cas, je te remercie pour ta contribution à la résolution de mon problème.
Oui, en effet, j'ai repris du code sur internet pour ne pas reprendre de zéro. Je ferai attention pour la prochaine fois. Quand tu vois que tu bloques, il faut tenter des choses. C'est vrai que j'ai implémenté du code inattendu parfois. Mais je savais la logique de ce code. Au final j'ai appris pour la suite. ;)
Oui, en effet, j'ai repris du code sur internet pour ne pas reprendre de zéro. Je ferai attention pour la prochaine fois. Quand tu vois que tu bloques, il faut tenter des choses. C'est vrai que j'ai implémenté du code inattendu parfois. Mais je savais la logique de ce code. Au final j'ai appris pour la suite. ;)