Count defectueux PHP/MYSQL

Petit nouveau ! | 6 Messages

08 août 2008, 13:06

Bonjour,

voilà je récupère une variable et j'utilise pour l'affichage un système de page et je travaille sur 2 tables en même temps.

Mon code:
 <?php
$h = $_POST['name'];

  // how many rows to show per page
    $rowsPerPage = 10;
    
    // by default we show first page
    $pageNum = 1;
    
    // if $_GET['page'] defined, use it as page number
if(isset($_GET['page']))
{
	$pageNum = $_GET['page'];
}

// counting the offset
$offset = ($pageNum - 1) * $rowsPerPage;


    
    $requete = mysql_query("SELECT id,nom,genres,origine,images_tn FROM groupes WHERE genres LIKE '%$h%' UNION SELECT id,nom,genres,origine,images_tn FROM artistes WHERE genres LIKE '%$h%' ORDER BY nom LIMIT $offset, $rowsPerPage");
 
    
    while($donnees = mysql_fetch_array($requete)) 
    { // boucle parcours des resultats
    $id = $donnees['id'];
    $nom = $donnees['nom'];
    $quand = $donnees['quand'];
	$lieu = $donnees['lieu'];
    $ville = $donnees['ville'];
	$origine = $donnees['origine'];
	$genres = $donnees['genres'];
    $images = $donnees['images']; 
	$images_tn = $donnees['images_tn'];  
    ?>
      </p>
  <p>
<p>
<p>
<center>
  <table align="center" width="450" border="0" cellpadding="0">
    <tr>
    <td width="52" valign="middle"><form method="post" action="genres_details.php">
              <input type="image" border="0" value="Submit" src="<?php echo "$images_tn"; ?>" name="img" border="0">
              <input type="hidden" name="img" value="<?php echo "$images_tn"; ?>">
      </form></td>
    <td width="133" valign="middle" class="Style23"><?php echo "$nom"; ?></td>
    <td width="133" valign="middle" class="Style23"><?php echo "$genres"; ?></td>
	<td width="133" valign="middle" class="Style23"><?php echo "$origine"; ?></td>
  </tr>
</table>
 
  
<?php
}

echo '<br>';

// how many rows we have in database
$query   = "SELECT COUNT(*) AS numrows FROM groupes WHERE genres LIKE '%$h%' UNION SELECT COUNT(*) AS numrows FROM artistes WHERE genres LIKE '%$h%'";

$result  = mysql_query($query) or die('Error, query failed');
$row     = mysql_fetch_array($result, MYSQL_ASSOC);
$numrows = $row['numrows'];

// how many pages we have when using paging?
$maxPage = ceil($numrows/$rowsPerPage);

$self = $_SERVER['PHP_SELF'];

// creating 'previous' and 'next' link
// plus 'first page' and 'last page' link

// print 'previous' link only if we're not
// on page one
if ($pageNum > 1)
{
	$page = $pageNum - 1;
	$prev = " <a href=\"$self?page=$page\">[Précédente]</a> ";
	
	$first = " <a href=\"$self?page=1\">[Première Page]</a> ";
} 
else
{
	$prev  = ' [Précédente] ';       // we're on page one, don't enable 'previous' link
	$first = ' [Première Page] '; // nor 'first page' link
}

// print 'next' link only if we're not
// on the last page
if ($pageNum < $maxPage)
{
	$page = $pageNum + 1;
	$next = " <a href=\"$self?page=$page\">[Suivante]</a> ";
	
	$last = " <a href=\"$self?page=$maxPage\">[Dernière Page]</a> ";
} 
else
{
	$next = ' [Suivante] ';      // we're on the last page, don't enable 'next' link
	$last = ' [Dernière Page] '; // nor 'last page' link
}

// print the page navigation link
echo $first . $prev . " <strong>Page $pageNum de $maxPage</strong> " . $next . $last;
?>
Voilà sur la première page exemple page 1 de 3 tout s'affiche à merveille exemple si ma variable récupérée est POP et bien ça affiche tout où biensur la colonne genre contient POP. Le problème survient quand je vais sur la 2 ième page ( 2 de 3) là tout est mêlé et je suis certain que le problème vient de ma ligne en gras mais j'ai beau essayé différentes requête je ne trouve pas la bonne.

Si quelqu'un pouvait m'aider à résoudre ce problème je lui en serait reconnaissant :)

Merci d'avance !

Mammouth du PHP | 804 Messages

08 août 2008, 14:37

Bonjour,

Tu dois avoir un conflit de nom de champ, faut éviter voir (pas faire) des noms identiques

Philippe

Petit nouveau ! | 6 Messages

08 août 2008, 14:42

daccord oui c'est vrai que les noms de mes champs sont les memes ou a peu pres dans les deux tables, mais ce que je ne comprends pas c'est qu'il affiche tout dans la page 1 de ....

autrement dit il y a juste le dernier script php qui ne fonctionne pas bien

ViPHP
ViPHP | 1996 Messages

08 août 2008, 18:39

Peux tu nous dire l'intitulé de tes table genres et artistes. En effet tu veux afficher $donnes["quand"] mais tu ne l'interroge pas dans ta requête.

De plus UNION est très gourmand en ressource. Une bonne requête te permettrais de résoudre ton problème.
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

10 août 2008, 18:03

C'est surtout que UNION place à la suite les résultats des différentes requêtes qui le constituent, comme s'ils étaient retournés par une seule requête, mais rien de plus. En gros si ta première requête retourne 5 et la seconde 4, tu vas obtenir 2 enregistrements contenant 5 et 4 respectivement et non un enregistrement contenant 9.

Il te faut donc boucler (ou à défaut parcourir les différents enregistrements) pour en récupérer les valeur et les additionner toi même pour obtenir le bon nombre de résultats :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...