Count défectueux PHP/MYSQL

Résolu/Fermé
Ricky38 Messages postés 4349 Date d'inscription samedi 15 mars 2008 Statut Contributeur Dernière intervention 2 novembre 2013 - 8 août 2008 à 04:22
medoc13 Messages postés 65 Date d'inscription jeudi 7 août 2008 Statut Membre Dernière intervention 12 août 2008 - 9 août 2008 à 18:15
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 !
A voir également:

13 réponses

medoc13 Messages postés 65 Date d'inscription jeudi 7 août 2008 Statut Membre Dernière intervention 12 août 2008 21
8 août 2008 à 12:34
Salut,

tu peux essayer


// if $_GET['page'] defined, use it as page number
if(isset($_GET['page']))
{
$pageNum = $_GET['page'];
}
else
{
$pageNum = 1; // by default we show first page
}
en esperant que ça t'aideras
0
Ricky38 Messages postés 4349 Date d'inscription samedi 15 mars 2008 Statut Contributeur Dernière intervention 2 novembre 2013 1 458
8 août 2008 à 12:40
salut et merci pour ta réponse

mais j'aimerais savoir si ma requête est bonne car pour le premier affichage j'utilise cette requete et tout va bien mais une fois l'affichage faite il ne me donne pas le choix d'aller sur la 2 ieme page avec cette requete.

parcontre si je mets :

$query = "SELECT COUNT(*) AS numrows FROM groupes";

ça apparait sur la 2 ieme page mes tout est melé et il va chercher d'autres genres aussi

Merci de ton aide
0
medoc13 Messages postés 65 Date d'inscription jeudi 7 août 2008 Statut Membre Dernière intervention 12 août 2008 21
8 août 2008 à 13:04
Re salut,
il faut que tu ajoute ALL apres le UNION :
$requete = mysql_query("SELECT id,nom,genres,origine,images_tn FROM groupes WHERE genres LIKE '%$h%'
UNION ALL SELECT id,nom,genres,origine,images_tn FROM artistes WHERE genres LIKE '%$h%' ORDER BY nom LIMIT $offset, $rowsPerPage");
0
Ricky38 Messages postés 4349 Date d'inscription samedi 15 mars 2008 Statut Contributeur Dernière intervention 2 novembre 2013 1 458
8 août 2008 à 13:09
hummm attends lol

je parle de la requête pour le count :)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
medoc13 Messages postés 65 Date d'inscription jeudi 7 août 2008 Statut Membre Dernière intervention 12 août 2008 21
8 août 2008 à 15:37
essaye ça
UNION ALL => si tu veux tous les resultats
UNION => si tu veux pas de doublons
$query = "(SELECT COUNT(*) FROM groupes WHERE genres LIKE '%$h%') UNION ALL (SELECT COUNT(*) FROM artistes WHERE genres LIKE '%$h%')";
$result = mysql_query($query) or die('Error, query failed');
while($row = mysql_fetch_array($result, MYSQL_ASSOC))){
foreach($row as $key => $val)
{
$nb[]=$val;
}
}
$numrows=$nb[0]+$nb[1];
// how many pages we have when using paging?
$maxPage = ceil($numrows/$rowsPerPage);
0
Ricky38 Messages postés 4349 Date d'inscription samedi 15 mars 2008 Statut Contributeur Dernière intervention 2 novembre 2013 1 458
8 août 2008 à 15:56
merci medoc13

bon la page 1 de ... s'affiche correctement puisque $h = $_POST['name'];

Pour ce qui est de la page 2 et les suivante elle ne tient pas compte du WHERE genres LIKE '%$h%' donc l'affichage me donne d'autres genre.

Comment faire pour qu'il tienne compte de la varriable $h = $_POST['name']; qui vient du haut de ma page.


Merci encore de tes réponse et de ta patience ;)
0
medoc13 Messages postés 65 Date d'inscription jeudi 7 août 2008 Statut Membre Dernière intervention 12 août 2008 21
8 août 2008 à 16:09
il y a deux solution,
soit tu passe ta variable par session, soit avec la methode get
exemple avec get
$next = " <a href=\"$self?page=$page&genre=$genre\">[Suivante]</a> ";
et à la place de
$h = $_POST['name'];

$h = $_GET['genre'];

exemple avec session
session_start();
$_SESSION['genre']=$_POST['name'];

et dans ton script tu mets
if(isset($_POST['name'])){
$h=$_POST['name'];
}
else
{
//pour la methode get
if(isset($_GET['genre'])){
$h=$_GET['genre'];
}
//pour la methode session
if(isset($_SESSION['genre'])){
$h=$_SESSION['genre'];
}
}
j'espere que ce n'est pas trop brouillon a comprendre, et que ça t'aideras
0
noctambule28 Messages postés 31785 Date d'inscription samedi 12 mai 2007 Statut Webmaster Dernière intervention 13 février 2022 2 858
8 août 2008 à 19:36
salut les gars

medoc13, si tu veux conserver une mise en forme, utilise les balises, c'est le quatrieme bouton en haut de la fenetre d'ecriture

tu mets tun texte entre


Ricky, j'ai recupérér ce qui suit et qui n'as pus etre posté sur le forum, si ça peut rendre service .

*****************************
De Ricky

merci encore

Mais j'avoue que je suis pas mal melé.

regarde je te donne mon code :

<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
              <input type="submit" name="name" value="Blues">
              <input type="submit"  name="name" value="Classique">
              <input type="submit"  name="name" value="Country">
              <input type="submit"  name="name" value="Dance">
              <input type="submit"  name="name" value="Disco">
              <input type="submit"  name="name" value="Electro">
              <input type="submit"  name="name" value="Folk">
              <input type="submit"  name="name" value="Funk">
              <input type="submit"  name="name" value="Gospel">
              <input type="submit"  name="name" value="Grunge">
              <input type="submit"  name="name" value="Hip Hop">
              <input type="submit"  name="name" value="Jazz">
              <input type="submit"  name="name" value="Métal">
              <input type="submit"  name="name" value="Musique du monde">
              <input type="submit"  name="name" value="New Wave">
              <input type="submit"  name="name" value="Pop">
              <input type="submit"  name="name" value="Punk">
              <input type="submit"  name="name" value="Rap">
              <input type="submit"  name="name" value="Reggae">
              <input type="submit"  name="name" value="Rythm n'Blues">
              <input type="submit"  name="name" value="Rock">
              <input type="submit"  name="name" value="Soul">
              <input type="submit"  name="name" value="Techno">
      </form></div>
<div id="date">
<script language="JavaScript">
navvers = navigator.appVersion.substring(0,1);
if (navvers > 3)
   navok = true;
else
   navok = false;

today = new Date;
jour = today.getDay();
numero = today.getDate();
if (numero<10)
   numero = "0"+numero;
mois = today.getMonth();
if (navok)
   annee = today.getFullYear();
else
   annee = today.getYear();
TabJour = new Array("Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi");
TabMois = new Array("janvier","f&eacute;vrier","mars","avril","mai","juin","juillet","aout","septembre","octobre","novembre","dé&eacute;embre");
messageDate = TabJour[jour] + " " + numero + " " + TabMois[mois] + " " + annee;
   </script>
     <script language="JavaScript">
document.write(messageDate);
     </script>
</div>
<div class="Style60" id="Layer1"><a href="index.php" class="Style60">Accueil </a><span class="Style66">|</span> <a href="mailto:zonespectacle@live.fr">Contact</a> </div>
<div id="pubaxanti"> 
  <div align="center"><span class="Style60"><a href="index.php">Accueil</a> <span class="Style66">|</span> <a href="mailto:zonespectacle@live.fr">Contact</a> <span class="Style66">|</span> <a href="search.php">Rechercher</a></span><br/>
    <br/>
    <a href="https://www.axanti.com/?idaff=3390 " target="_blank"><img src="image/468x60.jpg" alt="Axanti" width="468" height="60" border="0" /></a></div>
</div>
<div id="donnees">
 <?php
$h = $_POST['name'];

  // how many rows to show per page
    $rowsPerPage = 5;
    
    // 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
}
$h = $_POST['name'];
echo '<br>';

// how many rows we have in database
$query = "(SELECT COUNT(*) FROM groupes WHERE genres LIKE '%$h%') UNION (SELECT COUNT(*) FROM artistes WHERE genres LIKE '%$h%')";  
$result  = mysql_query($query) or die('Error, query failed');
while($row = mysql_fetch_array($result, MYSQL_ASSOC)){
foreach($row as $key => $val)
{
$nb[]=$val;
}
}
$numrows=$nb[0]+$nb[1]; 
// 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;
?>




Avec tous le code que j'ai vu pour ces pages je ne vois plus rien, c'est parce que c'est assez urgent car ça prendrait le bord de la tablette pour le moment loll mais bon je ne peux pas me le permettre. Aurais-tu la gentillesse d'intègrer ton code dans le mien stp. tu serais vraiment gentil.

Merci d'avance
0
medoc13 Messages postés 65 Date d'inscription jeudi 7 août 2008 Statut Membre Dernière intervention 12 août 2008 21
8 août 2008 à 20:24
<div id="donnees">
 <?php
 	
 	//pour la version session
	//pour utiliser la version session décommente ces lignes et commente celle de la methode get
 	/*session_start();
 	if(isset($_POST['name'])){
		$h = $_POST['name'];
		$_SESSION['genre']=$h;
	}else{
		if(isset($_SESSION['genre'])){
			$h = $_SESSION['genre'];
		}
	}*/
	//pour la version session
	
	//pour la version get
	if(isset($_POST['name'])){
		$h = $_POST['name'];
	}else{
		if(isset($_GET['genre'])){
			$h = $_GET['genre'];
		}
	}
	//pour la version get
	
	
  // how many rows to show per page
    $rowsPerPage = 5;
    
    // if $_GET['page'] defined, use it as page number
if(isset($_GET['page']))
{
	$pageNum = $_GET['page'];
}else{
	$pageNum =1;
}

// 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(*) FROM groupes WHERE genres LIKE '%$h%') UNION (SELECT COUNT(*) FROM artistes WHERE genres LIKE '%$h%')";  
$result  = mysql_query($query) or die('Error, query failed');
while($row = mysql_fetch_array($result, MYSQL_ASSOC)){
foreach($row as $key => $val)
{
$nb[]=$val;
}
}
$numrows=$nb[0]+$nb[1]; 
// 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> ";//pour la methode en get tu ecris <a href=\"$self?page=$page&amp;genre=$genres\">[Précédente]</a>
	
	$first = " <a href=\"$self?page=1\">[Première Page]</a> ";//pour la methode en get tu ecris <a href=\"$self?page=1&amp;genre=$genres\">[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> ";//pour la methode en get tu ecris <a href=\"$self?page=$page&amp;genre=$genres\">[Suivante]</a>
	
	$last = " <a href=\"$self?page=$maxPage\">[Dernière Page]</a> ";//pour la methode en get tu ecris <a href=\"$self?page=$maxPage&amp;genre=$genres\">[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;
?>
</div>
0
medoc13 Messages postés 65 Date d'inscription jeudi 7 août 2008 Statut Membre Dernière intervention 12 août 2008 21
8 août 2008 à 20:25
je t'es mis la portion a remplacer celle de <div id="donnees">.....</div>
0
Ricky38 Messages postés 4349 Date d'inscription samedi 15 mars 2008 Statut Contributeur Dernière intervention 2 novembre 2013 1 458
8 août 2008 à 20:39
salut medoc merci bien

mais malheureusement j'ai toujours le même résultat

en fait en arrivant sur le site je clique sur le bouton rockalors la page 1 de ... affiche des données dont le genres contient le mot rock, jusque là ça va,

si je clique sur suivante il m'amène a la page 2 de ... et et l'affichage montre encore des données dont le genres contient le mot rock mais le probleme il m'affiche aussi d'autres genres.

J'espère que je suis clair :)
0
medoc13 Messages postés 65 Date d'inscription jeudi 7 août 2008 Statut Membre Dernière intervention 12 août 2008 21
8 août 2008 à 20:50
est ce que tu peux me passer le fichier sql de ta base pour que je teste en local pour voir ou est le prob
0
Ricky38 Messages postés 4349 Date d'inscription samedi 15 mars 2008 Statut Contributeur Dernière intervention 2 novembre 2013 1 458
8 août 2008 à 20:56
oui biensur

tient je te laisse mon msn ça va être plus facile ericp96@hotmail.com
0
Ricky38 Messages postés 4349 Date d'inscription samedi 15 mars 2008 Statut Contributeur Dernière intervention 2 novembre 2013 1 458
9 août 2008 à 14:07
Merci beaucoup medoc13


Tout fonctionne à merveille.

J'ai pris le temps de regarder le code et les tables et oui je comprends mieux le problème maintenant.

Vraiment sympa de ta part
0
medoc13 Messages postés 65 Date d'inscription jeudi 7 août 2008 Statut Membre Dernière intervention 12 août 2008 21
9 août 2008 à 18:15
avec plaisir
0