Portfolio en PHP : problème d'affichage [Résolu/Fermé]

Signaler
-
Messages postés
31213
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
27 janvier 2021
-
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

Messages postés
41
Date d'inscription
jeudi 26 octobre 2017
Statut
Membre
Dernière intervention
30 octobre 2017
2
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 ?
Messages postés
41
Date d'inscription
jeudi 26 octobre 2017
Statut
Membre
Dernière intervention
30 octobre 2017
2
Fichier _debut.php

Lignes 83 ???

 <?php if (isset($_SESSION["user"])): ?>
Utilisateur anonyme
Je suis sous Ubuntu donc linux (lamp installé). Et pour la variable $_SESSION un tableau s'affiche mais avec rien dedans.
Messages postés
41
Date d'inscription
jeudi 26 octobre 2017
Statut
Membre
Dernière intervention
30 octobre 2017
2
Essaye de crée quelque chose dans $_SESSION et affiche le ! si le tableau reste vide, c'est dans la configuration dans PHP.ini

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';
Utilisateur anonyme
Non, j'ai affecté une valeur dans $_SESSION et il affiche bien la valeur.
Messages postés
41
Date d'inscription
jeudi 26 octobre 2017
Statut
Membre
Dernière intervention
30 octobre 2017
2
nice :) donc si on résume la situation

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

 
if( ... ){

  // error quelque part here

}



jet un oeil à ceux que jordane45 à envoyer e commence à penser pareil ^^
Messages postés
31213
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
27 janvier 2021
3 216
Utilisateur anonyme
C'est ce que j'ai fais mais malheureusement je reste connecter sans le nom de l'utilisateur. Et impossible de me déconnecter.
Messages postés
31213
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
27 janvier 2021
3 216 > Utilisateur anonyme
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
Utilisateur anonyme
Voici le code du fichier "authentification.php"

<?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 ();
?>
Messages postés
31213
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
27 janvier 2021
3 216 > Utilisateur anonyme
Bon...
Visiblement.. tu initialises tes variables de sessions dans ton fichier authentification.php
Donc la ligne 14 du fichier _debut.php
$_SESSION["user"] = !empty($_POST["user"]) ? $_POST["user"] : NULL;

Ne sert à rien et est à retirer.

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.
Messages postés
31213
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
27 janvier 2021
3 216 >
Messages postés
31213
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
27 janvier 2021

Sans oublié que dans ton fichier authentification...
la variable $pdo.. elle ne semble initialisée nul-part
et qu'ensuite, pour la ligne
$manager->get($user);

la variable $user est le "login" du user alors que toi tu es sensé lui passer un "compte".