problème pagination ( mysql)
le 28/05/2010 à 20:12
Kniva
Merci beaucoup pour ton aide.
Encore une petite question et normalement j'arrête avec mes questions.
J'ai une vieille erreur qui resurgit à cette ligne
?php
$resultat=mysql_query($sql,$base) or die ('Erreur SQL!<br/>'.$sql.'<br/>'.mysql_errror());
?>
J'ai cette erreur qui apparait
Fatal error: Call to undefined function mysql_errror() in /mnt/web9/31/99/52403599/htdocs/DVD.php on line 251
Normal tu n'as pas 3 lettres r à mysql_error()
le 28/05/2010 à 23:32
Kniva
Ne pas voir que j'ai mis 3 rrr, j'ai vraiment plus les yeux en face des trous.
J'ai donc rechanger mon code, et j'ai mis
<?php
$base=mysql_connect(SERVER,LOGIN,MDP);
mysql_select_db(BDD,$base);
/*on prépare une requête permettant de calculer le nbre total d'éléments qu'il faudra afficher sur
nos différentes pages*/
$sql='SELECT count (*) FROM CD';
//on exécute cette requête
$resultat=mysql_query($sql,$base) or die ('Erreur SQL!<br/>'.$sql.'<br/>'.mysql_error());
//on récupère le nombre d'élements à afficher
$nb_total=mysql_fetch_array($resultat);
?>
Mais malheureusement, j'ai ça maintenant:
Erreur SQL!
SELECT count (*) FROM CD
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 '*) FROM CD' at line 1
select count(*) from CD
et non
select count (*) from CD
:)
le 29/05/2010 à 09:30
Kniva
Merci beaucoup mais ça ne marche toujours pas.
Voici le code dernièrement changé
<?php
include("inf.php");
//on se connecte à notre base
$base=mysql_connect(SERVER,LOGIN,MDP);
mysql_select_db(BDD,$base);
/*on prépare une requête permettant de calculer le nbre total d'éléments qu'il faudra afficher sur
nos différentes pages*/
$sql='SELECT count(*) FROM DVD';
//on exécute cette requête
$resultat=mysql_query($sql,$base) or die ('Erreur SQL!<br/>'.$sql.'<br/>'.mysql_error());
//on récupère le nombre d'élements à afficher
$nb_total=mysql_fetch_array($resultat);
//on teste si ce nombre ne vaut pas 0
if(($nb_total=$nb_total[0])==0)
{
echo"Aucune réponse trouvée";
}
else
{
echo'<center><table border="1" width="600">
<tr><td>dvdTitre</td><td rowspan="4">dvdImage</td></tr>
<tr><td>dvdDate</td></tr>
<tr><td>dvdEditeur</td></tr>
<tr><td>dvdDescription</td></tr>
</table></center>';
}
/*sinon, on regarde si la variable $debut ( le x de notre LIMIT) n'a pas déjà été déclarée, et dans ce cas, on
l'initialise à 0.*/
if(!isset ($_GET['debut']))
{
$_GET['debut']=0;
$nb_affichage_par_page=3;
//preparation de la requete avec le LIMIT
$sql='SELECT dvdTitre, dvdDate, dvdEditeur, dvdDescription, dvdImage) FROM DVD ORDER BY dvdDate DESC LIMIT '
. $_GET['debut'] . ','. $nb_affichage_par_page;
//on exécute la requete
$req=mysql_query($sql) or die ('Erreur SQL!<br/>' .$sql. '<br/>'. mysql_error());
//on va scanner tous les tuples un par un
while($data=mysql_fetch_array($req))
{
//on affiche les résultats ds la <table>
echo'<center><table border="1" width="600"><tr><td>'. htmlentities (trim($data['dvdTitre'])).'</td></tr>';
echo'<tr><td>'. htmlentities (trim($data['dvdImage'])).'</td></tr>';
echo'<tr><td>' . htmlentities (trim($data['dvdDate'])) .'</td></tr>';
echo'<tr><td>' . htmlentities (trim($data['dvdEditeur'])). '</td></tr>';
echo'<tr><td>' . htmlentities (trim($data['dvdDescription'])). '</td></tr>';
}
//on libere l'espace memoire alloué pour cette requete
mysql_free_result($req);
echo'</table></center><br><br>';
//on affiche enfin notre barre
echo'<span class="gras">' . barre_naviguation($nb_total,$nb_affichage_par_page, $_GET['debut'], 5) . '</span>';
}
//on libère l'espace memoire alloué pour cette reuqête
mysql_free_result($resultat);
echo'</table><br/>';
?>
et j'obtiens ceci
dvdTitre dvdImage
dvdDate
dvdEditeur
dvdDescription
Erreur SQL!
SELECT dvdTitre, dvdDate, dvdEditeur, dvdDescription, dvdImage) FROM DVD ORDER BY dvdDate DESC LIMIT 0,3
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 ') FROM DVD ORDER BY dvdDate DESC LIMIT 0,3' at line 1
Normal tu fermes une parenthèse dans ta requête mais elle n'est jamais ouverte. Supprime la parenthèse.
Juste un truc en passant count(*) c'est mauvais comme façon de faire. Le joker * est à éviter au maximum. Il est préférable d'indiquer le champ à compter. Par exemple count(id) AS total
le 29/05/2010 à 11:59
Kniva
Désolé avec toutes ces questions, mais je ne vois pas cette parenthèse de trop.
Je suis vraiment trop sur ce code je crois ( si rêver de ligne de code signifie folie, je suis bonne pour l'asile)
Ligne 35 du script que tu as donné, juste après dvdImage.
$sql='SELECT dvdTitre, dvdDate, dvdEditeur, dvdDescription, dvdImage) FROM DVD ORDER BY dvdDate DESC LIMIT '
36. . $_GET['debut'] . ','. $nb_affichage_par_page;
le 29/05/2010 à 13:08
Kniva
Merci beaucoup, j'ai vraiment pas les yeux en face des trous.
J'ai encore deux questions:
Pourquoi j'ai encore
dvdTitre dvdImage
dvdDate
dvdEditeur
dvdDescription
qui s'affiche su ma page? Et apparemment mon code au dessus pour la pagination ne fonctionne pas.
Ma deuxième question est juste de savoir si c'était possible de pouvoir stocker dans la base de donnée du code HTML. J aimerai mettre le lien d'une image hébergée dans la base, mais je ne sais pas si c'est possible
Je pense que tu n'as pas comprit le principe de la pagination.
Je t'explique imaginons que tu aies 10 000 résultats qui correspondent à ta requête.
Tu ne vas pas afficher les 10 000 en une seule page. Tu découpes donc tes 10 000 résultats en morceaux et tu affiches chaque morceau sur une page.
Par exemple la page 1 affiche les 100 premiers résultat, la page 2 les 100 suivants etc etc jusqu'a 10 000.
Pour découper tes résultats tu as besoin de 2 choses. la première est de savoir combien de résultat correspondent à ta requête (dans notre exemple 10 000) c'est la 1ere requêtes (elle sert à connaitre le nombre de pages par exemple).
Il te faut ensuite une deuxième requêtes qui va juste chercher les résultats 100 par 100 (100 est un exemple tu peux retourner le nombre que tu veux).
Et là sur cette deuxième requête tu dois utiliser la clause LIMIT. la clause LIMIT sert prendre juste une partie.
Par exemple LIMIT 1,10 prend les 10 premiers résultats en partant du 1er. Donc les résultats de 1 à 11.
LIMIT 15,10 prend les 10 premiers résultats en partant du 15ème Donc les résultats de 15 à 25.
Ensuite pour la 2ème question. En base de données tu peux stocker tout et n'importe quoi. La base stock des données, c'est son rôle.
Mais pour du html, je pense qu'il est préférable de le stocker en dur dans un fichier html (plus simple à afficher, plus rapide et surtout plus logique.
Je t'invite à regarder les fonctions readfile, file_get_contents et file_put_contents.