Portfolio en PHP : problème d'affichage
Résolu
Utilisateur anonyme
-
jordane45 Messages postés 38486 Date d'inscription Statut Modérateur Dernière intervention -
jordane45 Messages postés 38486 Date d'inscription Statut Modérateur Dernière intervention -
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 :
Voici l'entête de mon site _debut.php :
Voici mon entité compte.php, représentant l'utilisateur qui se connecter :
Et voici le manager de l'entité compte permettant les opérations CRUD de l'utilisateur :
Et voici le script authentification.php permettant la connexion de l'utilisateur :
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(); } } } ?>
A voir également:
- Portfolio en PHP : problème d'affichage
- Easy php - Télécharger - Divers Web & Internet
- Créer un portfolio gratuit - Télécharger - Outils professionnels
- Expert php pinterest - Télécharger - Langages
- Retour a la ligne php - Forum Webmastering
- Portfolio gratuit - Télécharger - Photo & Graphisme
2 réponses
Hello,
J'ai survoler, est dans la page authentification.php
ligne 10 et 11
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
as-tu une erreur php qui s'affiche ?
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
as-tu une erreur php qui s'affiche ?
Maintenant... Appliqur ceci :
https://forums.commentcamarche.net/forum/affich-37636387-php-notice-undefined-index
https://forums.commentcamarche.net/forum/affich-37636387-php-notice-undefined-index
Et aussi.. places tes requêtes SQL dans des blocs try/catch. Comme expliqué ici :
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
Bon voilà ce que j'ai rajouté dans mon fichier "_debut.php" :
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.
<?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.
<body> ne s'ouvre qu'une seule fois. N'ouvre pas <body> dans ton header laisse la main a ton index
si tu enlève __debut.php je suis sur que tu n'auras plus de page blanche, bah j'espère ^^
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