Je suis actuellement débutant en programmation (je m'essaye un peu au WEB, PYTHON).
Je vous contacte car je souhaite actuellement faire un formulaire de connexion (avec le traitement de ce formulaire par une autre page "externe" en PHP) afin que les personnes puissent se connecter sur mon site web (j'ai déjà réaliser une page d'inscription sur le site sans trop de problème qui est actuellement plutôt fonctionnel) mais le formulaire de connexion ne veut jamais fonctionner malgré ms diverses recherches sur Internet. Je vous transmet ci-dessous le code de ma page de connexion et de son traitement par le fichier PHP :
Code du formulaire de connexion (c'est l'endroit ou la personne rentre ses infos) (que j'ai nommé connexion.php) :
Code du fichier du traitement du formulaire ci-dessus (que j'ai nommé espace_connexion.php) :
<?php
/* Indique le bon format des entêtes (par défaut apache risque de les envoyer au standard ISO-8859-1) */
header('Content-type: text/html; charset=UTF-8');
/* Création d'une fonction - utilisée dans la récupération des variables - qui teste la configuration get_magic_quotes_gpc du serveur.
Si oui, supprime avec la fonction stripslashes les antislashes "\" insérés dans les chaines de caractère des variables gpc (GET, POST, COOKIE) */
function Verif_magicquotes ($chaine)
{
if (get_magic_quotes_gpc()) $chaine = stripslashes($chaine);
return $chaine;
}
/* Initialisation du message de réponse */
$message = null;
/* Si le formulaire est envoyé */
if (isset($_POST['pseudo']))
{
/* Récupération des variables issues du formulaire
Teste l'existence les données post en vérifiant qu'elles existent, qu'elles sont non vides et non composées uniquement d'espaces.
(Ce dernier point est facultatif et l'on pourrait se passer d'utiliser la fonction trim())
En cas de succès, on applique notre fonction Verif_magicquotes pour (éventuellement) nettoyer la variable */
$pseudo = (isset($_POST['pseudo']) && trim($_POST['pseudo']) != '')? Verif_magicquotes($_POST['pseudo']) : null;
$pass = (isset($_POST['pass']) && trim($_POST['pass']) != '')? Verif_magicquotes($_POST['pass']) : null;
/* Si $pseudo et $pass différents de null */
if(isset($pseudo,$pass))
{
/* Connexion au serveur : dans cet exemple, en local sur le serveur d'évaluation
A MODIFIER avec vos valeurs */
$hostname = "localhost";
$database = "monsite";
$username = "root";
$password = "";
$connection = mysql_connect($hostname, $username, $password) or die(mysql_error());
/* Connexion à la base */
mysql_select_db($database, $connection);
/* Indique à mySql de travailler en UTF-8 (par défaut mySql risque de travailler au standard ISO-8859-1) */
mysql_query("SET NAMES 'utf8'");
/* Préparation des données pour les requêtes à l'aide de la fonction mysql_real_escape_string */
$nom = mysql_real_escape_string($pseudo);
$password = mysql_real_escape_string($pass);
/* Requête pour récupérer les enregistrements répondant à la clause :
champ du pseudo et champ du mdp de la table = pseudo et mdp postés dans le formulaire*/
$requete = "SELECT * FROM membres WHERE pseudo = '".$nom."' AND pass = '".$password."'";
/* Exécution de la requête */
$req_exec = mysql_query($requete) or die(mysql_error());
/* Création du tableau associatif du résultat */
$resultat = mysql_fetch_assoc($req_exec);
/* Les valeurs (si elles existent) sont retournées dans le tableau $resultat; */
if (isset($resultat['pseudo'],$resultat['pass']))
{
/* Démarre la session et enregistre le pseudo dans la variable de session $_SESSION['login']
qui donne au visiteur la possibilité de visiter les pages protégées. */
session_start();
$_SESSION['login'] = $pseudo;
/* A MODIFIER Remplacer le '#' par l'adresse de votre page de destination, sinon ce lien indique la page actuelle. */
$message = 'Bonjour '.htmlspecialchars($_SESSION['login']).' <a href = "#">Cliquez ici pour vous connecter</a>';
}
else
{ /* Le pseudo ou le mot de passe sont incorrect */
$message = 'Le pseudo ou le mot de passe sont incorrect';
}
}
else
{ /* au moins un des deux champs "pseudo" ou "mot de passe" n'a pas été rempli */
$message = 'Les champs Pseudo et Mot de passe doivent être remplis.';
}
}
?>
Actuellement avec ce code, je suis redirigé vers la page de traitement mais la page est blanche que je rentre les bonnes infos ou les mauvaises infos dans le formulaire (alors que d'après le code, il devrait afficher soir que les champs ne sont pas remplis ou il démarre la session). Auriez-vous une solution à mon problème ? Savez-vous comment pourrais-je faire pour créer une page de connexion qui soit fonctionnelle ?
J'espère avoir été clair dans mes explications.
Merci d'avance pour ceux qui prendront le temps de m'aider.
Pour les sessions, session_start() est nécessaire en début de code.
- Edité par philodick il y a environ 1 heure
C'est de quels inputs dont vous parlez ? Pour la session start(), je pensais avoir fait une redirection au dessus vers mon fichier PHP de config mais il semblerait que je l'ai oublié. Vous pensez que ça vient de la le fait que ça ne m'affichait rien sur la page ?
Comme dis par @philodick ; Tu n'as pas mis de "name" sur tes inputs (Ton formulaire donc) Du coup, le session_start(); ce trouve dans le fichier de config que tu inclus ?
Comme dis par @philodick ; Tu n'as pas mis de "name" sur tes inputs (Ton formulaire donc) Du coup, le session_start(); ce trouve dans le fichier de config que tu inclus ?
Oui le session start et connexion à la BDD ou une erreur si il n'y arrive pas se trouve dans mon fichier de config. J'ai déjà fait la redirection vers ce fichier en require_once mais cela n'a pour le moment rien changé au problème. Je vais essayer du coup de mettre des noms dans le formulaire pour voir si cela fonctionne mieux (il faut mettre name = "ici je mets le nom") ? Désolé pour toutes ces questions mais je suis débutant et je cherche à comprendre le fonctionnement.
Cependant cela n'a rien changé au problème et j'obtiens toujours la même page blanche sans que rien ne s'affiche sur la page. Tu penses que cela peut venir d'où ? Tu aurais une nouvelle solution pour tenter de résoudre le problème ?
Merci pour ta remarque car il se trouve que celle-ci à eu une effet au niveau de ma page blanche sur laquelle il s'affiche maintenant une erreur dont je ne connais pas trop l'origine et que je ne sais pas vraiment comment résoudre.
Voici d'abord pour commencer une nouvelle fois le code de la page de traitement (espace_connexion.php) :
<?php
require_once 'config.php';
?>
<?php
/* Indique le bon format des entêtes (par défaut apache risque de les envoyer au standard ISO-8859-1) */
header('Content-type: text/html; charset=UTF-8');
/* Création d'une fonction - utilisée dans la récupération des variables - qui teste la configuration get_magic_quotes_gpc du serveur.
Si oui, supprime avec la fonction stripslashes les antislashes "\" insérés dans les chaines de caractère des variables gpc (GET, POST, COOKIE) */
function Verif_magicquotes ($chaine)
{
if (get_magic_quotes_gpc()) $chaine = stripslashes($chaine);
return $chaine;
}
/* Initialisation du message de réponse */
$message = null;
/* Si le formulaire est envoyé */
if (isset($_POST['pseudo']))
{
/* Récupération des variables issues du formulaire
Teste l'existence les données post en vérifiant qu'elles existent, qu'elles sont non vides et non composées uniquement d'espaces.
(Ce dernier point est facultatif et l'on pourrait se passer d'utiliser la fonction trim())
En cas de succès, on applique notre fonction Verif_magicquotes pour (éventuellement) nettoyer la variable */
$pseudo = (isset($_POST['pseudo']) && trim($_POST['pseudo']) != '')? Verif_magicquotes($_POST['pseudo']) : null;
$pass = (isset($_POST['pass']) && trim($_POST['pass']) != '')? Verif_magicquotes($_POST['pass']) : null;
/* Si $pseudo et $pass différents de null */
if(isset($pseudo,$pass))
{
/* Connexion au serveur : dans cet exemple, en local sur le serveur d'évaluation
A MODIFIER avec vos valeurs */
$hostname = "localhost";
$database = "monsite";
$username = "root";
$password = "";
$connection = mysql_connect($hostname, $username, $password) or die(mysql_error());
/* Connexion à la base */
mysql_select_db($database, $connection);
/* Indique à mySql de travailler en UTF-8 (par défaut mySql risque de travailler au standard ISO-8859-1) */
mysql_query("SET NAMES 'utf8'");
/* Préparation des données pour les requêtes à l'aide de la fonction mysql_real_escape_string */
$nom = mysql_real_escape_string($pseudo);
$password = mysql_real_escape_string($pass);
/* Requête pour récupérer les enregistrements répondant à la clause :
champ du pseudo et champ du mdp de la table = pseudo et mdp postés dans le formulaire*/
$requete = "SELECT * FROM membres WHERE pseudo = '".$pseudo."' AND pass = '".$password."'";
/* Exécution de la requête */
$req_exec = mysql_query($requete) or die(mysql_error());
/* Création du tableau associatif du résultat */
$resultat = mysql_fetch_assoc($req_exec);
/* Les valeurs (si elles existent) sont retournées dans le tableau $resultat; */
if (isset($resultat['pseudo'],$resultat['pass']))
{
/* Démarre la session et enregistre le pseudo dans la variable de session $_SESSION['login']
qui donne au visiteur la possibilité de visiter les pages protégées. */
session_start();
$_SESSION['login'] = $pseudo;
/* A MODIFIER Remplacer le '#' par l'adresse de votre page de destination, sinon ce lien indique la page actuelle. */
$message = 'Bonjour '.htmlspecialchars($_SESSION['login']).' <a href = "#">Cliquez ici pour vous connecter</a>';
}
else
{ /* Le pseudo ou le mot de passe sont incorrect */
$message = 'Le pseudo ou le mot de passe sont incorrect';
}
}
else
{ /* au moins un des deux champs "pseudo" ou "mot de passe" n'a pas été rempli */
$message = 'Les champs Pseudo et Mot de passe doivent être remplis.';
}
}
?>
Pourrais-tu me donner une solution détaillée si possible afin de régler cette erreur qui m'empêche d'aller plus loin dans le traitement de ma page ?
Merci d'avance
Capture d'écran de l'erreur qui apparait lors du traitement :
En fait, le tuto ou cours dont tu t'inspires est sans doute très ancien (la fonction verifmagicquotes() en est assez symptomatique d'ailleurs) et toutes les fonctions d'interfaces qui commencent par mysql_ sont obsolètes. Ce n'est pas vraiment une erreur au sens strict qui s'affiche, mais un avertissement qui te dit que bientôt (avec php 7) ces fonctions ne seront plus utilisables, et qu'il vaudrait mieux utiliser PDO.
En fait, le tuto ou cours dont tu t'inspires est sans doute très ancien (la fonction verifmagicquotes() en est assez symptomatique d'ailleurs) et toutes les fonctions d'interfaces qui commencent par mysql_ sont obsolètes. Ce n'est pas vraiment une erreur au sens strict qui s'affiche, mais un avertissement qui te dit que bientôt (avec php 7) ces fonctions ne seront plus utilisables, et qu'il vaudrait mieux utiliser PDO.
D'accord. Ceci je l'avais un peu près compris en lisant des articles sur internet dessus. Cependant ce que je ne comprends pas vraiment c'est qu'est-ce que je dois changer concrètement au niveau de mon code ? Concernant l'article D'OC dont tu m'as laissé le lien, il me semble qu'il ne renvoie pas exactement vers la page parlant des PDO. A ce moment la, il faut que j'aille sur quelle page pour que ça aborde les PDO ?
Ce qu'il faudrait changer, c'est toute la partie connexion à la bdd et requêtage.
Parfait. Merci pour toute ton aide. Je vais regarder tout ceci. Si je comprends bien, ça veut dire qu'il y a encore du travail pour que j'obtiennes un code parfait avec un site parfaitement fonctionnel ? Tu penses qu'il est normal qu'il soit beaucoup plus compliqué de coder la page de connexion que celle d'inscription ?
Oui, c'est un peu plus compliqué, mais il y a beaucoup de choses inutiles dans ton code aussi (jusqu'à la ligne 35 en fait qu'on pourrait remplacer par un simple if(!empty des variable $_POST).
Je te conseille quand même de repartir de zéro avec PDO, au moins tu n'apprendras pas des choses qui ne te serviront plus dans un mois.
Oui, c'est un peu plus compliqué, mais il y a beaucoup de choses inutiles dans ton code aussi (jusqu'à la ligne 35 en fait qu'on pourrait remplacer par un simple if(!empty des variable $_POST).
Je te conseille quand même de repartir de zéro avec PDO, au moins tu n'apprendras pas des choses qui ne te serviront plus dans un mois.
D'accord. Par contre J'ai peur que si je mets uniquement le (!empty avec le $POST de ['pass'] et de ['pseudo']) simplement comme ça sans définir les variables, il risque de m'affiche une erreur me disant que les variables ne sont pas définies comme il m'avait dis parfois dans d'autre page. Tu n 'est pas D'accord ?
Non, tu verras aussi qu'avec PDO et les requêtes préparées, tu peux utiliser directement les variables $_POST dans la requête. Elles sont définies automatiquement à l'envoi du formulaire.
Non, tu verras aussi qu'avec PDO et les requêtes préparées, tu peux utiliser directement les variables $_POST dans la requête. Elles sont définies automatiquement à l'envoi du formulaire.
Ah cool. Je testerais ceci des que j'aurais pour voir les nombreuses possibilités que peut permettre PDO par rapport à la simple requête MYSQL
Formulaire de connexion
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
N'oubliez pas d'activer les erreurs PDO.
N'oubliez pas d'activer les erreurs PDO.
N'oubliez pas d'activer les erreurs PDO.
N'oubliez pas d'activer les erreurs PDO.
N'oubliez pas d'activer les erreurs PDO.
N'oubliez pas d'activer les erreurs PDO.
N'oubliez pas d'activer les erreurs PDO.
N'oubliez pas d'activer les erreurs PDO.