Bonsoir. J'ai fais un portfolio en PHP avec le framework front Bootstrap. Or j'ai changé mon code en PHP orienté objet. Et en modifiant mon code qui était en procédurale à la base, ma page index ne s'affiche plus. Une page blanche s'affiche sans rien dedans. Pouvez-vous m'aider ?
Voici ma page index.php :
<?php
// Fichier PHP comprenant l'entête, les fonctions de sessions. Il est inclus avec la fonction 'include' dans la page index.php
include_once'_debut.php';
// affichage des erreurs php
//error_reporting(E_ALL);
// echo "_request: ".var_dump($_REQUEST)."<br>";
// echo "_session: ".var_dump( $_SESSION)."<br>";
// var_dump($_SESSION["mdp"]);
?>
<link href="bootstrap/css/style.css" rel="stylesheet">
<body class="index">
<!-- Main jumbotron for a primary marketing message or call to action -->
<div class="jumbotron test">
<div class="container">
<h1>Portfolio</h1>
<p>Bienvenue sur le portfolio. Retour vers le
futur : ici vous trouverez mon CV, mes projets informatiques et
plus...</p>
</div>
</div>
<div class="container test">
<!-- Example row of columns -->
<div class="row">
<div class="col-md-4">
<h2>Mon CV</h2>
<p>Diplômes, formations, expériences professionnelles... Mon CV en
détail</p>
<p>
<a class="btn btn-default" href="vuecv.php" rel="nofollow noopener noreferrer" target="_blank" role="button">Plus de
details, cliquez ici »</a>
</p>
</div>
<div class="col-md-4">
<h2>Mes projets informatiques</h2>
<p>Mes projets informatiques fait en PHP, Java...</p>
<p>
<a class="btn btn-default" href="vueprojets.php" rel="nofollow noopener noreferrer" target="_blank" role="button">Plus de
details, cliquez ici »</a>
</p>
</div>
<div class="col-md-4">
<h2>Autre chose</h2>
<p>Et d'autres choses diverses....</p>
<p>
<a class="btn btn-default" href="vuecontact.php" rel="nofollow noopener noreferrer" target="_blank" role="button">Plus de
details, cliquez ici »</a>
</p>
</div>
</div>
</div>
<div class="titre">
<?php
include_once '_fin.php';
?>
</div>
<!-- /container -->
</body>
</html>
Voici l'entête de mon site _debut.php :
<?php
session_start ();
// affichage des erreurs php
//error_reporting ( E_ALL );
// fonction PHP permettant de crée une session ou restaure celle trouvée sur le serveur, via l'identifiant de session passé dans une requête GET, POST ou par un cookie
include_once 'authentification.php';
include_once 'analyticstracking.php';
?>
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
<meta name="description" content="">
<meta name="author" content="">
<link rel="icon" href="#">
<title>Portfolio</title>
<!-- Bootstrap core CSS -->
<link href="bootstrap/css/bootstrap.css" rel="stylesheet">
<link href="bootstrap/css/bootstrap.min.css" rel="stylesheet">
<link href="bootstrap/css/bootstrap-responsive.css" rel="stylesheet">
<link href="bootstrap/css/bootstrap-responsive.min.css" rel="stylesheet">
<!-- IE10 viewport hack for Surface/desktop Windows 8 bug -->
<link href="../../assets/css/ie10-viewport-bug-workaround.css"
rel="stylesheet">
<!-- Custom styles for this template -->
<link href="jumbotron.css" rel="stylesheet">
<!-- Just for debugging purposes. Don't actually copy these 2 lines! -->
<!--[if lt IE 9]><script src="../../assets/js/ie8-responsive-file-warning.js"></script><![endif]-->
<script src="../../assets/js/ie-emulation-modes-warning.js"></script>
<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]-->
</head>
<link href="bootstrap/css/style.css" rel="stylesheet">
<body>
<nav class="navbar-fixed-top navbar-inverse">
<div class="container test">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed"
data-toggle="collapse" data-target="#navbar" aria-expanded="false"
aria-controls="navbar">
<span class="sr-only">Toggle navigation</span> <span
class="icon-bar"></span> <span class="icon-bar"></span> <span
class="icon-bar"></span>
</button>
<a class="navbar-brand"></a>
</div>
<div id="navbar" class="collapse navbar-collapse">
<ul class="nav navbar-nav">
<li><a href="index.php" rel="nofollow noopener noreferrer" target="_blank"><span class="glyphicon glyphicon-home"> </span>
Accueil</a></li>
<li><a href="vuecv.php" rel="nofollow noopener noreferrer" target="_blank"><span class="glyphicon glyphicon-briefcase"> </span>
Mon CV</a></li>
<li><a href="vueprojets.php" rel="nofollow noopener noreferrer" target="_blank"><span
class="glyphicon glyphicon-folder-open"></span> Mes projets
informatiques</a></li>
<li><a href="vuecontact.php" rel="nofollow noopener noreferrer" target="_blank"><span
class="glyphicon glyphicon-envelope"></span> Contact</a></li>
<?php if (isset($_SESSION["user"])): ?>
<li><a href="vueprofil.php" rel="nofollow noopener noreferrer" target="_blank"><span
class="glyphicon glyphicon-lock"></span> Mon profil</a></li>
<?php endif; ?>
</ul>
<?php if (!isset($_SESSION["user"])): ?>
<form class="navbar-form navbar-right"
method="POST">
<div class="form-group">
<input type="text" name="user" placeholder="Nom d'utilisateur"
class="form-control">
</div>
<div class="form-group">
<input type="password" name="mdp" placeholder="Mot de passe"
class="form-control">
</div>
<button type="submit" name="connecter" class="btn btn-success">Se
connecter</button>
</form>
<?php else: ?>
<div class="nav navbar-nav pull-right">
<span class="glyphicon glyphicon-user white xsTabulation"
aria-hidden="true"> </span> <a href="vueutilisateur.php" rel="nofollow noopener noreferrer" target="_blank"><span
class="text-center white xsTabulation"><?php echo "Bienvenue " . $_SESSION["user"]; ?></a>
</span> <span> <a href="<?php echo $_SERVER['PHP_SELF']; ?>?logout"
class="white">
<button type="submit" name="deconnecter" class="btn btn-success"
span class="glyphicon glyphicon-log-out " aria-hidden="true"
title="log-out"
<?php include_once'deconnexion.php';?>>Se déconnecter</button></span>
</a> </span>
</div>
<?php endif; ?>
</div>
<!-- /.nav-collapse -->
</div>
<!-- /.container -->
</nav>
<!-- /.navbar -->
Voici mon entité compte.php, représentant l'utilisateur qui se connecter :
<?php
class Compte {
private $user;
private $mdp;
function getUser() {
return $this->user;
}
function getMdp() {
return $this->mdp;
}
function setUser($user) {
$this->user = $user;
return $this;
}
function setMdp($mdp) {
$this->mdp = $mdp;
return $this;
}
}
Et voici le manager de l'entité compte permettant les opérations CRUD de l'utilisateur :
<?php
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
/**
* Description of CompteManager
*
* @author honore
*/
// Méthode CRUD de la table Compte
class CompteManager {
//Instance de PDO
protected $db;
public function __construct($pdo) {
$this->setDb($pdo);
}
// Ajouter un compte
public function add(Compte $compte) {
$q = $this->db->prepare('INSERT INTO compte (user, mdp)VALUES(:user,:mdp)');
$q->bindvalue(':user', $compte->getUser());
$q->bindvalue(':mdp', $compte->getMdp());
$q->execute();
}
//Suppression d'un compte
public function delete(Compte $compte) {
$this->db->execute('DELETE FROM compte WHERE user= ' . $compte->getUser());
}
//Selection d'un utilisateur
public function get(Compte $compte) {
$user = $compte->getUser();
$mdp = $compte->getMdp();
$q = $this->db->prepare('SELECT user, mdp FROM compte WHERE user =:user AND mdp =:mdp');
$q->bindParam(':user', $user, PDO::PARAM_STR);
$q->bindParam(':mdp', $mdp, PDO::PARAM_STR);
$q->execute();
$u = $q->fetch(PDO::FETCH_ASSOC);
return new Compte($u);
}
//Liste des utilisateurs
public function getList() {
$comptes = [];
$q = $this->db->query('SELECT user, mdp FROM compte ORDER BY user');
while ($donnees = $q->fetch(PDO::FETCH_ASSOC)) {
$comptes[] = new Compte($donnees);
}
return $comptes;
}
//Mise à jour d'un utilisateur en fonction du nom de l'utilisateur
public function update(Compte $compte) {
$q = $this->db->prepare('UPDATE compte SET user =: user, mdp =:mdp WHERE user =:user');
$q->bindParam(':user', $compte->getUser(), PDO::PARAM_STR);
$q->bindParam(':mdp', $compte->getMdp(), PDO::PARAM_STR);
$q->execute();
}
public function setDb(PDO $pdo) {
$this->db = $pdo;
}
}
try {
$pdo = new PDO('mysql:host=localhost;dbname=portfolio', 'root', 'root');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
} catch (PDOException $e) {
die("Erreur ! :" . $e->getMessage());
}
Et voici le script authentification.php permettant la connexion de l'utilisateur :
<?php
// Algorithme de connexion pour le super utilisateur afin d'accéder à ses pages cachées
include_once 'class/Compte.php';
$compte = new Compte();
include_once 'class/comptemanager.php';
$manager = new CompteManager($pdo);
if (isset($_POST ["connecter"])) {
if ((isset($_POST ["user"])) && (isset($_POST ["mdp"]))) {
$compte->getUser() = $_POST ["user"];
$compte->getMdp() = $_POST ["mdp"];
$query = $pdo->prepare("select * from compte where user=:user and mdp=:mdp ");
// Lie un nom de variable avec un paramètre
$query->bindParam(':user', $compte->getUser());
$query->bindParam(':mdp', $compte->getMdp());
$query->execute();
$query->fetch(PDO::FETCH_OBJ);
// $_REQUEST ["user"] = $user;
// $_REQUEST ["mdp"] = $mdp;
if ($compte->getUser() == "honore") {
$_SESSION ["user"] = $compte->getUser();
$_SESSION ["mdp"] = $compte->getMdp();
}
}
}
?>
J'ai survoler, est dans la page authentification.php
ligne 10 et 11
$compte->getUser() = $_POST ["user"];
$compte->getMdp() = $_POST ["mdp"];
// c'est pas plutot
$compte->setUser( $_POST[ ] );
$compte->setMdp( .... );
si on regarde la Class compte getUser et getMdp retourne quelque chose ce ne sont pas des variables, ces deux linges sont incohérentes
Après dans la Class CompteManager plusieur function retourne un nouvel object Compte en passant des paramètres alors que la class
Compte ne comporte pas de contructor
Bah tu les move le temps de débogger pour localiser erreur ^^
puis on s'en fous le but et de faire apparaître au moins du HTML si sans __debut.php l'html s'affiche c 'est que l'erreur est dans le fichier __debut.php mais si tu n'as pas erreur php c'est que c'est une balise non refermer, puisque le code est correct en soit
Cela vient de mon fichier "authentification.php" car quand je l'enèves dans mon entête "_debut.php" a page s'affiche correctement. Mais quand je le laisse, page blanche sur la page index.
non mais qu'il ont sauter c'est pas grave le but est de localiser ou sa coince,
donc l'erreur on sait qu'elle vient authentification.php quand tu inclus tu as page blanche ?
Oui j'ai changé cela s'affiche maintenant la page index s'affiche correctement.
Mais maintenant j'ai un deuxième problème , lorsque je me connecte avec mes identifiants au formulaire de mon entête, c'est la page blanche qui s'affiche. Pouvez-vous m'aider ?
Bon voilà ce que j'ai rajouté dans mon fichier "_debut.php" :
<?php
// fonction PHP permettant de crée une session ou restaure celle trouvée sur le serveur, via l'identifiant de session passé dans une requête GET, POST ou par un cookie
include_once 'authentification.php';
session_start();
//affichage des erreurs php
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
$_SESSION["user"] = !empty($_POST["user"]) ? $_POST["user"] : NULL;
include_once 'analyticstracking.php';
?>
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
<meta name="description" content="">
<meta name="author" content="">
<link rel="icon" href="#">
<title>Portfolio</title>
<!-- Bootstrap core CSS -->
<link href="bootstrap/css/bootstrap.css" rel="stylesheet">
<link href="bootstrap/css/bootstrap.min.css" rel="stylesheet">
<link href="bootstrap/css/bootstrap-responsive.css" rel="stylesheet">
<link href="bootstrap/css/bootstrap-responsive.min.css" rel="stylesheet">
<!-- IE10 viewport hack for Surface/desktop Windows 8 bug -->
<link href="../../assets/css/ie10-viewport-bug-workaround.css"
rel="stylesheet">
<!-- Custom styles for this template -->
<link href="jumbotron.css" rel="stylesheet">
<!-- Just for debugging purposes. Don't actually copy these 2 lines! -->
<!--[if lt IE 9]><script src="../../assets/js/ie8-responsive-file-warning.js"></script><![endif]-->
<script src="../../assets/js/ie-emulation-modes-warning.js"></script>
<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]-->
</head>
<link href="bootstrap/css/style.css" rel="stylesheet">
<nav class="navbar-fixed-top navbar-inverse">
<div class="container test">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed"
data-toggle="collapse" data-target="#navbar" aria-expanded="false"
aria-controls="navbar">
<span class="sr-only">Toggle navigation</span> <span
class="icon-bar"></span> <span class="icon-bar"></span> <span
class="icon-bar"></span>
</button>
<a class="navbar-brand"></a>
</div>
<div id="navbar" class="collapse navbar-collapse">
<ul class="nav navbar-nav">
<li><a href="index.php" rel="nofollow noopener noreferrer" target="_blank"><span class="glyphicon glyphicon-home"> </span>
Accueil</a></li>
<li><a href="vuecv.php" rel="nofollow noopener noreferrer" target="_blank"><span class="glyphicon glyphicon-briefcase"> </span>
Mon CV</a></li>
<li><a href="vueprojets.php" rel="nofollow noopener noreferrer" target="_blank"><span
class="glyphicon glyphicon-folder-open"></span> Mes projets
informatiques</a></li>
<li><a href="vuecontact.php" rel="nofollow noopener noreferrer" target="_blank"><span
class="glyphicon glyphicon-envelope"></span> Contact</a></li>
<?php if (isset($_SESSION["user"])): ?>
<li><a href="vueprofil.php" rel="nofollow noopener noreferrer" target="_blank"><span
class="glyphicon glyphicon-lock"></span> Mon profil</a></li>
<?php endif; ?>
</ul>
<?php if (!isset($_SESSION["user"])): ?>
<form class="navbar-form navbar-right"
method="POST" action="authentification.php">
<div class="form-group">
<input type="text" name="user" placeholder="Nom d'utilisateur"
class="form-control">
</div>
<div class="form-group">
<input type="password" name="mdp" placeholder="Mot de passe"
class="form-control">
</div>
<button type="submit" name="connecter" class="btn btn-success">Se
connecter</button>
</form>
<?php else: ?>
<div class="nav navbar-nav pull-right">
<span class="glyphicon glyphicon-user white xsTabulation"
aria-hidden="true"> </span> <a href="vueutilisateur.php" rel="nofollow noopener noreferrer" target="_blank"><span
class="text-center white xsTabulation"><?php echo "Bienvenue " . $_SESSION["user"]; ?></a>
</span> <span> <a href="<?php echo $_SERVER['PHP_SELF']; ?>?logout"
class="white">
<button type="submit" name="deconnecter" class="btn btn-success"
span class="glyphicon glyphicon-log-out " aria-hidden="true"
title="log-out"
<?php include_once'deconnexion.php'; ?>>Se déconnecter</button></span>
</a> </span>
</div>
<?php endif; ?>
</div>
<!-- /.nav-collapse -->
</div>
<!-- /.container -->
</nav>
<!-- /.navbar -->
Alors j'arrive à me connecter. Mais le problème c'est que lorsque je renseigne n'importe quel mot dans mon champ "Nom d'utilisateur", il se connecte. Or j'ai crée dans ma base de données un utilisateur et un mot de passe. Et je veux que seulement avec cet utilisateur qui est présent dans la base de données, que j'ai envie de me connecter.
Le code que tu nous montres .. c'est celui de ton formulaire....
Il faut que tu nous montres ceux de tes fichiers :
- deconnexion.php
- authentification.php
Pense également que :
session_start doit être AU TOUT DEBUT de ton fichier php
Idem pour l'activation des erreurs PHP.
Et autant que possible, utilise des REQUIRE_ONCE au lieu des INCLUDE
<?php
// Algorithme de connexion pour le super utilisateur afin d'accéder à ses pages cachées
include_once 'class/Compte.php';
$compte = new Compte();
include_once 'class/comptemanager.php';
$manager = new CompteManager($pdo);
if (isset($_POST ["connecter"])) {
if ($compte->getUser() == "honore") {
if ((isset($_POST ["user"])) && (isset($_POST ["mdp"]))) {
$user = $compte->setUser($_POST ["user"]);
$mdp = $compte->setMdp($_POST ["mdp"]);
$manager->get($user);
// $_REQUEST ["user"] = $user;
// $_REQUEST ["mdp"] = $mdp;
$_SESSION ["user"] = $compte->getUser();
$_SESSION ["mdp"] = $compte->getMdp();
}
}
}
?>
Et celui de "deconnexion.php" :
<?php
// Algorithme de déconnexion pour le super utilsateur, lorsque qu'il clique sur le bouton déconnecter
if (isset ( $_REQUEST ["logout"] ))
session_unset ();
?>
Il n’empêche que tu n'as pas appliqué le conseil concernant l'utilisation des REQUIRE au lieu des INCLUDE ni ceux donnés dans le liens que je t'ai donné concernant l'écriture du code et plus particulièrement la "récupération" propre des variables.
Donc je te remet le lien : https://www.commentcamarche.net/faq/48399-php-gestion-des-erreurs-debogage-et-ecriture-du-code pour que tu l'appliques dans TOUS tes fichiers.
N'hésites pas non plus à faire du debug dans ton code ... en affichant, par exemple, le contenu des variables $_POST et $_SESSION pour voir ce qu'elles contiennent.
Lignes 83 ???
Session.auto_start = 0;
mais tu n'auras plus acces a phpMyAdmin pour cela dans /etc/lampp/phpmyadmin/config.inc.php
$cfg['Servers'][$i]['auth_type'] = 'http';
je ne suis pas loger Affichage OK
je fait F5 Affichage OK
je me log --> valide le formulaire --> page blanche ??
si c'est ce cas de figure il doit avoir une erreur entre la condition dans authentification.php
jet un oeil à ceux que jordane45 à envoyer e commence à penser pareil ^^