Aller au contenu

LIMIT MySql...


bryce_30

Messages recommandés

salut à tous, je suis en train de réaliser un site web, et j'ai un souci sur une de mes pages... Voici le lien.

en bas de ma page, j'ai mis des bouton suivant et précédent afin d'aller a la page suivante ou précédente. seulement voilà ça ne fonctionne pas... voici mon code source :

<?php
@mysql_connect("$cfg_hote","$cfg_user","$cfg_password"); //connexion au serveur SQL
$select_base=@mysql_selectdb("$cfg_base"); //Selection de la base de donnees qui porte le meme nom que votre login

if (!$select_base) //Si la connexion echoue
{
echo "<font color=\"#CC0000\"><b>Mauvaise configuration!!! </b></font><br>
Vérifiez que votre login et mot de passe sont bien saisi pour la connexion
à la base <b>$cfg_base</b>";
}
else //Sinon
{
// Declaration des variables pour indiuer les limites de la requete MYSQL
$npp=$_GET['npp'];
$nbf=$_GET['nbf'];

$requete = "SELECT * FROM `$cfg_table` WHERE 1 ORDER BY `ref` LIMIT $npp,$nbf"; //requete pour afficher la table complete
$resultat_sql = mysql_query($requete) or die('Erreur SQL !<br>'.$requete.'<br>'.mysql_error());
$nombreligne =mysql_num_rows($resultat_sql); //nombre de lignes de la table
echo "Il y a ".$nombreligne." enregistrements dans la bases de données.<br><br>";

// Creation de la table et de la premiere ligne
echo "<table border=\"1\"> <tr>
<th>Réf</th>
<th>Titre du Film</th>
<th>Année de parution</th>
<th>Durée</th>
<th>Genre</th>";

// Affichage des donnees de la base
// On utilise une boucle pour parcourir toutes les lignes
$i = 0;
while ($i<$nombreligne)
{
/* La commande mysql_result permet de lire un champ
on commence par creer des variables avec les valeurs
pour plus de lisibilite du code*/
	$ref = mysql_result($resultat_sql,$i,"ref");
	$TitreFilm = mysql_result($resultat_sql,$i,"TitreFilm");
	$AnneParution = mysql_result($resultat_sql,$i,"AnneParution");
	$Duree = mysql_result($resultat_sql,$i,"Duree");
	$Genre = mysql_result($resultat_sql,$i,"Genre");

// Il faut ensuite afficher ces valeurs dans le code HTML
	echo "<tr><td>$ref</td>
	<td><a href='index.php3?page=info_mov&id=$ref'>$TitreFilm</a></td>
	<td>$AnneParution</td>
	<td>$Duree</td>
	<td>$Genre</td>";
// ne pas oublier d'incrementer i pour la boucle while
	$i++;
}
// il ne reste plus qu'a fermer le tableau
echo "</table>";

echo "<form action='index.php3?page=test&npp=$npp&nbf=$nbf' method='post' name='next'>";
$npp=$npp+30;
echo "<input type='submit' name='suivant' value='Suivant'>
</form>
<form action='index.php3?page=test&npp=$npp&nbf=$nbf' method='post' name='previous'>";
$npp=$npp-30;
echo "<input type='submit' name='précédent' value='Précédent'>
</form>";
}
?>

c'est à cause de ma variable $npp, mais j'arrive pas résoudre le problème... :yes: (en même temps sinon je poserai de question ! :transpi: ) je sais que mes commande pour ajouter ou soustraire 30 à $npp ne sont pas a la bonne place, mais je sais ou les mettre ...

Comment puis je faire ? merci d'avance !

PS : bonnes fêts à tous !!!

Lien vers le commentaire
Partager sur d’autres sites

Normal.

$npp=$_GET['npp'];

$nbf=$_GET['nbf'];

echo "<form action='index.php3?page=test&npp=$npp&nbf=$nbf' method='post' name='next'>";

Tu utilises un formulaire en POST, mais tu veux des variables GET. Moralité? ça foire :)

Au passage, fait un isset sur tes variables GET avant de t'en servir... un jour le comportement de php (renvoie NULL) ne sera peut-être pas aussi sympathique.

Lien vers le commentaire
Partager sur d’autres sites

merci pour le get !!!

par contre le isset je sais pas comment ça marche... :yes: et aussi maintenant ça fonctionne encore moins ! lol :yes:

alors doit pas y avoir que ça !

edit : j'ai remplacer les get par post... mais ça ne marche pas non plus... :transpi: il retourne des valeurs vide à npp et nbf ! donc j'ai besoin du isset !

Lien vers le commentaire
Partager sur d’autres sites

meme avec le isset ça marche pas... :D ça m'efface la moitié de mon lien et me retourne ça avec la méthode get :

http://echoriath.free.fr/BDD_LISTE_DE_FILMS/index.php3?npp=Suivant

ou ça :

http://echoriath.free.fr/BDD_LISTE_DE_FILMS/index.php3?npp=Pr%C3%A9c%C3%A9dent

comme lien... :eeek2:

alors que par la méthode post, j'ai ça qui s'affiche :

Erreur SQL !

SELECT * FROM `collection` WHERE 1 ORDER BY `ref` LIMIT ,

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 '' at line 1

et ça dans l'adresse :

http://echoriath.free.fr/BDD_LISTE_DE_FILMS/index.php3?page=test&npp=0&nbf=30

EDIT : donc ça veut dire que je n'arrive pas a récupérer les valeur de $npp et $nbf dans l'adresse pour les passer en paramètre dans ma requête SQL... :-D:chinois::craint: ça m'énerve !!!!

Lien vers le commentaire
Partager sur d’autres sites

Hemf, désolé :) depuis que je code objet (vi, c'est possible) en php 4/5, j'ai crée ma propre classe Database qui - si elle ne résoud rien - permet d'éviter le problème d'injection SQL.

ie: j'écris plus mysql_query( ... ) mais

SELECT * FROM table LIMIT $d:1 OFFSET $d:2

Ce qui est ensuite traîter automatiquement et transformé.

Pour ton truc :

$requete = "SELECT * FROM `$cfg_table` WHERE 1 ORDER BY `ref` LIMIT $npp,$nbf";

vire le "WHERE 1", sert à rien...

$npp c'est quoi ? nombre de page?

$npf ? nombre par page?

L'erreur SQL que tu as, c'est du à une initialisation à vide de tes variables $npp et $npf, ce qui est compréhensible : par défaut, l'utilisateur n'a pas cliqué sur Suivant/Précédent, donc ça n'existe pas (=null en php) et (string) null == '' en php = chaîne vide.

Pour cela, faut utiliser isset() comme je te l'ai montré pour vérifier que tes variables GET sont bien définies, et les utiliser, ou dans le cas où elles sont non définies de les définir avec tes valeurs par défaut (0, 30).

Ton problème est simple :

echo "<form action='index.php3?page=test&npp=$npp&nbf=$nbf' method='post' name='next'>";
$npp=$npp+30;
echo "<input type='submit' name='suivant' value='Suivant'>
</form>
<form action='' method='post' name='previous'>";
$npp=$npp-30;
echo "<input type='submit' name='précédent' value='Précédent'>
</form>";

Essaye plutôt ça :

<?php $basehref = 'index.php3?page=test&npp=%d&nbf=%d'; ?>
<a href="<?php printf($basehref, $npp-30, $nbf); ?>">Précédent</a> 
<a href="<?php printf($basehref, $npp+30, $nbf); ?>">Suivant</a>

1. quand tu fais des formulaires, utilises les! un champ <input /> avec comme valeur pour name = npp revient au même que de demander au navigateur de passer la variable npp dans l'url (si t'es en mode GET)

2. ça ne sert à rien d'incrémenter une variable après l'avoir affiché, surtout quand ça modifie le comportement de ton script (puisque Précédent revient en fait au suivant)

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...