bonjour
d'habitude pour paginer un tableau qui affiche les resultat d'une base de donnée je fais comme ceci :
et cela fonctionne très bien ...
La par contre j'effectue une recherche dans la base de donnée et j'affiche les résultat trouvé comme ceci :
et la ca ne fonctionne pas, les résultats sur la premiere page s'affiche bien, il compte bien le nombre d'entrer egalement, mais lorsque que je veux allez sur une autre page il me renvoi cette erreur :
A priori c'est au niveau du $result que ca plante, mais je ne vois pas comment faire pour y remedier..
si vous aviez une idée, je suis preneur..
d'habitude pour paginer un tableau qui affiche les resultat d'une base de donnée je fais comme ceci :
<?php
$cnx = mysql_connect( "localhost", "bonplanm_kanel", "michael" );
$db= mysql_select_db( "bonplanm_catalogue" );
// sélectionne toutes les fiches de la table
$query="SELECT * FROM catalogue WHERE promo=1";
$result = mysql_query($query);
$Nmax = 50; // nombre par page
$Ncur = 0; // n° de la fiche courante
$Ndeb=@$_GET["num"]; // 1ère fiche transmise par l'URL
echo("<h3>Toutes les promos du moment : </h3>");
echo('<div class="tri"> Cliquez sur les entetes des colonnes pour trier </div><br>');
echo '<table class="sortable" >';
echo '<th>image</th>';
echo '<th>nom</th>';
echo '<th>description</th>';
echo '<th>prix</th>';
echo '<th>marchand</th>';
echo '<th>lien</th>';
// tant qu'il y a des fiches
$resume = substr($val['descriptif'],0,80); // pour les 80 premiers caractères
while (($val = mysql_fetch_array($result))
&& ($Ncur<$Nmax+$Ndeb)) {
if($Ncur>=$Ndeb) {
// affiche un champ
echo '<tr onmouseover="this.className=\'hover\';" onmouseout="this.className=\'\';">';
echo( '<td><img src="'.($val["image80"]).'" ></td>' );
echo( ' <td class="nom">'.$val["nom"].'</td>' );
echo " <td>".$resume = substr($val["descriptif"],0,80);"</td>" ;
echo( ' <td class="pri">'.$val["prix"].'Euros</td>' );
echo( '<td ><img src="'.($val["nommarchand"]).'" ></td>' );
echo '<td class="lien"><a href="details.php?id_prod=' . htmlspecialchars($val["id_prod"]) . ' "target="blank">Voir le produit</a></td>';
echo '</tr>';
}
// une de plus
$Ncur++;
} echo '</table>'; ?>
<br>
<div class="foot">
<? // Navigation
// Des fiches avant ?
if($Ndeb > 0) { ?>
<td valign=top>
<A href="?num=<? echo $Ndeb-$Nmax; ?>" >Retour</A>
</td>
<? } ?>
<td>
<? // N° des pages
$Npag = ceil(mysql_numrows($result)/$Nmax);
for($i = 1;$i<=$Npag;$i++) {
// Page courante ?
if($Ndeb == ($i-1)*$Nmax) { ?>
Page <? echo $i; ?>
<? } else { ?>
<A href="?num=<? echo ($i-1)*$Nmax; ?>"
> <? echo $i; ?> </A>
<? }
} ?>
</td>
<? // Des fiches après ?
if($val) { ?>
<td valign=top>
<A href="?num=<? echo $Ncur; ?>">Suite>></A>
</td>
<? } ?>
et cela fonctionne très bien ...
La par contre j'effectue une recherche dans la base de donnée et j'affiche les résultat trouvé comme ceci :
<?php
function sql_connexion() {
global $mysqli;
$mysqli = new mysqli("localhost", "bonplanm_kanel", "michael", "bonplanm_catalogue");
/* Vérification de la connexion */
if(mysqli_connect_errno()) {
printf("Échec de la connexion : %s\n", mysqli_connect_error());
exit();
}
// $mysqli->query("SET NAMES 'utf8' ");
}
function sql_requete($query) {
global $mysqli;
$result = $mysqli->query($query);
if(!$result) {
// Erreur dans la requete
echo '<p>ERROR '. $mysqli->errno .'</strong> >> '. $mysqli->error .'</p>';
return false;
} else {
// Tout va bien
return $result;
}
}
if(isset($_GET['q']) && $_GET['q'] != '') {
$recherche = stripslashes($_GET['q']);
} else {
$recherche = '';
}
?>
<?php
if($recherche != '') {
$cnx = mysql_connect( "localhost", "bonplanm_kanel", "michael" );
$db= mysql_select_db( "bonplanm_catalogue" );
$query = "SELECT nom, prix, image80, idneta, rubrique, keywords, nommarchand, id_prod, descriptif, url ";
$query .= "FROM catalogue " ;
$query .= "WHERE nom REGEXP '". addslashes($recherche) ."' ";
//$query .= "OR REGEXP '". addslashes($recherche) ."' "; pour chercher dans plusieurs champs
$result = mysql_query($query);
$Nmax = 20; // nombre par page
$Ncur = 1; // n° de la fiche courante
$Ndeb=@$_GET["num"]; // 1ère fiche transmise par l'URL
echo '<table class="sortable" >';
echo '<th>image</th>';
echo '<th>nom</th>';
echo '<th>description</th>';
echo '<th>prix</th>';
echo '<th>marchand</th>';
echo '<th>lien</th>';
/* Récupère un tableau d'objets */
$resume = substr($val['descriptif'],0,80); // pour les 80 premiers caractères
while (($val = mysql_fetch_array($result))
&& ($Ncur<$Nmax+$Ndeb)) {
if($Ncur>=$Ndeb) {
// affiche un champ
echo '<tr onmouseover="this.className=\'hover\';" onmouseout="this.className=\'\';">';
echo( '<td><img src="'.($val["image80"]).'" ></td>' );
echo( ' <td class="nom">'.$val["nom"].'</td>' );
echo " <td>".$resume = substr($val["descriptif"],0,80);"</td>" ;
echo( ' <td class="pri">'.$val["prix"].'Euros</td>' );
echo( '<td ><img src="'.($val["nommarchand"]).'" ></td>' );
echo '<td class="lien"><a href="details.php?id_prod=' . htmlspecialchars($val["id_prod"]) . ' "target="blank">Voir le produit</a></td>';
echo '</tr>';
}
// une de plus
$Ncur++;
}
echo '</table>';
}
?>
<div class="foot">
<? // Navigation
// Des fiches avant ?
if($Ndeb > 0) { ?>
<A href="?num=<? echo $Ndeb-$Nmax; ?>" >Retour</A>
<? } ?>
<? // N° des pages
$Npag = ceil(mysql_numrows($result)/$Nmax);
for($i = 1;$i<=$Npag;$i++) {
// Page courante ?
if($Ndeb == ($i-1)*$Nmax) { ?>
Page <? echo $i; ?>
<? } else { ?>
<A href="?num=<? echo ($i-1)*$Nmax; ?>"
> <? echo $i; ?> </A>
<? }
} ?>
<? // Des fiches après ?
if($val) { ?>
<A href="?num=<? echo $Ncur; ?>">Suite>></A>
<? } ?>
et la ca ne fonctionne pas, les résultats sur la premiere page s'affiche bien, il compte bien le nombre d'entrer egalement, mais lorsque que je veux allez sur une autre page il me renvoi cette erreur :
Warning: mysql_numrows(): supplied argument is not a valid MySQL result resource in /home/bonplanm/public_html/essai.php on line 96
Warning: Division by zero in /home/bonplanm/public_html/essai.php on line 96
A priori c'est au niveau du $result que ca plante, mais je ne vois pas comment faire pour y remedier..
si vous aviez une idée, je suis preneur..