Problème de pagination

Eléphant du PHP | 233 Messages

08 févr. 2014, 20:02

Bonsoir à tous,
j'ai un problème de pagination dans mon script php. La première page s'affiche sans souci mais lors du passage sur la suivante j'ai une erreur sql :
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 'AND id<>"35" AND biographie !="" AND valide="1") LIMIT 2, 2' at line 1
j'ai fais un $_GET pour récupérer l'ID du département : rechercher_dpt.php?id=84 sur la première page, là tout va bien, voici l'URL de la page 2 : rechercher_dpt.php?page=2 source du problème.
Je ne vois pas comment faire pour résoudre ce problème.
Si quelqu'un peut m'aider. Merci d'avance.
Je vous joins le code de la page php :
<?php
$limit_par_page = 2; 
	if (isset($_GET['page']) AND !empty($_GET['page']))
	{
		$page = intval($_GET['page']);
	}
	else
	{
		$page = 1;
	}
	$from = ($page - 1) * $limit_par_page;
										
					$reponse = mysql_query('SELECT * FROM '.$prefix.'membres JOIN departement USING(id_departement) WHERE (id_departement='.$_GET['id'].' AND id<>"'.$_SESSION['id'].'" AND biographie !="" AND valide="1") LIMIT  '.$from.', '.$limit_par_page)or die(mysql_error());
	
	if ($id=$_GET['id']) {
	
	$sql = mysql_query ('SELECT * FROM departement WHERE id_departement='.$_GET['id'].'');
	($donnees = mysql_fetch_array($sql))or die(mysql_error());
	
echo 'Voici le résultat de votre recherche pour le département : <h8>'.$donnees['departement'].'</h8>';

while ($donnees = mysql_fetch_array($reponse))
	{
 echo '<p>';
 echo '<table width="860px">';

// le suite affiche les données
//la fin du code :

$requete = mysql_query('SELECT COUNT(id) AS nb_membres FROM '.$prefix.'membres WHERE (id_departement='.$_GET['id'].' AND id<>"'.$_SESSION['id'].'" AND biographie !="" AND valide="1")');
	
	$donnees = mysql_fetch_assoc($requete);

	$nb_pages = ceil($donnees['nb_membres'] / $limit_par_page);
	//echo 'Il y a,  '.$donnees['nb_membres'].'  membres.<br /><br />';
	echo $lang['aller_a_la_page'];
	for ($i=1 ; $i<=$nb_pages ; $i++)
	{
		if ($i == $page)
		{
		        echo ' '.$i.'';
		}
		else
		{
			echo ' <a href="rechercher_dpt.php?page='.$i.'">'.$i.'</a>';
		}
	}
?>

ViPHP
xTG
ViPHP | 7331 Messages

08 févr. 2014, 20:57

En SQL la différence s'exprime avec l'opérateur "!=" et non "<>". ;)

Eléphant du PHP | 233 Messages

08 févr. 2014, 21:02

Cela ne change rien, j'ai toujours la même erreur.

ViPHP
xTG
ViPHP | 7331 Messages

08 févr. 2014, 23:08

C'est donc que tu as quelque chose qui pose problème dans la variable $_GET['id'].
Autrement dit tu as généré une injection SQL.

Regardes du côté de la fonction mysql_real_escape_string() qui devrait être utilisée sur toute variable que tu injectes dans une requête SQL.
Et aussi tu devrais vérifier toute variable que tu utilises, chose que tu ne fais pas avec $_GET['id'] => existe-t-elle ? Est-elle vide ? ect