Bonjour,
J'ai cette partie de code sur mon site:
if(mysql_num_rows($reponse) != 0){
Mais j'essaye de trouver l'équivalent en PDO, de cette code. Comment pourrai-je faire?
Merci d'avance,
Bonsoir,
oui, le tuto sera bon pour vous.
mysql_real_escape_string est obsolète et il faudra le remplacer par : $bdd->quote($_GET'page'])
<?php
$bdd = new PDO("mysql:host=localhost;dbname=dbname", "dbuser", "dbpass");
// On récupère les 3 dernières news
if(isset($_GET'page'])){
$page = $bdd->quote($_GET'page']); // On récupère le numéro de la page indiqué dans l'adresse ( exemple news.php?page=4)
}
// si non la variable n'existe pas, c'est la première fois qu'on charge la page
else{
$page = 1; // On affiche la page 1, la page par defaut
}
// Sélection de toute les news
$reponse = $bdd->query('SELECT * FROM news ORDER BY id DESC LIMIT 0, 10');
//Si nous avons des données, nous les affichons
if ($reponse->RowCount() > 0){
//on affiche le résultat
while ($donnees = $reponse->fetch()){
?>
<div class="news">
<span class="cat_date">
<?php
//si la miniature existe, on l'affiche
if(!empty($donnees'miniature']))
echo '<img alt="'.$donnees'titre'].'" src="'.$donnees'miniature'].'" style="float:left;margin:5px 10px;" />';
?>
<em><?= stripslashes($donnees'categorie']); //on recupère catégorie ?>,</em> le <?= date('d/m/Y à H\hi', strtotime($donnees'date'])); //on recupère la date ?> <br/></span>
<span class="titre_news"><a href="news.html?id=<?= $donnees'id']; ?>"><?= stripslashes($donnees'titre']); //on recupère titre ?> </a><br /></span>
<div class="intro">
<?php
$introduction = nl2br(stripslashes($donnees'introduction']));
echo $introduction;
?>
</div>
<div class="hr"></div><br />
</div>
<?php
} // Fin de la boucle des news
}
//si il n'y a rien
else {
echo 'Aucunes données!';
}
// fin du else
?>
Par contre vous récupérer le nombre de page mais vous ne vous en servez pas.
Remplacer :
if (isset($_GET'page']))
{
$page = $bdd->quote($_GET'page']); // On récupère le numéro de la page indiqué dans l'adresse ( exemple news.php?page=4)
}
else // si non la variable n'existe pas, c'est la première fois qu'on charge la page
{
$page = 1; // On affiche la page 1, la page par defaut
}
Par:
$page = (isset($_GET'page']))? $_GET'page'] : 1;
Et enlever le "echo" et le var_dump.
Salut,
Comment pourrai-je faire? En utilisant Google l'ami de tout le monde
Tu n'as pas du chercher beaucoup :s voila ce que j'ai trouver en même pas 2 min
sinon avec une requete Count + fetch_num
$sql="SELECT count(*) FROM [tablename] WHERE key == ? ";
$sth = $this->db->prepare($sql);
$sth->execute(array($key));
$rows = $sth->fetch(PDO::FETCH_NUM);
echo $rows[0];
sinon compter tout simplement le nombre de resultat
$rows = $q->fetchAll();
$num_rows = count($rows);
Cordialement,
Salut,
J'avais cherché mais j'avais pas compris grand chose...
Et quand j'essaye ton code j'ai cette erreur: Fatal error: Call to a member function fetchAll() on a non-object in /home/u621129814/public_html/index2.html on line 46
Je met mon code complet:
<?php
$bdd = new PDO('');
// On récupère le nombre total de messages
$reponse = $bdd->query('SELECT COUNT(*) AS nb_messages FROM news');
while ($donnees = $reponse->fetch())
$Messages = $donnees'nb_messages'];
// On récupère les 3 dernières news
if(isset($_GET'page'])){
$page = mysql_real_escape_string($_GET'page']); // On récupère le numéro de la page indiqué dans l'adresse ( exemple news.php?page=4)
}
// si non la variable n'existe pas, c'est la première fois qu'on charge la page
else{
$page = 1; // On affiche la page 1, la page par defaut
}
$reponse = $bdd->query('SELECT * FROM news ORDER BY id DESC LIMIT 0, 10');
//si il y a quelque chose
$rows = $q->fetchAll();
$num_rows = count($rows);{
//on affiche le résultat
while ($donnees = $reponse->fetch())
?>
<div class="news">
<span class="cat_date">
<?php
//si la miniature existe, on l'affiche
if(!empty($donnees'miniature'])){
echo '<img alt="'.$donnees'titre'].'" src="'.$donnees'miniature'].'" style="float:left;margin:5px 10px;" />';
}
?>
<em><?php
echo stripslashes($donnees'categorie']); //on recupère catégorie ?>,</em> le <?php echo date('d/m/Y à H\hi', strtotime($donnees'date'])); //on recupère la date ?> <br/></span>
<span class="titre_news"><a href="news.html?id=<?php echo $donnees'id']; ?>"><?php echo stripslashes($donnees'titre']); //on recupère titre ?> </a><br /></span>
<div class="intro">
<?php
$introduction = nl2br(stripslashes($donnees'introduction']));
echo $introduction;
?>
</div>
<div class="hr"></div><br />
</div>
<?php
} // Fin de la boucle des news
//si il n'y a rien
{
echo 'Aucunes données!';
}
// fin du else
?>
Merci d'avance,
Houla en effet je vois que tu ne comprend pas grand chose a PDO
Il faut que tu donne a ton objet PDO les informations de ta BDD sinon forcement il ne trouvera pas FetchAll
$conn = new PDO("mysql:host=localhost;dbname=dbname", "dbuser", "dbpass");
donc je te conseil de suivre ce tuto vue que tu as des difficultés, tu apprendras surement de nouvelle chose
Bonjour,
Yentia: Je sais me connecter, mais pour le forum j'ai enlevé mes données. J'aurais du mettre quelques choses c'est vrai...
Carouge10: Le nombre de pages, je me serve dans une autre fichier. J'ai essayé d'enlever la recuperation de page, mais a chaque fois j'ai eu des messages d'erreurs. Donc, je l'ai laissé en attendant. Mais je dois changer la fonction des pages, de toute façon, c'est pas correcte.
Sinon, j'ai essayé le code, et ca marche. Merci beaucoup pour votre aide...
Je met le sujet comme résolu.
Bonjour,
Je reviens vers vous sur ce même sujet car j'ai le même type de problème sur d'autres pages. En effet, sur les fichiers ou j'en ai plusieurs pages, l'erreur suivant m'apparaît: Fatal error: Call to a member function RowCount() on a non-object in /home/u621129814/public_html/news-series.html on line 60
Lorsque je vais sur la rubrique tout va bien, mais quand je clique sur une page j'ai cette problème. Même si je clique sur la page 1.
Comme exemple je met le code du fichier news-series:
<?php
$bdd = new PDO('mysql:host=1234;dbname=1234', '1234', '1234'); // On se connecte à la base
// le nombre de news (3) qu'on veut afficher dans une page
$MessagesPerPage = 10;
// On récupère le nombre total de messages
$reponse = $bdd->query('SELECT COUNT(*) AS nb_messages FROM news');
while ($donnees = $reponse->fetch())
$Messages = $donnees'nb_messages'];
// On calcule le nombre de pages à créer
$Pages = ceil($Messages / $MessagesPerPage);
// On récupère les 3 dernières news
if (isset($_GET'page']))
{
$page = $bdd->quote($_GET'page']); // On récupère le numéro de la page indiqué dans l'adresse ( exemple news.php?page=4)
}
else // si non la variable n'existe pas, c'est la première fois qu'on charge la page
{
$page = 1; // On affiche la page 1, la page par defaut
}
$firstmessage = ($page - 1) * $MessagesPerPage;
$reponse = $bdd->query('SELECT * FROM news WHERE categorie="Séries" ORDER BY id DESC LIMIT ' . $firstmessage . ', ' . $MessagesPerPage);
//si il y a quelque chose
if ($reponse->RowCount() > 0){
//on affiche le résultat
while ($donnees = $reponse->fetch()){
?>
<div class="news">
<span class="cat_date">
<?php
//si la miniature existe, on l'affiche
if(!empty($donnees'miniature'])){
echo '<img alt="'.$donnees'titre'].'" src="'.$donnees'miniature'].'" style="float:left;margin:5px 10px;" />';
}
?>
<em><?php
echo stripslashes($donnees'categorie']); //on recupère catégorie ?>,</em> le <?php echo date('d/m/Y à H\hi', strtotime($donnees'date'])); //on recupère la date ?> <BR></span>
<span class="titre_news"><a href="news.html?id=<?php echo $donnees'id']; ?>"><?php echo stripslashes($donnees'titre']); //on recupère titre ?> </a> </span><br />
<div class="intro"> <?php
{
$introduction = nl2br(stripslashes($donnees'introduction']));
echo $introduction;
}
?> </div>
<div class="hr"></div><br />
</div>
<?php
} // Fin de la boucle des news
}//fin du if(mysql_num_rows($result) != 0){
//si il n'y a rien
else{
echo 'Aucunes données!';
}
// fin du else
?>
<div class="pages">
<?php
echo 'Page : ';
for ($i = 1 ; $i <= $Pages ; $i++)
{
echo '<a href="news-series.html?page=' . $i . '">' . $i . '</a> ';
}
?>
</div>
Sur la ligne 60, j'ai cette ligne de code: if ($reponse->RowCount() > 0){
Après plusieurs tentatives, et des recherches sur le web, j'arrive toujours pas à trouver le problème.
Pouvez vous m'aider?
Merci d'avance,
Bonsoir,
Voici mon code complet:
<!DOCTYPE html>
<html>
<head>
<title>cine-seriestv.tk - Toute l'actualité sur vos séries préférés</title>
<meta charset="utf-8" />
<meta name="description" content="Retrouvez toute l'actualité sur vos séries préférés, Françaises et Américaines ..." />
<link rel="stylesheet" href="design.css" />
<!--[if lt IE 9]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
</head>
<body>
<?php include('facebook.php'); ?>
<div id="bloc_page">
<?php include('header.php'); ?>
<?php include('menu.php'); ?>
<section>
<div class="file-ariane">
<p> <a href="index.html">Accueil</a> <a href="tv.html">TV</a> <a href="#">Séries</a> Actualités Séries
</p>
</div>
<hr width=100%>
<?php include('colonnes_droite.php'); ?>
<p>ACTUALITES "SERIES"</p>
<?php
$bdd = new PDO('mysql:host=1234;dbname=1234', '1234', '1234'); // On se connecte à la base
// le nombre de news (3) qu'on veut afficher dans une page
$MessagesPerPage = 10;
// On récupère le nombre total de messages
$reponse = $bdd->query('SELECT COUNT(*) AS nb_messages FROM news');
while ($donnees = $reponse->fetch())
$Messages = $donnees'nb_messages'];
// On calcule le nombre de pages à créer
$Pages = ceil($Messages / $MessagesPerPage);
// On récupère les 3 dernières news
if (isset($_GET'page']))
{
$page = $bdd->quote($_GET'page']); // On récupère le numéro de la page indiqué dans l'adresse ( exemple news.php?page=4)
}
else // si non la variable n'existe pas, c'est la première fois qu'on charge la page
{
$page = 1; // On affiche la page 1, la page par defaut
}
$firstmessage = ($page - 1) * $MessagesPerPage;
$reponse = $bdd->query('SELECT * FROM news WHERE categorie="Séries" ORDER BY id DESC LIMIT ' . $firstmessage . ', ' . $MessagesPerPage);
//si il y a quelque chose
if ($reponse->RowCount() > 0){
//on affiche le résultat
while ($donnees = $reponse->fetch()){
?>
<div class="news">
<span class="cat_date">
<?php
//si la miniature existe, on l'affiche
if(!empty($donnees'miniature'])){
echo '<img alt="'.$donnees'titre'].'" src="'.$donnees'miniature'].'" style="float:left;margin:5px 10px;" />';
}
?>
<em><?php
echo stripslashes($donnees'categorie']); //on recupère catégorie ?>,</em> le <?php echo date('d/m/Y à H\hi', strtotime($donnees'date'])); //on recupère la date ?> <BR></span>
<span class="titre_news"><a href="news.html?id=<?php echo $donnees'id']; ?>"><?php echo stripslashes($donnees'titre']); //on recupère titre ?> </a> </span><br />
<div class="intro"> <?php
{
$introduction = nl2br(stripslashes($donnees'introduction']));
echo $introduction;
}
?> </div>
<div class="hr"></div><br />
</div>
<?php
} // Fin de la boucle des news
}//fin du if(mysql_num_rows($result) != 0){
//si il n'y a rien
else{
echo 'Aucunes données!';
}
// fin du else
?>
<div class="pages">
<?php
echo 'Page : ';
for ($i = 1 ; $i <= $Pages ; $i++)
{
echo '<a href="news-series.html?page=' . $i . '">' . $i . '</a> ';
}
?>
</div>
<br /><br/>
</section>
<?php include('footer.php'); ?>
</div>
</body>
</html>
Merci d'avance pour votre aide.
Avez-vous essayer la requête dans phpmyadmin pour savoir si elle est correcte ?
De plus, il est préférable de ne pas utiliser plusieurs fois la même variable pour des données différente.
Il vaut mieux donner un nom explicite pour les données récupérer de la BDD.
ex pour la 2ème requête:
$req_news = $bdd->query('SELECT * FROM news WHERE categorie = "Séries" ORDER BY id DESC LIMIT ' . $firstmessage . ', ' . $MessagesPerPage);
//si il y a quelque chose
if ($req_news->RowCount() > 0){
//on affiche le résultat
while ($donnees_news = $req_news->fetch()){
...
Bonsoir,
Merci pour la réponse.
"Avez-vous essayer la requête dans phpmyadmin pour savoir si elle est correcte ?" C'est-à-dire?
En faite, Lorsque j'ai crée le site, j'ai utilisé l'ancien version pour me connecter à mon BDD, mais comme l'ancien version est devenu obsolète, j'ai commencé à changer en PDO. Et donc avant que je change ca, la pagination marchait sans problème mais dès que j'ai changé en PDO la pagination ne marche plus. Je sais qu'il y a un problème quelques part, mais j'arrive pas à trouver où?
Et c'est vrai qu'avec votre exemple, c'est plus facile pour comprendre...
Merci d'avance pour votre aide.
Quand vous vous rendez sur phpmyadmin de votre site, vous avez la possibilité de tester votre requête dans l'onglet "SQL" afin de vérifier que celle-ci soit correct.
Je viens de tester la requête sur mon PHPMYADMIN.
J'ai testé la requête suivante, ca a marché sans problème:
SELECT * FROM news WHERE categorie = "Séries"
Mais si je rajoute la partie "ORDER BY id DESC LIMIT" , ca ne marche plus ni la requête entière;
SELECT * FROM news WHERE categorie = "Séries" ORDER BY id DESC LIMIT . $firstmessage . ', ' . $MessagesPerPage
Merci d'avance pour votre réponse.
Dans phpMyAdmin tu dois remplacer $firstmessage et $MessagePerPage par une valeur pour savoir si la requête marche. Sinon dans ton code php n'oublies pas les guillemets d'ouverture et de fermetures.
Je viens d'essayer mais ca n'a pas marché.
Il m'a affiché le message d'erreur:
1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '10' at line 1Par contre si j'enlève complètement &MessagePerPage, et que je donne un valeur à &firstmessage, il m'affiche un resultat:
Par exemple, si je donne comme valeur 10, il va me sortir 10 au hasard...
Merci d'avance pour votre aide.
La syntaxe exacte serait du style:
SELECT * FROM news WHERE categorie = "Séries" ORDER BY id DESC LIMIT 0, 10
Ah oui, ca marche, j'avais essayé 1, 10 mais non 0, 10
Donc, si ca c'est correct, c'est quoi le problème?
Merci d'avance pour votre aide.
<!DOCTYPE html>
<html>
<head>
<title>cine-seriestv.tk - Toute l'actualité sur vos séries préférés</title>
<meta charset="utf-8" />
<meta name="description" content="Retrouvez toute l'actualité sur vos séries préférés, Françaises et Américaines ..." />
<link rel="stylesheet" href="design.css" />
<!--[if lt IE 9]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
</head>
<body>
<?php include('facebook.php'); ?>
<div id="bloc_page">
<?php include('header.php'); ?>
<?php include('menu.php'); ?>
<section>
<div class="file-ariane">
<p> <a href="index.html">Accueil</a> <a href="tv.html">TV</a> <a href="#">Séries</a> Actualités Séries
</p>
</div>
<hr width=100%>
<?php include('colonnes_droite.php'); ?>
<p>ACTUALITES "SERIES"</p>
<?php
$bdd = new PDO('mysql:host=1234;dbname=1234', '1234', '1234'); // On se connecte à la base
// le nombre de news (3) qu'on veut afficher dans une page
$MessagesPerPage = 10;
// On récupère le nombre total de messages
$reponse = $bdd->query('SELECT COUNT(*) AS nb_messages FROM news');
while ($donnees = $reponse->fetch())
$Messages = $donnees'nb_messages'];
// On calcule le nombre de pages à créer
$Pages = ceil($Messages / $MessagesPerPage);
// On récupère les 3 dernières news
if (isset($_GET'page']))
{
$page = $bdd->quote($_GET'page']); // On récupère le numéro de la page indiqué dans l'adresse ( exemple news.php?page=4)
}
else // si non la variable n'existe pas, c'est la première fois qu'on charge la page
{
$page = 1; // On affiche la page 1, la page par defaut
}
$firstmessage = ($page - 1) * $MessagesPerPage;
echo '<br>Page '.$page.'<br>';
$reponse_news = $bdd->query('SELECT * FROM news WHERE categorie="Séries" ORDER BY id DESC LIMIT '.$firstmessage.', '.$MessagesPerPage.'');
//si il y a quelque chose
var_dump($reponse_news);
if ($reponse_news->RowCount() > 0){
//on affiche le résultat
while ($donnees_news_news = $reponse->fetch()){
?>
<div class="news">
<span class="cat_date">
<?php
//si la miniature existe, on l'affiche
if(!empty($donnees_news'miniature'])){
echo '<img alt="'.$donnees_news'titre'].'" src="'.$donnees_news'miniature'].'" style="float:left;margin:5px 10px;" />';
}
?>
<em><?php
echo stripslashes($donnees_news'categorie']); //on recupère catégorie ?>,</em> le <?= date('d/m/Y à H\hi', strtotime($donnees_news'date'])); //on recupère la date ?> <BR></span>
<span class="titre_news"><a href="news.html?id=<?= $donnees_news'id']; ?>"><?= stripslashes($donnees_news'titre']); //on recupère titre ?> </a> </span><br />
<div class="intro"> <?php
$introduction = nl2br(stripslashes($donnees_news'introduction']));
echo $introduction;
?> </div>
<div class="hr"></div><br />
</div>
<?php
} // Fin de la boucle des news
}//fin du if(mysql_num_rows($result) != 0){
//si il n'y a rien
else{
echo 'Aucunes données!';
}
// fin du else
?>
<div class="pages">
<?php
echo 'Page : ';
for ($i = 1 ; $i <= $Pages ; $i++)
{
echo '<a href="news-series.html?page=' . $i . '">' . $i . '</a> ';
}
?>
</div>
<br /><br/>
</section>
<?php include('footer.php'); ?>
</div>
</body>
</html>
Qu'affiche Page et ce qui suit ? (echo de la ligne 58 et le var_dump() de la ligne 61)
Je viens de le tester et voila ce qu'il m'affiche:
Page 1
object(PDOStatement)#2 (1) { "queryString"]=> string(73) "SELECT * FROM news WHERE categorie="Séries" ORDER BY id DESC LIMIT 0, 10" }
Par contre si je clique sur une page, il m'affiche ca:
Page '1'
bool(false)
Fatal error: Call to a member function RowCount() on a non-object in /home/u621129814/public_html/news-series.html on line 63
Merci d'avance pour votre aide,
Ah géniale! ca marche! Enfin... Merci beaucoup
Encore une chose, le fait qu'il n'affiche pas le nombre exacte de pages, le problème vient de la récupération du nombre total de pages?
Parce qu'il m'affiche 9 pages alors qu'il n'y a que 3 pages en réalité. A partir de la page 4, il m'affiche aucune données (logique vu qu'il n'y a rien a partir de cette page).
Et il m'affiche la même chose dans les autres fichiers où j'ai mis en place la pagination... (Cette problème était déjà là)
Merci d'avance
Je pense que cela viens de la requête car vous demander d'afficher la catégorie 'Séries' mais pour le comptage, vous demandez tout.
J'ai l'impression que ca marche...
J'ai juste rajouté la catégorie à cette partie du code:
$reponse = $bdd->query('SELECT COUNT(*) AS nb_messages FROM news WHERE categorie = "Séries"');
Génial!
Merci pour vos réponses et pour m'avoir aidé.