webForumDet fria alternativet

räkna ut rader i ett paging script...

PHP

2 svar · 246 visningar · startad av mahedel

Medlem sedan juli 2002105 inlägg
Frågan#1

såhär ser mitt paging script ut:

<?
   // Anslut och välj databas
   $db = mysql_connect ("localhost", "$dbu", "$dbp")
      or die (mysql_error());
   mysql_select_db ("dbnamn");

   $limit = 3; // Avgör hur många rader som visas per sida.
   if (isset ($_GET['page']) ) {
      $page = $_GET['page'];
   } else {
      $page = 0;
   }
   $offset = $page * $limit;

   // Kör första sql-frågan som tar reda på antalet rader.
   $sql = "SELECT COUNT(*) AS rows_tot FROM gb where owner='$username'";
   $result = mysql_query($sql)
      or die(mysql_error());
   $row = mysql_fetch_array ($result);
   $pages_tot = floor(abs(($row['rows_tot']-1) / $limit)); // Räknar ut hur många sidor det blir.

   // Tillägg börjar

   $max_pages = 100; // Max antal sidor

   if (($max_pages - 1) < $pages_tot) {
     $pages_tot = $max_pages - 1;
   }

   if ( $offset > ($max_pages - 1)*$limit ) {
     $offset = ($max_pages - 1)*$limit;
     $page = $pages_tot;
   }

   // Tillägg slutar

if ($row['rows_tot'] == 0) {
     echo "Inga inlägg i gästboken.";
   }
     else {
   echo "Sida " . ($page + 1) . " av " . ($pages_tot + 1) . "<br>";
   }

if ($page > 0) { // Om man inte är på första sidan visas dom här länkarna
      echo "<a href=\"{$_SERVER['PHP_SELF']}?username=$username&page=" . ($page - 1) . "\">Föregående</a> ";
   }
   if ($page < $pages_tot) { // Om man inte är på sista sidan visas dom här länkarna
      echo "<a href=\"{$_SERVER['PHP_SELF']}?username=$username&page=" . ($page + 1) . "\">Nästa</a>";
   }

echo "<br><br>";

   // Kör andra sql-frågan som tar rätt antal rader.
   $sql = "SELECT * FROM gb where owner='$username' ORDER BY id DESC LIMIT $offset, $limit";
   $result = mysql_query($sql)
      or die(mysql_error());
   while ( $row = mysql_fetch_array ($result) ) {

$gb_id = $row['id'];
$gb_writer = $row['writer'];
$gb_owner = $row['owner'];
$gb_private = $row['private'];
$gb_deleted = $row['deleted'];

if ($gb_deleted == 0 || $gb_deleted == "" || $info_rank == 3){

echo $row['datum_dag'] . " ";
echo $row['datum_tid'];

if ($gb_private == 1)
echo " <font color=\"#FF0000\">[PRIVAT INLÄGG]</font>";

if ($info_rank == 3 || $info_rank == 2){

if ($gb_deleted == 1)
echo " <font color=\"#FF0000\">[BORTTAGET INLÄGG]</font>";
}

echo "<br>";
echo "<a href=\"profil.php?username=";
echo $row['writer'];
echo "\"";
echo "title=\"Besök ";
echo $row['writer'];
echo "\"";
echo "<b>";
echo $row['writer'];
echo "</b></a>";
echo " <b>skrev:</b>";
echo "<br>";
echo $row['gbtext'] . "<br><br>";

if($login_user == "$gb_writer" || $login_user == "$gb_owner" || $info_rank == 3 || $info_rank == 2)
echo "<a
href=\"gb.php?username=$gb_owner&delete=$gb_id\"> Ta bort inlägg</a> <font color=\"black\">|</font>  <a
href=\"gb.php?username=$gb_owner&undodelete=$gb_id\"> Ta tillbaka inlägg</a>
<font color=\"black\">|</font> <a href=\"gb.php?username=$gb_owner&edit=$info_id\">Redigera inlägg</a><br><br>";
}
}
?>

detta script fungerar jättebra men när man trycker på länken "Ta bort inlägg" så uppdateras databasen till deleted='0' för det aktuella inlägget som man trycker på ska döljas och inte visas för alla användare utan bara vissa och för dom som det inte syns för så räknar den ju raden fast den inte syns för de så då kan det bli i vissa fall att en hel pagingsida är helt tom. Så det jag vill är att den bara räknar med dom raderna som har deleted='0' detta borde gå med jag har inte lyckats felfritt så nu ber jag om hjälp...

/MVH Martin

Medlem sedan dec. 2002258 inlägg
#2

Jag hade nog räknat bort alla inlägg med deleted=0 redan i sql satsen så här:

$sql = "SELECT * FROM gb where owner='$username' AND deleted!=0 ORDER BY id DESC LIMIT $offset, $limit";

Borde inte allt falla på plats då?

Medlem sedan juli 2002105 inlägg
#3

jag tycker även att det borde funka men...

jag tycker även att det borde funka men... det gör det inte jag har provat med AND deleted='0' och ditt förslag: AND deleted!=0

men inget verkar fungera något vidare...

någon med ett annat förslag...

/MVH Martin

259 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)