Problème de connexion 2
shegy93
Messages postés
2
Date d'inscription
Statut
Membre
Dernière intervention
-
jordane45 Messages postés 30427 Date d'inscription Statut Modérateur Dernière intervention -
jordane45 Messages postés 30427 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour j'ai esasyer de faire un tuto sur une connexion php mais a chaque fois que j'essaie de me connecter sa m'affiche une page blanche meme pass d'erreurs.
vraiment besoin d'aide en ce moment
cordialement
<?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');
/* Initialisation de la variable du message de réponse*/
$message = null;
/* Récupération des variables issues du formulaire par la méthode post*/
$login = filter_input(INPUT_POST, 'login');
$password = filter_input(INPUT_POST, 'password');
/* Si le formulaire est envoyé*/
if (isset($login,$password))
{
/* Teste que les valeurs ne sont pas vides ou composées uniquement d'espaces */
$login = trim($login) != '' ? $login : null;
$password = trim($password) != '' ? $password : null;
/* Si $pseudo et $pass différents de null */
if(isset($login,$password))
{
/**** Connexion au serveur : dans cet exemple, en local sur le serveur d'évaluation
/* Configuration des options de connexion */
/* Désactive l'éumlateur de requêtes préparées (hautement recommandé) */
$pdo_options[PDO::ATTR_EMULATE_PREPARES] = false;
/* Active le mode exception */
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
/* Indique le charset */
//$pdo_options[PDO::MYSQL_ATTR_INIT_COMMAND] = "SET NAMES utf8";
/* Connexion */
try
{
$connect = new PDO('pgsql:host=localhost;port=5432;dbname=projetweb;user=postgres;password=root');
}
catch (PDOException $e)
{
exit('problème de connexion à la base');
}
/* 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é dans le formulaire */
$requete = "SELECT count(*) FROM profil WHERE login = :login AND password = :password";
try
{
//* Préparation de la requête*/
$req_prep = $connect->prepare($requete);
/* Exécution de la requête en passant les marqueurs et leur variables associées dans un tableau*/
// $req_prep->execute(array(':login'=>$login,':password'=>$password));
$req_prep->execute();
/* Création du tableau du résultat avec fetchAll qui récupère tout le tableau en une seule fois*/
$resultat = $req_prep->fetchAll();
$nb_result = count($resultat);
if ($nb_result == 1)
{
/* Démarre une session si aucune n'est déjà existante et enregistre le pseudo dans la variable de session $_SESSION['login'] qui donne au visiteur la possibilité de se connecter. */
if (!session_id()) session_start();
$_SESSION['login'] = $login;
$message = 'Bonjour '.htmlspecialchars($_SESSION['login']).', vous êtes connecté';
/*ou redirection vers une page en cas de succès ex : menu.php*/
//header("Location: ./menu.html");
//exit();
/* Si vous voulez récupérer les données elles se trouvent dans la première et unique ligne du tableau $resultat par exemple */
/**$result = $resultat[0];
echo $result['pseudo'];
//echo $result['date_enregistrement'];
*
**
***/
}
else if ($nb_result > 1)
{
/* Par sécurité si plusieurs réponses de la requête mais si la table est bien construite on ne devrait jamais rentrer dans cette condition */
$message = 'Problème de d\'unicité dans la table';
}
else
{ /* Le pseudo ou le mot de passe sont incorrect */
$message = 'Le pseudo ou le mot de passe sont incorrect';
}
}
catch (PDOException $e)
{
$message = 'Problème dans la requête de sélection';
}
}
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.';
}
}
?>
vraiment besoin d'aide en ce moment
| EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici :ICI Merci d'y penser dans tes prochains messages. |
cordialement
2 réponses
-
bonsoir
essaye de faire un echo "erreur"; avant chaque ligne comme ça tu sauras bien quelle ligne cause l'arrêt du script
-
Bonjour,
Déjà ... place le code de connexion à ta BDD dans un fihcier à part que tu n'auras qu'à inclure dans les pages où tu en auras besoin...
Ca t'éviter de copier/coller 50 fois la même chose ....
Par exemple :<?php //Fichier de connexion à la bdd : cnxBdd.php try{ $bdd= new PDO('pgsql:host=localhost;port=5432;dbname=projetweb;user=postgres;password=root'); $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ); } catch(PDOException $e) { die('Erreur de connexion : ' . $e->getMessage()); }
Ensuite, au début de ton script, ajoutes la ligne ://Active l'affichage des erreurs PHP error_reporting(E_ALL);
En gros, ton code avec quelques corrections, donnerait un truc du genre :<?php //affichage des erreurs pHP error_reporting(E_ALL); /* 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'); // Démarrage des sessions (à Faire DES LE DEBUT !) if (!session_id()){ session_start(); } //connexion à la bdd (on inclus le fichier de connexion) require_once "cnxBdd.php"; /* Initialisation de la variable du message de réponse*/ $message = null; /* Récupération des variables issues du formulaire par la méthode post*/ $login = filter_input(INPUT_POST, 'login'); $password = filter_input(INPUT_POST, 'password'); /* Teste que les valeurs ne sont pas vides ou composées uniquement d'espaces */ $login = !empty(trim($login)) ? trim($login) : null; $password = !empty(trim($password)) ? trim($password) : null; if ($login,$password)){ /* Si le formulaire est envoyé et Si $pseudo et $pass différents de null */ /* 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é dans le formulaire */ //* Préparation de la requête*/ $requete = "SELECT count(*) as NB FROM profil WHERE login = :login AND password = :password"; $datas = array(':login'=>$login,':password'=>$password); try { //execution de la requete $req_prep = $bdd->prepare($requete); $req_prep->execute($datas); $resultat = $req_prep->fetchAll(); /* Création du tableau du résultat avec fetchAll qui récupère tout le tableau en une seule fois*/ } catch (PDOException $e){ $message = 'Problème dans la requête de sélection :' . $e->getMessage(); } $nb_result =!empty($resultat) ? $resultat[0]['NB'] : 0; if ($nb_result == 1) { $_SESSION['login'] = $login; $message = 'Bonjour '.htmlspecialchars($_SESSION['login']).', vous êtes connecté'; /*ou redirection vers une page en cas de succès ex : menu.php*/ //header("Location: ./menu.html"); //exit(); /* Si vous voulez récupérer les données elles se trouvent dans la première et unique ligne du tableau $resultat par exemple */ /**$result = $resultat[0]; echo $result['pseudo']; //echo $result['date_enregistrement']; ***/ } else if ($nb_result > 1) { /* Par sécurité si plusieurs réponses de la requête mais si la table est bien construite on ne devrait jamais rentrer dans cette condition */ $message = 'Problème de d\'unicité dans la table'; } 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.'; } ?>
Cordialement,
Jordane