<?php
/*
Page: connexion.php
*/
//à mettre tout en haut du fichier .php, cette fonction propre à PHP servira à maintenir la $_SESSION
session_start();
//si le bouton "Connexion" est cliqué
if(isset($_POST['connexion'])){
// on vérifie que le champ "Pseudo" n'est pas vide
// empty vérifie à la fois si le champ est vide et si le champ existe belle et bien (is set)
if(empty($_POST['pseudo'])){
echo "Le champ Pseudo est vide.";
} else {
// on vérifie maintenant si le champ "Mot de passe" n'est pas vide"
if(empty($_POST['mdp'])){
echo "Le champ Mot de passe est vide.";
} else {
// les champs pseudo & mdp sont bien postés et pas vides, on sécurise les données entrées par l'utilisateur
//le htmlentities() passera les guillemets en entités HTML, ce qui empêchera en partie, les injections SQL
$Pseudo = htmlentities($_POST['pseudo'], ENT_QUOTES, "UTF-8");
$MotDePasse = htmlentities($_POST['mdp'], ENT_QUOTES, "UTF-8");
//on se connecte à la base de données:
$mysqli = mysqli_connect("domaine.tld", "nom d'utilisateur", "mot de passe", "base de données");
//on vérifie que la connexion s'effectue correctement:
if(!$mysqli){
echo "Erreur de connexion à la base de données.";
} else {
//on fait maintenant la requête dans la base de données pour rechercher si ces données existent et correspondent:
//si vous avez enregistré le mot de passe en md5() il vous faudra faire la vérification en mettant mdp = '".md5($MotDePasse)."' au lieu de mdp = '".$MotDePasse."'
$Requete = mysqli_query($mysqli,"SELECT * FROM membres WHERE pseudo = '".$Pseudo."' AND mdp = '".$MotDePasse."'");
//si il y a un résultat, mysqli_num_rows() nous donnera alors 1
//si mysqli_num_rows() retourne 0 c'est qu'il a trouvé aucun résultat
if(mysqli_num_rows($Requete) == 0) {
echo "Le pseudo ou le mot de passe est incorrect, le compte n'a pas été trouvé.";
} else {
//on ouvre la session avec $_SESSION:
//la session peut être appelée différemment et son contenu aussi peut être autre chose que le pseudo
$_SESSION['pseudo'] = $Pseudo;
echo "Vous êtes à présent connecté !";
}
}
}
}
}
?>
<!--
Les balises <form> servent à dire que c'est un formulaire
on lui demande de faire fonctionner la page connexion.php une fois le bouton "Connexion" cliqué
on lui dit également que c'est un formulaire de type "POST" (récupéré via $_POST en PHP)
Les balises <input> sont les champs de formulaire
type="text" sera du texte
type="password" sera des petits points noir (texte caché)
type="submit" sera un bouton pour valider le formulaire
name="nom de l'input" sert à le reconnaitre une fois le bouton submit cliqué, pour le code PHP (récupéré via $_POST["nom de l'input"] en PHP)
-->
<form action="connexion.php" method="post">
Pseudo: <input type="text" name="pseudo" />
<br />
Mot de passe: <input type="password" name="mdp" />
<br />
<input type="submit" name="connexion" value="Connexion" />
</form>
J'espère que ce script gratuit vous est utile.Pour soutenir mon travail, un simple don ou mettre une note est grandement apprécié.
Vous cherchez à pousser encore plus loin vos idées ou à les concrétiser avec un site internet sur mesure ? Je suis là pour vous aider ! Mon expérience en développement web est à votre disposition.
Que ce soit la création de votre site web pro ou l'apport de fonctionnalités avancées à votre projet, contactez-moi pour en discuter et avoir un devis gratuit personnalisé.
Mon objectif est de vous offrir des solutions sur mesure qui répondent à vos besoins, et votre vision associée à mon expertise donnera vie à votre projet web parfait. Contactez-moi aujourd'hui, je réponds en général en moins d'une heure :
Demander un devisVeenZ le 11 Octobre 2013 à 12:10
Merci c'est un très bon code !
Very well! le 02 Octobre 2015 à 13:41
Merci pour ce code clair et pratique.
Pour la vérification des champs du formulaire, vous pouvez faire comme ceci:
if(empty($_POST['pseudo']) OR empty($_POST['mot_de_passe'])) {
echo "Une des champs est vide.";
} else {
...
bernard le 05 Février 2017 à 17:08
bonjour, je vais essayer d'utiliser votre code pour faire une page de connexion sur mon site. Par contre, une fois la connexion établie, peut-on renvoyer le membre vers une des pages du site web. Merci pour votre code.
admin le 05 Février 2017 à 22:05
Bonjour,
bien évidement, il vous suffit pour cela de faire une redirection avec la fonction PHP header().
A la place du texte:
echo "Vous êtes à présent connecté !";
Mettez:
header("Location: http://www.example.com/votre-page"); // Redirection du navigateur
exit;//on affiche pas le reste de la page pour faire une redirection parfaite et sans erreurs
Assurez-vous d'utiliser cette fonction au dessus de la balise <html> de votre page pour qu'elle ne produise pas d'erreur et fonctionne parfaitement.
tokosel le 10 Novembre 2018 à 03:10
merci pour le script j'ai pu l'adapter
Gaël Mk le 30 Mai 2020 à 19:15
Merci pour ce code mais j'ai un petit souci,
Une fois rentré le pseudo et le mot de pass après vérification, rien n'est enregistré dans m BDD dans la table membres
Merci d'avance
admin le 31 Mai 2020 à 21:18
Bonjour, il vous faut débuguer petit à petit: pour connaitre l'erreur.
niki le 03 Août 2020 à 10:15
Bonjour Monsieur et merci pour pour le code. je travail sur un formulaire d'inscription d'un étudiant pour un exposé à l'école. je souhaite afficher les informations saisir par l'étudiant en question à l'écran pour qu'il puis apporter une modification s'il y a erreur avant de l 'enregistrer dans la base de donnée. merci de bien vouloir me mettre sur la voie.
admin le 03 Août 2020 à 10:35
Bonjour,
vous avez ce tuto pour ré-afficher les champs de formulaire en cas d'erreur: https://www.c2script.com/scripts/reafficher-les-champs-du-formulaire-en-php-s38.html
Talwa le 07 Novembre 2020 à 20:02
comment mettre une page secrète par exemple lorsque je demande une page user avant de mettre le login et password if faut passer par une phase authentification qui est d'abord le form de login et et de passe mais je ne sais pas comment le faire
admin le 07 Novembre 2020 à 23:16
Bonjour, vous pouvez prendre exemple sur le script d'utilisateur connecté
aliou le 20 Novembre 2020 à 00:32
c bien
oui le 08 Juin 2021 à 15:16
MERCI!!!!!!!
Claire le 14 Octobre 2021 à 21:07
Bonjour,
Comment faire si le mot est crypté avec bcrypt ?
J'ai essayé avec password_verify($password, $hash)
Et cela ne fonctionne pas, avant j'ai bien sûr déclaré la variable $hash
admin le 14 Octobre 2021 à 21:39
Bonjour, voir la doc pour faire fonctionner le password_hash
vital le 15 Août 2022 à 23:44
bonsoir suis un debutant en programmation et j'aimerais savoir le fait que mon bouton connexion soit avec la balise <button> posera probleme? vu que le votre a ete fait avec un input.
admin le 16 Août 2022 à 00:48
Mettez simplement l'attribut type avec la valeur submit à votre button pour le transformer en bouton de soumission.
Exemple :
<button type="submit">Valider</button>
johanna le 21 Février 2023 à 15:17
Bonjour,
J'ai bien adapté votre code de formulaire mais rien ne se passe? Pouvez -vous m'éclairer car je ne vois pas du tout ce qui bloque
Merci beaucoup
je vous met mon code ci-dessous :
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>CONNEXION</title>
</head>
<body>
<header>
<h1>Identification</h1>
</header>
<form action="index.php" method="post">
<label for="login">Votre login</label>
<input type="text" name="user_input_login">
<p><label for="password">Votre mot de passe</label></p>
<input type="text" name="user_input_password">
<p><input type="submit" value="valider" class="bouton"></p>
</form>
</body>
</html>
<?php
require ('inc_connexion.php');
session_start();
if(isset($_POST['valider'])){
if(empty($_POST['user_input_login'])){
echo '<p>Le champ Login est vide.</p>';
} else {
if(empty($_POST['user_input_password'])){
echo '<p>Le champ mot de passe est vide.</p>';
} else {
$user_login = $_POST['user_input_login'];
$user_password = $_POST['user_input_password'];
$result = $mysqli->query('SELECT user_id,user_login, user_password FROM users WHERE user_login = "'.$user_login.'" AND user_password = "'.$user_password.'"');
if ($row($result) == 0) {
echo '<p class="error">Le pseudo ou le mot de passe est incorrect, le compte n\'a pas été trouvé.</p>';
} else {
$_SESSION['$user_login'] = $user_login;
header('location: http://localhost/php_intermediaire_1/index.php'); // Redirection du navigateur
exit;//on affiche pas le reste de la page pour faire une redirection parfaite et sans erreurs
}
}
}
}
?>
admin le 21 Février 2023 à 15:22
Vous avez deux anti slash à "...le compte n\\'a pas été trouvé...."
johanna le 21 Février 2023 à 15:28
euh.... je crois pas
admin le 21 Février 2023 à 15:30
En effet, c'est mon webmail qui ma ajouté un antislash, désolé.
Avez vous une erreur PHP qui s'affiche à l'écran ?
Les erreurs sont bien activées ?
Si oui, mettez des debug de ci et là pour savoir jusqu'où va le code et là où ya l'erreur.
johanna le 21 Février 2023 à 15:44
Aucune erreur de PHP
Peu importe le login ou passsword ou même vide, dès que je clique sur valider il m'envoie quand même à la page accueil.
J'ai aussi un formulaire de recherche dans autre fichier, je ne sais pas si ça peut venir de ça?
admin le 21 Février 2023 à 15:47
$row($result) = incorrect
Attention aux injections SQL, si vous utilisez PDO, autant bien l'utiliser avec une requête préparée.
johanna le 21 Février 2023 à 16:15
rien n'y fait
je n'utlise pas PDO, je ne sais même pas à quoi cela sert.
c'est comme si cette page index.php ne prenait pas en compte mon code PHP.
admin le 21 Février 2023 à 16:17
Si vous ne comprenez pas PDO, pourquoi l'utiliser ? (query())
Reprenez mon code, sans le modifier et testez, ça fonctionne.
johanna le 21 Février 2023 à 16:23
query() pour appeler la requête ???
je suis désolée je débute et ça devient...corsé
mais je vous remercie pour votre rapidité et efficacité.
je vais suivre votre conseil je vais utiliser votre code et l'adapter en fonction.
on verra bien :-)
johanna le 21 Février 2023 à 17:26
rien n'y fait
je n'utlise pas PDO, je ne sais même pas à quoi cela sert.
c'est comme si cette page index.php ne prenait pas en compte mon code PHP.
admin le 21 Février 2023 à 17:29
PDO : https://www.php.net/manual/fr/pdo.query.php
Procédural : https://www.php.net/manual/fr/mysqli.query.php
Mettez seulement un <?php echo "Hello world!"; ?> dans votre page et vous serez si le PHP est pris en compte.
Guillaume le 14 Avril 2023 à 06:24
Bonjour à tous, avez-vous déjà essayé de ne pas faire 2 fautes de français par ligne .. dans chacune de vos phrases sur internet ? *sourires*.. ;)
Guibs
Fgyugu le 23 Avril 2023 à 22:53
Merci beaucoup
admin le 25 Avril 2023 à 13:13
@Guillaume : Oui, chacun à son rythme.
Owen le 26 Août 2023 à 05:29
Bonjour à tous et à chacun. Admin, j'ai presque le même souci que Johanna. le code pour l'inscription fonctionne bien, par contre celui de connexion, rien ne se produit. On dirait que php n'est pas pris en compte.
Merci
admin le 02 Septembre 2023 à 21:10
Je peux vous conseiller d'afficher les erreurs PHP à l'écran afin que vous puissiez débugguer la situation et savoir ce qui ne va pas.
Il se peut que ce soit le type de transfert de votre FTP qui n'est pas en binaire et vous envoi le code PHP sur une seule ligne, ce qui pose souci.
toky le 26 Novembre 2024 à 08:36
bonjour admin
pouvez vous bien explique le méthode d'utilisation de base de donnée
merçie
admin le 26 Novembre 2024 à 16:40
Bonjour, tous les commentaires sont là pour vous aider à comprendre le fonctionnement.
Souhaitez-vous apprendre quelque chose en particulier ?