Code php, connexion BDD

Résolu/Fermé
Signaler
-
 Julien -
Bonjour,
je suis actuellement sur un projet, qui est de créer mon premier site en PHP et HTML, mais je suis bloqué sur un code PHP qui est censé me connecter à la BDD pour me sortir les 5 derniers billets. Voici le problème :

J'ai ma page en HTML, sous le nom de "index.php" car j'inclue du PHP dedans.
Le code HTML marche très bien, j'ai un petit design sympa, pas de grand luxe, mais bon, ça va.
Ensuite, je rajoute mon code en PHP qui lui est censé donc me connecter à une BDD.
Je rajoute donc ce code, et je ferme la session en bas de la page.
Je lance donc ma page, mais la page est blanche ! (je suis sous wamp serveur, et j'utilise phpMyAdmin)

Ce que je ne comprends pas du tout, c'est que ces codes PHP, marche sur une autre page (avec du HTML aussi). Donc je vous remercie de bien vouloir m'aider s'il vous plait, car je ne comprends pas pourquoi cela m'arrive t-il.

Voici mon code (index.php) :

<?php
try
{
    $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
    $bdd = new PDO('mysql:host=localhost;dbname=blog', 'root', '', $pdo_options);
	
    $req = $bdd->query('SELECT id, titre, contenu, DATE_FORMAT(date_creation, \'%d/%m/%Y à %Hh%imin%ss\') AS 

date_creation_fr FROM billets ORDER BY id DESC LIMIT 0, 5');
    
    while ($donnees = $req->fetch())
    {
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link rel="stylesheet" href="style.css" type="text/css" media="screen" />
</head>

<body>
<div id="header"><div class="wrap clearfix">
	<div id="navigation" class="menu clearfix">
		<ul class="lavaLampWithImage"><ul id="navbar">
<li><a href="">Lien 1</a></li>
<li><a href="">Lien 2</a></li>
<li><a href="">Lien 3</a></li>
<li><a href="">Lien 4</a></li>
<li><a href="">Lien 5</a></li>
		</ul></ul>
	</div>

	<h1>Titre du site</h1>
</div></div>


<!-- CORP DE LA PAGE -->
<!-- CORP DE LA PAGE -->
<!-- CORP DE LA PAGE -->

<div id="container"><div class="wrap clearfix">
	<div id="content"><h3>
            <?php echo htmlspecialchars($donnees['titre']); ?>
            <em><?php echo htmlspecialchars($donnees['date_creation_fr']); ?></em>
        </h3>
<div id="featured">
<p>
        <?php
        echo nl2br(htmlspecialchars($donnees['contenu']));
        ?>
        <br />
       <em><a href="commentaires.php?billet=<?php echo $donnees['id']; ?>">Commentaires</a></em>
        </p>
</div></div></div></div>

<!-- FIN --><div id="container"</div><!-- FIN -->
<?php
}
$req->closeCursor();   
}
catch(Exception $e)
{
die('Erreur : '.$e->getMessage());
}
?>
</body>
</html>



Voila, je remercie tout ceux qui m'aideront, car je suis bloqué, et je comptais publier le tout dimanche soir. Merci encore d'avoir lut ce message.

Cordialement, Julien.

8 réponses

Messages postés
18614
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
28 novembre 2021
4 336
Salut.

Il ne faut pas mettre le code en entier dans le boucle while : tout ce qui est contenu dans le bloc (de « { » à « } ») se répètera pour chaque entrée (article) !

Ça devrait plutôt ressembler à ça :
https://gist.github.com/5dde56f18d9d782f8ed7
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 41989 internautes nous ont dit merci ce mois-ci

Je te remercie beaucoup, je vais enfin pouvoir continuer, je n'avais pas panser à cela. Merci.
Donc je viens de regarder ton code, ça m'affiche une partie de la page, mais pas le milieux, donc le problème est bien à cause de la boucle. Donc je vais voir cela encore merci.

Edit : Rien à faire, mon code bug, pourtant, j'ai essayer plusieurs choses différentes, si tu pouvais encore m'aider une fois, cela serait sympa. Pendant ce temps là, moi je continue de chercher, j'espère trouver d'ici ce soir.
Pour signaler que même comme ça, cela ne marche pas :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link rel="stylesheet" href="style.css" type="text/css" media="screen" />
</head>

<body>

<div id="header"><div class="wrap clearfix">
<div id="navigation" class="menu clearfix">
<ul class="lavaLampWithImage"><ul id="navbar">
<li><a href="">Lien 1</a></li>
<li><a href="">Lien 2</a></li>
<li><a href="">Lien 3</a></li>
<li><a href="">Lien 4</a></li>
<li><a href="">Lien 5</a></li>
</ul></ul>
</div>

<h1>Titre du site</h1>
</div></div>


<!-- CORP DE LA PAGE -->

        <div id="container">
            <div class="wrap clearfix">
                <div id="content">
                    <h3>
*****
                 </h3>
                
                    <div id="featured">
                        <p>
<?php
try {
    $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
    $bdd = new PDO('mysql:host=localhost;dbname=blog', 'root', '', $pdo_options);

    $req = $bdd->query('SELECT id, titre, contenu, DATE_FORMAT(date_creation, "%d/%m/%Y à %Hh%imin%ss") AS '.
                       'date_creation_fr FROM billets ORDER BY id DESC LIMIT 0, 5');
    
    while ($donnees = $req->fetch()) { ?>


        <?php
        echo nl2br(htmlspecialchars($donnees['contenu']));
        ?>

    <?php }
    $req->closeCursor();
}

catch(Exception $e) {
    die('Erreur : '.$e->getMessage());
}
?>
                        </p>
                    </div>

                </div>
            </div>
        </div>
<!-- FIN --><div id="container"</div><!-- FIN -->
</body>
</html>


Je sais que je ne suis encore qu'un débutant, mais j'aimerais juste savoir si il y a une chance que ça marche, je ne demande pas de code qui marche, mais un indice ou autre pour que j'essaie de trouver mon problème.

Cordialement, Julien
Quel est le résultant obtenu en remplaçant
<?php
echo nl2br(htmlspecialchars($donnees['contenu']));
?>
Par
<?php
echo "Res<br/>";
var_dump( $donnees );
echo nl2br(htmlspecialchars($donnees['contenu']));
?>
?
çà m'affiche cela (à l'endroit où doivent apparaître les billets) :

Res

array
  'id' => string '1' (length=1)
  0 => string '1' (length=1)
  'titre' => string 'Test' (length=4)
  1 => string 'Test' (length=4)
  'contenu' => string 'Julien' (length=6)
  2 => string 'Julien' (length=6)
  'date_creation_fr' => string '01/04/2011 à 16h32min56s' (length=24)
  3 => string '01/04/2011 à 16h32min56s' (length=24)



C'est déjà mieux, au moins, ça ne me cache pas la page du milieux. Sinon, j'ai recréé un index.php en mettant tout le code pour la connexion à la BDD et tout, mais le problème c'est que je vais perdre mon thème d'avant. Sinon, je continue quand même à chercher, et j'aimerais aussi que quelqu'un essai de me dire où est mon erreur. Merci encore beaucoup.
Bizarre que ça n'affiche pas 'Julien' en dessous du var_dump.

Que donnerait :
echo "1- ". $donnees['contenu']."<br/>";
echo "2- ". htmlspecialchars($donnees['contenu'])."<br/>";
echo "3- ". nl2br($donnees['contenu'])."<br/>";
echo "4- ". nl2br(htmlspecialchars($donnees['contenu']))."<br/>";
?
Cela donne :


1- Julien
2- Julien
3- Julien
4- Julien


Du coup, merci, grave à vos codes, j'ai réussi à afficher ce que je voulais, je vous remercie.