Dicton du 19 Avril:
Saint-Ursmar prend, la dernière neige de l'an.

Télécharger
Noter:

Formulaire de connexion en PHP

Description

Formulaire de connexion, simple, en utilisant l'extension MySQLi de PHP et HTML.

Code source (PHP)

<?php
/*
Page: connexion.php
*/
session_start(); // à mettre tout en haut du fichier .php, cette fonction propre à PHP servira à maintenir la $_SESSION
if(isset($_POST['connexion'])) { // si le bouton "Connexion" est appuyé
// 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 sont bien posté et pas vide, on sécurise les données entrées par le membre:
$Pseudo = htmlentities($_POST['pseudo'], ENT_QUOTES, "ISO-8859-1"); // le htmlentities() passera les guillemets en entités HTML, ce qui empêchera les injections SQL
$MotDePasse = htmlentities($_POST['mdp'], ENT_QUOTES, "ISO-8859-1");
//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 existe et correspondent:
$Requete = mysqli_query($mysqli,"SELECT * FROM membres WHERE pseudo = '".$Pseudo."' AND mdp = '".$MotDePasse."'");//si vous avez enregistré le mot de passe en md5() il vous suffira de faire la vérification en mettant mdp = '".md5($MotDePasse)."' au lieu de 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:
$_SESSION['pseudo'] = $Pseudo; // la session peut être appelée différemment et son contenu aussi peut être autre chose que le pseudo
echo "Vous êtes à présent connecté !";
}
}
}
}
}
?>


La partie HTML (le formulaire):

Code source (HTML)

<!-- 
Les balises <form> sert à 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"

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
-->

<form action="connexion.php" method="post">
Pseudo: <input type="text" name="pseudo" value="" />
<br />
Mot de passe: <input type="password" name="mdp" value="" />
<br />
<input type="submit" name="connexion" value="Connexion" />
</form>

Commentaires

Merci c'est un très bon code !

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 {
...

Bonjour , j'aimerai savoir comment on ajoute des compte dans la base de donnée (pseudo et mot de passe)

Bonjour, le script d'inscription pourra vous aider: Formulaire d'inscription simple en PHP

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.

Bonjour,

bien évidement, il vous suffit pour cela de faire une redirection avec la fonction PHP header().

A la place du texte:

Code source (PHP)

echo "Vous êtes à présent connecté !";


Mettez:

Code source (PHP)

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.

Bonjour, pour la base de donnée, qu'est qu'on dois mettre à la place de domaine.tld et base de données:  $mysqli = mysqli_connect("domaine.tld", "nom d'utilisateur", "mot de passe", "base de données");

et pour cette requette :
 $Requete = mysqli_query($mysqli,"SELECT * FROM table_membres WHERE pseudo = '".$Pseudo."' AND mot_de_passe = '".$MotDePasse."'");
si dans ma base de donnés le pseudo il s'appelle mail et mo de passe s'appele password, je le remplace ou ? c'est comme ca:
                $Requete = mysqli_query($mysqli,"SELECT * FROM table_membres WHERE mail = '".$Pseudo."' AND password = '".$MotDePasse."'");


sachant que j'ai un compte sur phpmyadmin

Bonjour,

il vous faut afficher un champ "mail" dans le formulaire de connexion à la place de pseudo puis utiliser la deuxième requête:

Code source (PHP)

$Requete = mysqli_query($mysqli,"SELECT * FROM table_membres WHERE mail = '".$Pseudo."' AND password = '".$MotDePasse."'");


Le formulaire sera:

Pseudo: <input type="text" name="pseudo" value="" />
Mail: <input type="text" name="mail" value="" />

Vous pouvez aussi mettre type="email" à la place de type="text", si le navigateur le prend en compte, cela permet de vérifier le champ avant d'être envoyé au serveur.

bonsoir lorsque j'execute et avec toute les modifications faite en accord avec ma bdd voila ce qui s'affiche


Warning: mysqli_query() expects at least 2 parameters, 1 given in C:\Program Files (x86)\EasyPHP-DevServer-14.1VC9\data\localweb\scripts\sig\formulairephp.php on line 25

Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, null given in C:\Program Files (x86)\EasyPHP-DevServer-14.1VC9\data\localweb\scripts\sig\formulairephp.php on line 28
Le pseudo ou le mot de passe est incorrect, le compte n'a pas été trouvé.

Bonjour,

veillez à bien utiliser votre variable PHP pour la requête MySQLi:

mysqli_query($votre_variable_de_connexion_ici,...

bonjour , apres qq modification , lorsque je test en localhost cela me met une page blanche ! je commenece a désesperer , pouvez vous m'indiquer des erreurs

<?
session_start();
if(isset($_POST['connexion'])) {
if(empty($_POST['IdSal'])) {
echo "Le champ Pseudo est vide.";
} else {
if(empty($_POST['MdpSal'])) {
echo "Le champ Mot de passe est vide.";
} else {
$Pseudo = ($_GET['IdSal']);
$MotDePasse = ($_GET['MdpSal']);
$link = mysqli_connect("localhost","root","","basedonneeprojet")
$Requete = mysqli_query($link, "SELECT * FROM salarié WHERE IdSal = '".$Pseudo."' AND MdpSal = '".$MotDePasse."'") or die(mysql_error());

if(mysqli_num_rows($Requete) == 0) {
echo "Le pseudo ou le mot de passe est incorrect, le compte n'a pas été trouvé.";
} else {
$_SESSION['IdSal'] = $Pseudo;
echo "Vous êtes à présent connecté !";
}
}
?>

- Pensez à mettre le "php" dans l'ouverture de vos tags: <?php et non <? seulement
- Prenez garde de bien sécuriser vos variables du formulaire, ne jamais faire confiance à ce que l'utilisateur entre

Code source (PHP)

<?php
session_start();
if(isset($_POST['connexion'])) {
if(empty($_POST['IdSal'])) {
echo "Le champ Pseudo est vide.";
} else {
if(empty($_POST['MdpSal'])) {
echo "Le champ Mot de passe est vide.";
} else {
$Pseudo = $_GET['IdSal'];
$MotDePasse = ($_GET['MdpSal']);
$link = mysqli_connect("localhost","root","","basedonneeprojet")
$Requete = mysqli_query($link, "SELECT * FROM salarié WHERE IdSal = '".$Pseudo."' AND MdpSal = '".$MotDePasse."'") or die(mysql_error());
if(mysqli_num_rows($Requete) == 0) {
echo "Le pseudo ou le mot de passe est incorrect, le compte n'a pas été trouvé.";
} else {
$_SESSION['IdSal'] = $Pseudo;
echo "Vous êtes à présent connecté !";
}
}
}//il manquait cette accolade
}//et cette accolade
?>

bonjour , merci de votre aide rapide , je suis en terminale Stmg SIG , c'est donc mon projet de fin d'année et je vous remercie de m'aider . j'ai copié/collé le code que vous m'avez envoyer et cela me retourne cette erreur

Parse error: syntax error, unexpected '$Requete' (T_VARIABLE) in C:\Program Files (x86)\EasyPHP-DevServer-14.1VC9\data\localweb\scripts\sig\formulairephp.php on line 14


d’après ce que je comprend ( et dieu sait que je comprends pas grand chose , ahha ) cela signifie que ma variable $requete n'est pas détecté car il y'a une erreur de
syntaxe ?

merci de votre aide

Bonjour, en effet il manque le point virgule à la ligne au dessus:

$link = mysqli_connect("localhost","root","","basedonneeprojet"); <- ici

c'est donc bien une erreur de syntax

Bonjour j'ai un petit soucis avec votre code

Parse error: syntax error, unexpected '{' in C:wamp64wwwmHmphplogin.php on line 4

Voici le code :

<?php
session_start();
if(isset($_POST['connexion'])) {
    if(empty($_POST['login'])) {
        echo "Le champ Identifiant est vide.";
    } else {
        if(empty($_POST['password'])) {
            echo "Le champ Mot de passe est vide.";
        } else {
            $login = $_GET['login'];
            $password = ($_GET['password']);
            $link = mysqli_connect("localhost","root","","mhm");
            $Requete = mysqli_query($link, "SELECT * FROM membres WHERE login = '".$login."' AND password = '".$password."'") or die(mysql_error());
            if(mysqli_num_rows($Requete) == 0) {
                echo "L'identifiant ou le mot de passe est incorrect. Le compte n'a pas été trouvé.";
            } else {
                $_SESSION['login'] = $login;
                echo "Vous êtes à présent connecté !";
            }
        }
    }//il manquait cette accolade
}//et cette accolade
?>

Cette erreur de { me rend fou !!!

qu'avez-vous à la ligne 4 en partant de tout en haut du fichier login.php ?

PS: je viens de voir une erreur aussi, vous utilisez des $_GET ($_GET['login'] et $_GET['password']) il vous utiliser des $_POST, get c'est pour les variables dans l'URL, comme par exemple:
c2script.com/?variable=1
où variable vaut 1 en récupérant sa valeur comme ceci: $_GET['variable']

Salut! Merci pour ce code mais alors que je n'ai pas de compte, comment créer un compte dans php myadmin? merci d'avance!

Bonsoir, si vous avez un hébergement mutualisé, il vous suffit de créer une base de données avec votre panel.

voila merci d evotre aide , le code est juste MAIS ( parceque il y'a toujours un mais =( ) cela m'affiche une page blanche
je vous donne qq info supplementaire je ne sais pas si elle sont utiles : je travaille sur easyPhP dev server 14.1 VC9 , ma base est sur PhPMyAdmin . voila le code

<?php
session_start();
if(isset($_POST['connexion'])) {
if(empty($_POST['IdSal'])) {
echo "Le champ Pseudo est vide.";
} else {
if(empty($_POST['MdpSal'])) {
echo "Le champ Mot de passe est vide.";
} else {
$Pseudo = $_GET['IdSal'];
$MotDePasse = ($_GET['MdpSal']);
$link = mysqli_connect("localhost","root","","basedonneeprojet");
$Requete = mysqli_query($link, "SELECT * FROM salarié WHERE IdSal = '".$Pseudo."' AND MdpSal = '".$MotDePasse."'") or die(mysql_error());
if(mysqli_num_rows($Requete) == 0) {
echo "Le pseudo ou le mot de passe est incorrect, le compte n'a pas été trouvé.";
} else {
$_SESSION['IdSal'] = $Pseudo;
echo "Vous êtes à présent connecté !";
}
}
}//il manquait cette accolade
}//et cette accolade
?>


merci

Bonjour, veuillez coller le code complet de votre page login s'il vous plaît, l'erreur vient peut être pas ce bout de code.

Toujours le même message d'erreur:'' Parse error: syntax error, unexpected '{' in C:wamp64wwwmHmcontentconnexion.php on line 5 ''

Code :

<?php
session_start();

if(isset($_POST['connexion'])) {
    if(empty($_POST['login'])) {
        echo "Le champ Identifiant est vide.";
    }
else {
        if(empty($_POST['password'])) {
            echo "Le champ Mot de passe est vide.";
        }
else {
            $pseudo = $_POST['login'];
            $pass = ($_POST['password']);
            $link = mysqli_connect("localhost","root","","mhm");
            $Requete = mysqli_query($link, "SELECT * FROM membres WHERE login = '".$pseudo."' AND password = '".$pass."'") or die(mysql_error());
            if(mysqli_num_rows($Requete) == 0) {
                echo "L'identifiant ou le mot de passe est incorrect. Le compte n'a pas été trouvé.";
            }
else {
                $_SESSION['login'] = $pseudo;
               // echo "Vous êtes à présent connecté !";

exit;//on affiche pas le reste de la page pour faire une redirection parfaite et sans erreurs
            }
        }
    }
}
?>

Le code est bon, par contre ça affiche rien parce que vous avez mis "echo" en commentaire, donc rien s'affiche puis vous coupez le reste de la page avec "exit;"

Affichez du texte avec echo "ici votre texte";

Le echo ou le exit ne change rien à l'érreur générer.
Ligne 5

if(empty($_POST['login'])) {
il n'y a pas d'erreur de syntaxe

voila ma page login


<form action="Programme 12.php" method="post">
MdpSal: <input type="text" name="MdpSal" value="" />


<input type="submit" name="connexion" value="Connexion" />
</form>

Bonjour romain et bary78, je me perds entre les deux.

Pour romain: mettez une page avec un nom sans espace comme pour votre "programme[ici l'espace]12.php" mettez plutôt: "programme12.php"

Ensuite, mettez des $_POST et non des $_GET dans la vérification de votre formulaire (dans le code PHP)


Pour bary78: le formulaire html n'est pas sur la même page, avec le traitement php ?

Merci de t'ocuppé de ns =)
Si ils sont sur la même page

il y a effectivement pas d'erreur de syntax à la ligne 5 si la ligne est en effet la verif POST login, par contre, comme souvent, il vous faut vérifier la ligne au dessus, il manque parfois un point virgule.

ce peut être aussi un code caché dans un espace, enlevez l'espace après l'accolade pour voir.

Collez tout le code

<?php
session_start();

if(isset($_POST['connexion'])) {
    if(empty($_POST['login'])) {
        echo "Le champ Identifiant est vide.";
    }
else {
        if(empty($_POST['password'])) {
            echo "Le champ Mot de passe est vide.";
        }
else {
            $pseudo = $_POST['login'];
            $pass = ($_POST['password']);
            $link = mysqli_connect("localhost","root","","mhm");
            $requete = mysqli_query($link, "SELECT * FROM membres WHERE login = '".$pseudo."' AND password = '".$pass."'") or die(mysql_error());
            if(mysqli_num_rows($requete) == 0) {
                echo "L'identifiant ou le mot de passe est incorrect. Le compte n'a pas été trouvé.";
            }
else {
                $_SESSION['login'] = $pseudo;
                echo "Vous êtes à présent connecté !";

header("Location: #lien"); // Redirection du navigateur
//exit; //on affiche pas le reste de la page pour faire une redirection parfaite et sans erreurs
            }
        }
    }
}
?>
<div class="test">
<br>
<br>
<br>
<center><div class="login-page">
<div class="form">
<form class="login-form" method="post">
<input type="text" name="login" placeholder="Identifiant"/>
<input type="password" name="password" placeholder="Mot de passe"/>

<input class="but" type="submit" value="Connexion" name="connexion" />
</form>
</div>
</div></center>
</div>

Le code s'affiche correctement sans générer d'erreur, de mon côté, avec wampserver.

Par contre, quand vous utilisez un "header location", veillez à bien mettre le exit; ensuite pour arrêter l’exécution du reste de la page

Il faut mettre soit un "echo" en disant qu'il est bien connecté et éventuellement mettre à disposition un lien pour accéder à l'espace privé.

Soit un "header location" et dans ce cas enlever le echo car il fera générer une erreur du à l'utilisation du HTML avant le code header()

D'accord donc ça doit venir de mon wamp

Bonjour, je suis face un problème avec ce code, tout est fait, selon moi comme vous, cependant il m'affiche toujours que le nom d'utilisateur ou mot de passe n'a pas été trouvé dans la base de donner


<?php
/*
Page: connexion.php
*/

if(isset($_POST['connexion'])) { // si le bouton "Connexion" est appuyé
// 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['mot_de_passe'])) {
echo "Le champ Mot de passe est vide.";
} else {
// les champs sont bien posté et pas vide, on sécurise les données entrées par le membre:
$Pseudo = htmlentities($_POST["pseudo"], ENT_QUOTES, "ISO-8859-1"); // le htmlentities() passera les guillemets en entités HTML, ce qui empêchera les injections SQL
$mot_de_passe = htmlentities($_POST["mot_de_passe"], ENT_QUOTES, "ISO-8859-1");
//on se connecte à la base de données:
$link = mysqli_connect("localhost", "root", "root", "utilisateur");
//on vérifie que la connexion s'effectue correctement:
if(!$link){
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 existe et correspondent:
$Requete = mysqli_query($link,"SELECT * FROM utilisateur WHERE pseudo = '".$Pseudo."'");
$Requete2 = mysqli_query($link,"SELECT * FROM utilisateur WHERE pseudo = '".$mot_de_passe."'");
// 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
echo $Requete;
echo $Requete2;
if(mysqli_num_rows($Requete) == 0 ){
if(mysqli_num_rows($Requete2) == 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:
$_SESSION['login'] = $Pseudo; // la session peut être appelée différemment et son contenu aussi peut être autre chose que le pseudo
echo "Vous êtes à présent connecté !";

exit;//on affiche pas le reste de la page pour faire une redirection parfaite et sans erreurs
}
}
}
}
}
?>

Bonjour Hugo,

vous recherchez 2 fois le pseudo au lieu de rechercher 1 fois le pseudo et 1 fois le mot de passe.

Je vous conseil de vérifier d'une seule requête, le pseudo et le mot de passe, ça vous évite plusieurs lignes de codes, sauf si vous vous l'avez fait pour déboguer le script, ce que je peux comprendre.

Deuxième possibilité de solution: il vous faut bien évidement remplacer le nom de la table (utilisateur) et le nom des colonnes (pseudo et mot_de_passe) par les vôtres.

Bonjour, je viens de modifier mon code pour le faire correspondre au votre, cependant cela ne marche toujours pas, il ne trouve pas mes identifiants dans ma base de données. Je pense donc avoir un problème avec celle si, pourriez vous me montrer ou m'expliquer comment l'organiser. Merci d'avance.

Je veux bien mais c'est plus le sujet, je vous invite à me contacter depuis la page contact

Ajouter un commentaire

Pseudo/Nom *
Email *
Message *
La balise [code]Votre code...[/code] peut être utilisée

Captcha * × neuf = 9

Les champs marqués d'un * sont obligatoires.

Retour à la liste des scripts

Flag Counter