Portfolio en PHP : problème d'affichage

Résolu/Fermé
Utilisateur anonyme - 26 oct. 2017 à 20:24
jordane45
Messages postés
35833
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
7 juillet 2022
- 6 nov. 2017 à 22:25
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();
        }
    }
}
?>

2 réponses

Dotarkadim
Messages postés
41
Date d'inscription
jeudi 26 octobre 2017
Statut
Membre
Dernière intervention
30 octobre 2017
2
Modifié le 26 oct. 2017 à 20:50
Hello,

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 ?
0
Utilisateur anonyme
26 oct. 2017 à 21:36
Non aucune erreur page blanche
0
Dotarkadim
Messages postés
41
Date d'inscription
jeudi 26 octobre 2017
Statut
Membre
Dernière intervention
30 octobre 2017
2
26 oct. 2017 à 21:50
et quand tu commente tout ton php dans l'index l'html s'affiche correctement ?
0
Utilisateur anonyme
26 oct. 2017 à 21:55
Oui mais sans le css et le javascript qui se trouve dans mon entête _debut.php
0
Dotarkadim
Messages postés
41
Date d'inscription
jeudi 26 octobre 2017
Statut
Membre
Dernière intervention
30 octobre 2017
2 > Utilisateur anonyme
Modifié le 26 oct. 2017 à 22:15
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
0
Dotarkadim
Messages postés
41
Date d'inscription
jeudi 26 octobre 2017
Statut
Membre
Dernière intervention
30 octobre 2017
2
Modifié le 26 oct. 2017 à 22:06
tu ouvre <body> dans __debut.php tu ne la referme pas, est ensuite du réouvre <body> dans index.php que tu referme



--- debut

<body>

--- index

<body>
...
</body>

// balise non fermer



<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 ^^
0
jordane45
Messages postés
35833
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
7 juillet 2022
4 208
26 oct. 2017 à 22:46
0
Utilisateur anonyme
26 oct. 2017 à 23:10
J'ai rajouté les lignes dans mon _debut.php les voici : Notice: Undefined index: user in /var/www/html/portfolio/_debut.php on line 100
0
jordane45
Messages postés
35833
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
7 juillet 2022
4 208 > Utilisateur anonyme
27 oct. 2017 à 08:03
0
jordane45
Messages postés
35833
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
7 juillet 2022
4 208 > jordane45
Messages postés
35833
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
7 juillet 2022

27 oct. 2017 à 08:05
Et aussi.. places tes requêtes SQL dans des blocs try/catch. Comme expliqué ici :
https://www.commentcamarche.net/faq/46512-pdo-gerer-les-erreurs
0
Dotarkadim
Messages postés
41
Date d'inscription
jeudi 26 octobre 2017
Statut
Membre
Dernière intervention
30 octobre 2017
2
Modifié le 26 oct. 2017 à 23:25
Mdr tes error php n’était pas enabled LOL

tu as un éléments dans un tableaux qui n’existe pas, ets tu doit l'appeler quelque part,

dans ta condition tu dit si $_SESSION["user"] existe pas c'est l'inverse retire la négation.
0
Utilisateur anonyme
6 nov. 2017 à 21:32
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.
0