Bonjour à tous ,
je suis entrain de faire un petit site en interne pour m'experimenter j'ai reussi a regler 4 probleme sur 5 mais j'en n'est 1 qui resiste
a chaque fois que je rempli mon formulaire il ne s'envoi pas dans la BDD car il me dit que mon champ password est vide alors qu'il est rempli ,
Parti dans le formulaire html
<?php if(isset($err_password)){ echo '<div>' . $err_password . '</div>';} ?>
<input type="password" name="password" value="<?php if(isset($password)){ echo $password;} ?>" placeholder="Votre mot de passe"/>
parti PHP
require('include.php');
if (!empty($_POST)) {
extract($_POST);
$valid = (boolean) true;
if (isset($_POST['inscription'])) {
$prenom = (String) ucfirst(trim($prenom));
$nom = (String) trim($nom);
$email = (String) trim($email);
$password = (String) trim($password);
$classement = isset($classement) ? (String) trim($classement) : '';
// Vérification des autres champs
if(empty($prenom)) {
$valid = false;
$err_prenom = "Ce champ ne peut etre vide";
} else {
$req = $DB->prepare("SELECT id FROM utilisateurs WHERE prenom = ?");
$req->execute(array($prenom));
$req = $req->fetch();
}
if(empty($nom)) {
$valid = false;
$err_nom = "Ce champ ne peut etre vide";
} else {
$req = $DB->prepare("SELECT id FROM utilisateurs WHERE nom = ?");
$req->execute(array($nom));
$req = $req->fetch();
}
if(empty($email)){
$valid = false;
$err_email = "Ce champ ne peut etre vide";
}else{
$req = $DB->prepare("SELECT id FROM utilisateurs WHERE email = ?");
$req->execute(array($email));
$req = $req->fetch();
if(isset($req['id'])) {
$valid = false;
$err_email = "Ce mail est déjà pris";
}
}
if(empty($password)) {
$valid = false;
$err_password = "Ce champ ne peut etre vide";
}
if(empty($classement)) {
$valid = false;
$err_classement = "Ce champ ne peut etre vide";
} else {
$req = $DB->prepare("SELECT id FROM utilisateurs WHERE classement = ?");
$req->execute(array($classement));
$req = $req->fetch();
}
if ($valid) {
$crypt_password = crypt($password, '$6$rounds=5000$lGM_0>Ob4X@vtL+_tiG*9@2YrN*^nWX!,n!4]HbaK8Vusv`gE*C@qoA%?g*xDS`|');
$req = $DB->prepare("INSERT INTO utilisateurs(prenom, nom, email, mdp, classement) VALUES (?, ?, ?, ?, ?)");
$req->execute(array($prenom, $nom, $email, $crypt_password, $classement));
header('Location: /');
exit;
}
}
}
J'ai un peut de mal à voir d'où pourrait venir l'erreur. Le mieux serait que tu envoie la partie du code php où tu récupère le contenu du champ password. Et aussi tu devrais ajouter l'attribut required
à tes inputs du côté de l'html.
Bonsoir, tu n'arrives pas à insérer les données ? et quelle est l'erreur que tu as obtenues?
<input type="password" name="password" value="<?php if(isset($password)){ echo $password;} ?>" placeholder="Votre mot de passe"/>
if (isset($_POST['inscription'])) {
$password = (String) trim($password);
if(empty($password)) {
$valid = false;
$err_password = "Ce champ ne peut etre vide";
}
}
la variable password, ou est-ce qu'elle est déclarée avant de valider le formulaire? à mon humble avis, je pense que le systeme doit te retourner une erreur au niveau du formulaire.
Je remarque la variable password est vérifier dans une condition ou la variable $_POST[''inscription']
est vérifiée au départ. alors je ne comprends la logique un peu là
Honnêtement, je ne sais pas ou tu veux vraiment en venir mais il y a quelqu'un ici qui m'avait un jour dit, qu'il est important de se rendre la vie facile. Si la seule raison est de récupérer la valeur du champ password, alors je te propose d'utiliser une solution simple qui ne va pas trop te compliquer. j'utiliser le javascrip pour verifier si mon champ contient une valeur sinon il m'affichera le message d'erreur dans div avec comme id msg.
j'ai mon petit formulaire
<!DOCTYPE html>
<html>
<head>
<title>Cours JavaScript</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<input type="password" name="password" class="form-control form-control-sm" id="password" placeholder="Votre mot de passe"/>
<div id="msg"></div>
<button type="submit" name="inscription" id="valid" class="btn btn-primary btn-sm">valide</button>
<script src="https://code.jquery.com/jquery-3.7.1.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
$(document).on("click", "#valid", function()
{
if(document.getElementById('password').value == "")
{
document.getElementById("msg").innerText = "Ce champ ne peut pas etre vide";
}
else
{
document.getElementById("msg").innerText = document.getElementById('password').value;
}
});
Tu peux l'ameliorer comme tu veux mais je pense ça donnera une idée pour évoluer avec ton projet du moins si cette methode de faire t'interessera