Avatar billede webcreator Nybegynder
27. juni 2003 - 15:23 Der er 26 kommentarer og
1 løsning

Søgning - Skriv : Viser 1 - 5 poster ud af 11

Hej.

Jeg har et søgescript, som virkelig driller mig. Jeg vil have det til at udskrive hvor mange poster der vises, og ud af hvor mange ialt.

Jeg vil her give mit eksempel, som desværre viser sig at give fejl hele tiden. (kommer an på antallet af poster)

Nogen der kan give mig en ordentlig metode ?

Kode:


  $g_total = mysql_query("SELECT COUNT(*) AS total FROM uploads where kate = '$kate' and (emne like '%$soeg%' or besk like '%$soeg%')") or die(mysql_error());
  $total = mysql_result($g_total,0);

  $fra = $s+1;
  $til = $s+$pr_side;
 
  if ($til > $total) {
  $til = $s+$pr_side-1;
  }
 
  if ($total < $pr_side) {
      $til = $total;
  }
 
  if ($antal == 0) {
      $fra = 0;
  }

  echo "<table align=center border=0 width=400 cellspacing=0 cellpadding=0></td><td><div class=b2>Viser $fra - $til poster ud af $total</div></td><td align=right>";
  if ($s >= $pr_side) { //Tjekker om værdien af $s er større eller lig $pr_side
      $previous = $s-$pr_side; //Regner ud hvor mysql skal starte hvis forrige side kaldes
      echo "<a href='?s=$previous&soeg=$soeg&kate=$kate'>Forrige </a>"; //Udskriver linket
      }
      if ($total > $s+$pr_side) { //Tjekker om der er flere sider
      $next = $s+$pr_side; //Regner ud hvor mysql skal starte hvis næste side kaldes
      echo "<a href='?s=$next&soeg=$soeg&kate=$kate'>Næste</a>"; //Udskriver linket "næste"
      }
      echo "</td></tr></table>";
     
      mysql_close($conn);



Alle IF'erne var mit forsøg på, at give nogle fornuftige tal
Avatar billede schaefner Juniormester
27. juni 2003 - 15:36 #1
<?php
$offset = (isset($_GET['offset'])) ? $_GET['offset'] : 0; // Hvis ikke $offset er sat, sættes den til 0
$pr_side = 5;

$g_total = mysql_query("SELECT COUNT(*) AS total FROM uploads WHERE kate = '$kate' AND (emne LIKE '%$soeg%' OR besk LIKE '%$soeg%')") or die(mysql_error());
$antal = mysql_result($g_total,0);
$til = $offset+$pr_side;

echo "<table align=center border=0 width=400 cellspacing=0 cellpadding=0></td><td><div class=b2>Viser $offset - $til poster ud af $antal</div></td><td align=right>";
if ($offset >= $pr_side) {
    $forrige = $offset-$pr_side;
    echo "<a href='?s=$forrige&soeg=$soeg&kate=$kate'>Forrige </a>";
}
if ($total > $ofset+$pr_side) {
    $naeste = $offset+$pr_side;
    echo "<a href='?s=$naeste&soeg=$soeg&kate=$kate'>Næste</a>";
}
echo "</td></tr></table>";
mysql_close($conn);
?>
Avatar billede schaefner Juniormester
27. juni 2003 - 15:36 #2
hov:

<?php
$offset = (isset($_GET['offset'])) ? $_GET['offset'] : 0; // Hvis ikke $offset er sat, sættes den til 0
$pr_side = 5;

$g_total = mysql_query("SELECT COUNT(*) AS total FROM uploads WHERE kate = '$kate' AND (emne LIKE '%$soeg%' OR besk LIKE '%$soeg%')") or die(mysql_error());
$antal = mysql_result($g_total,0);
$til = $offset+$pr_side;

echo "<table align=center border=0 width=400 cellspacing=0 cellpadding=0></td><td><div class=b2>Viser $offset - $til poster ud af $antal</div></td><td align=right>";
if ($offset >= $pr_side) {
    $forrige = $offset-$pr_side;
    echo "<a href='?s=$forrige&soeg=$soeg&kate=$kate'>Forrige </a>";
}
if ($antal > $ofset+$pr_side) {
    $naeste = $offset+$pr_side;
    echo "<a href='?s=$naeste&soeg=$soeg&kate=$kate'>Næste</a>";
}
echo "</td></tr></table>";
mysql_close($conn);
?>
Avatar billede schaefner Juniormester
27. juni 2003 - 15:38 #3
ahh, skal lige være:
if ($antal > $offset+$pr_side) {
Avatar billede jakoba Nybegynder
27. juni 2003 - 15:39 #4
Du bør holde rede i hvad du tester.

$fra = $s+1;
$til = $s+$pr_side;

if ($til > $total) {  // fornuftig test
    $til = $s+$pr_side-1;  // Hvorfor sætte til den værdi?
}
if ($total < $pr_side) { // hvad har de to tal med hinanden at gøre?
    $til = $total;
}
if ($antal == 0) {    // Hvad tester du her?
    $fra = 0;
}

jeg ville nok skriver

if ( ! isset( $s ) ) $s = 0;  // hvis ingen parametre så start forfra.

$fra = $s;
$til = $s+$pr_side-1;

if ($til > $total) {  // fornuftig test
    $til = $total;    // vis ikke flere end der er ialt
}
echo "Nu vises resultat $fra til $til.";
if ( $fra > 0 ) {
    echo "<a href='visside.php?s=". max(0,$fra-$pr_side) ."'>forrige side</a> ";
}
if ( $til < $total ) {
    echo "<a href='visside.php?s=". ($til+1) ."'>næste side</a> ";
}

mvh JakobA
Avatar billede schaefner Juniormester
27. juni 2003 - 15:41 #5
lidt bedre:
<?php
$offset = (isset($_GET['offset'])) ? $_GET['offset'] : 0; // Hvis ikke $offset er sat, sættes den til 0
$pr_side = 5;

$g_total = mysql_query("SELECT COUNT(*) AS total FROM uploads WHERE kate = '$kate' AND (emne LIKE '%$soeg%' OR besk LIKE '%$soeg%')") or die(mysql_error());
$antal = mysql_result($g_total,0);

if ($offset+$pr_side > $antal) {
    $til = $antal;
} else {
    $til = $offset+$pr_side;
}

echo "<table align=center border=0 width=400 cellspacing=0 cellpadding=0></td><td><div class=b2>Viser $offset - $til poster ud af $antal</div></td><td align=right>";
if ($offset >= $pr_side) {
    $forrige = $offset-$pr_side;
    echo "<a href='?s=$forrige&soeg=$soeg&kate=$kate'>Forrige </a>";
}
if ($antal > $offset+$pr_side) {
    $naeste = $offset+$pr_side;
    echo "<a href='?s=$naeste&soeg=$soeg&kate=$kate'>Næste</a>";
}
echo "</td></tr></table>";
mysql_close($conn);
?>
Avatar billede webcreator Nybegynder
27. juni 2003 - 15:45 #6
Jeg tester på livet løs :)
Avatar billede schaefner Juniormester
27. juni 2003 - 15:48 #7
mit sidste eksempel vil så se således ud:
http://schaefner.users.whitehat.dk/schaefner/forum/
Avatar billede webcreator Nybegynder
27. juni 2003 - 15:48 #8
Virker ikke. Næste-linket virker ikke.

Jeg tillader mig lige, at paste koden lidt mere sammenhængende med resten af mit dokument :


$offset = (isset($_GET['offset'])) ? $_GET['offset'] : 0; // Hvis ikke $offset er sat, sættes den til 0
$pr_side = 5;
   
    $conn = mysql_connect("localhost", "usr", "pass") or die(mysql_error());
    mysql_select_db("DB");
   
    $r = mysql_query("select * from uploads where kate = '$kate' and (emne like '%$soeg%' or besk like '%$soeg%') order by id DESC LIMIT $pr_side");
    $q = mysql_query("select * from uploads where kate = '$kate' and (emne like '%$soeg%' or besk like '%$soeg%')");
    $antal = mysql_num_rows($q);
   
   
    echo "<div class=b1>Din søgning på: <i>$soeg</i> gav <i>$antal</i> resultater.<br><br></div>";

    echo "<table width=400 align=center cellspacing=0 cellpadding=0><tr>";
    echo "<td width=110 bgcolor=\"#C0C0C0\"><div class=b2>Type</div></td>";
    echo "<td width=340 bgcolor=\"#C0C0C0\"><div class=b2>Emne</div></td>";
    echo "<td width=50 bgcolor=\"#C0C0C0\"><div class=b2>Karakter</div></td></tr>";
   
    while ($row = mysql_fetch_array($r)) {
   
    echo "<tr>";
    echo "<td><div class=b2>" . $row["opgt"] . "</div></td>";
    echo "<td><a href=\"hentpost.php?id=" . $row["id"] . "\">";
    echo $row["emne"] . "</a></td>";
    echo "<td><div class=b2>" . $row["kara"] . "</div></td></tr>";
    };
   
    echo "</table>";
   
    echo "<div class=b1>__________________________________________________</div>";
   
    echo "<table align=center width=400 cellspacing=0 cellpadding=0><tr><td align=right>";
   
    $g_total = mysql_query("SELECT COUNT(*) AS total FROM uploads WHERE kate = '$kate' AND (emne LIKE '%$soeg%' OR besk LIKE '%$soeg%')") or die(mysql_error());
    $antal = mysql_result($g_total,0);
   
    if ($offset+$pr_side > $antal) {
        $til = $antal;
    } else {
        $til = $offset+$pr_side;
    }
   
    echo "<table align=center border=0 width=400 cellspacing=0 cellpadding=0></td><td><div class=b2>Viser $offset - $til poster ud af $antal</div></td><td align=right>";
    if ($offset >= $pr_side) {
        $forrige = $offset-$pr_side;
        echo "<a href='?s=$forrige&soeg=$soeg&kate=$kate'>Forrige </a>";
    }
    if ($antal > $offset+$pr_side) {
        $naeste = $offset+$pr_side;
        echo "<a href='?s=$naeste&soeg=$soeg&kate=$kate'>Næste</a>";
    }
    echo "</td></tr></table>";
    mysql_close($conn);
Avatar billede webcreator Nybegynder
27. juni 2003 - 15:49 #9
Fejl i denne her :
    $r = mysql_query("select * from uploads where kate = '$kate' and (emne like '%$soeg%' or besk like '%$soeg%') order by id DESC LIMIT $pr_side");

?

Og en anden ting - den må meget gerne skrive : viser 1 - 5 poster ...
Ikke 0 - 5 som den gør nu.
Avatar billede kwanstudios Nybegynder
27. juni 2003 - 15:49 #10
schaefner => har du sourcen til det forum liggende? :)
Avatar billede jakoba Nybegynder
27. juni 2003 - 15:50 #11
webcreator >> Hvad med at tænke? istedet for at teste.

test er til EFTER du har tænkt. om du tænkte korrekt.

I det lange løb giver det langt bedre resultater.
Avatar billede webcreator Nybegynder
27. juni 2003 - 15:51 #12
Jakoba >
Jeg tænker og tester - alt hvad jeg kan. Jeg har siddet med det træls'e stuff i 1½ time nu. Den vil bare ikke skrive antallet af poster korrekt :o/

Kwanstudios > Orden det via mail.
Avatar billede schaefner Juniormester
27. juni 2003 - 15:51 #13
kwanstudios >> Ikke lige præcis til den udgave, men den kommer senere. Du kan hente den nyeste her: http://script.dk/sourcecode.jsp?resourceId=807
Avatar billede kwanstudios Nybegynder
27. juni 2003 - 15:52 #14
..tror hvad jakoba mener er teori før praksis :)
Avatar billede schaefner Juniormester
27. juni 2003 - 15:53 #15
<?php
$offset = (isset($_GET['offset'])) ? $_GET['offset'] : 0; // Hvis ikke $offset er sat, sættes den til 0
$pr_side = 5;

$conn = mysql_connect("localhost", "usr", "pass") or die(mysql_error());
mysql_select_db("DB");

$r = mysql_query("select * from uploads where kate = '$kate' and (emne like '%$soeg%' or besk like '%$soeg%') order by id DESC LIMIT $offset,$pr_side");
echo "<div class=b1>Din søgning på: <i>$soeg</i> gav <i>$antal</i> resultater.<br><br></div>";
echo "<table width=400 align=center cellspacing=0 cellpadding=0><tr>";
echo "<td width=110 bgcolor=\"#C0C0C0\"><div class=b2>Type</div></td>";
echo "<td width=340 bgcolor=\"#C0C0C0\"><div class=b2>Emne</div></td>";
echo "<td width=50 bgcolor=\"#C0C0C0\"><div class=b2>Karakter</div></td></tr>";

while ($row = mysql_fetch_array($r)) {
    echo "<tr>";
    echo "<td><div class=b2>" . $row["opgt"] . "</div></td>";
    echo "<td><a href=\"hentpost.php?id=" . $row["id"] . "\">";
    echo $row["emne"] . "</a></td>";
    echo "<td><div class=b2>" . $row["kara"] . "</div></td></tr>";
}

echo "</table>";
echo "<div class=b1>__________________________________________________</div>";
echo "<table align=center width=400 cellspacing=0 cellpadding=0><tr><td align=right>";

$g_total = mysql_query("SELECT COUNT(*) AS total FROM uploads WHERE kate = '$kate' AND (emne LIKE '%$soeg%' OR besk LIKE '%$soeg%')") or die(mysql_error());
$antal = mysql_result($g_total,0);

if ($offset+$pr_side > $antal) {
    $til = $antal;
} else {
    $til = $offset+$pr_side;
}
echo "<table align=center border=0 width=400 cellspacing=0 cellpadding=0></td><td><div class=b2>Viser $offset - $til poster ud af $antal</div></td><td align=right>";
if ($offset >= $pr_side) {
    $forrige = $offset-$pr_side;
    echo "<a href='?s=$forrige&soeg=$soeg&kate=$kate'>Forrige </a>";
}
if ($antal > $offset+$pr_side) {
    $naeste = $offset+$pr_side;
    echo "<a href='?s=$naeste&soeg=$soeg&kate=$kate'>Næste</a>";
}
echo "</td></tr></table>";
mysql_close($conn);
?>
Avatar billede kwanstudios Nybegynder
27. juni 2003 - 15:54 #16
scaefner.. ville gerne hente den hos script.dk men den giver mig en 404.. ville sætte pris på hvis du gad sende den du har fremvist her til jacob@crashhouse.dk :)
Avatar billede schaefner Juniormester
27. juni 2003 - 15:55 #17
kwanstudios >> det skal jeg gøre.
Avatar billede schaefner Juniormester
27. juni 2003 - 15:56 #18
if ($offset+$pr_side > $antal) {
    $til = $antal;
} else {
    $til = $offset+$pr_side;
}
if ($offset == 0) $offset = 1;

hvis du ønsker der skal stå 1 i stedet for 0
Avatar billede webcreator Nybegynder
27. juni 2003 - 15:56 #19
schaefner > Mange tak. Men næste virker stadig ikke. Roder lige lidt med det.
Avatar billede schaefner Juniormester
27. juni 2003 - 15:57 #20
har fundet fejlen. 2 sek.
Avatar billede webcreator Nybegynder
27. juni 2003 - 15:57 #21
Ah, dejligt :)
Avatar billede schaefner Juniormester
27. juni 2003 - 15:59 #22
Prøv:

<?php
$offset = (isset($_GET['offset'])) ? $_GET['offset'] : 0; // Hvis ikke $offset er sat, sættes den til 0
$pr_side = 5;

$conn = mysql_connect("localhost", "usr", "pass") or die(mysql_error());
mysql_select_db("DB");

$r = mysql_query("select * from uploads where kate = '$kate' and (emne like '%$soeg%' or besk like '%$soeg%') order by id DESC LIMIT $offset,$pr_side");
echo "<div class=b1>Din søgning på: <i>$soeg</i> gav <i>$antal</i> resultater.<br><br></div>";
echo "<table width=400 align=center cellspacing=0 cellpadding=0><tr>";
echo "<td width=110 bgcolor=\"#C0C0C0\"><div class=b2>Type</div></td>";
echo "<td width=340 bgcolor=\"#C0C0C0\"><div class=b2>Emne</div></td>";
echo "<td width=50 bgcolor=\"#C0C0C0\"><div class=b2>Karakter</div></td></tr>";

while ($row = mysql_fetch_array($r)) {
    echo "<tr>";
    echo "<td><div class=b2>" . $row["opgt"] . "</div></td>";
    echo "<td><a href=\"hentpost.php?id=" . $row["id"] . "\">";
    echo $row["emne"] . "</a></td>";
    echo "<td><div class=b2>" . $row["kara"] . "</div></td></tr>";
}

echo "</table>";
echo "<div class=b1>__________________________________________________</div>";
echo "<table align=center width=400 cellspacing=0 cellpadding=0><tr><td align=right>";

$g_total = mysql_query("SELECT COUNT(*) AS total FROM uploads WHERE kate = '$kate' AND (emne LIKE '%$soeg%' OR besk LIKE '%$soeg%')") or die(mysql_error());
$antal = mysql_result($g_total,0);

$til = ($offset+$pr_side > $antal) ? $antal : $offset+$pr_side;
$start = ($_GET['offset'] == 0) ? 1 : $offset;

echo "<table align=center border=0 width=400 cellspacing=0 cellpadding=0></td><td><div class=b2>Viser $start - $til poster ud af $antal</div></td><td align=right>";
if ($offset >= $pr_side) {
    $forrige = $offset-$pr_side;
    echo "<a href='?offset=$forrige&soeg=$soeg&kate=$kate'>Forrige </a>";
}
if ($antal > $offset+$pr_side) {
    $naeste = $offset+$pr_side;
    echo "<a href='?offset=$naeste&soeg=$soeg&kate=$kate'>Næste</a>";
}
echo "</td></tr></table>";
mysql_close($conn);
?>
Avatar billede webcreator Nybegynder
27. juni 2003 - 16:07 #23
2 mindre fejl :

Den skriver ikke antallet af poster i søgningen længere. Dette løste jeg ved at sætte min query, der laver en Count, en smule længere op i dokumentet.

Den skriver nu 1-6 poster, selv om den kun viser 5 poster pr. side.
Dette løste jeg sådan :

if ($offset+$pr_side > $antal) {
    $til = $antal;
} else {
    $til = $offset+$pr_side;
}
if ($offset == 0) {
    $offset == 1;
    $til == $antal-1;
    }

Er sidste løsning "holdbar" ?

Gider du smide et svar ? :-)
Avatar billede webcreator Nybegynder
27. juni 2003 - 16:08 #24
Nej, den var ikke holdbar :(
På næste side, står der så post 5-10 - og der burde stå 6-10. Roder lige lidt igen :)
Avatar billede schaefner Juniormester
27. juni 2003 - 16:12 #25
burde virke:

<?php
$offset = (isset($_GET['offset'])) ? $_GET['offset'] : 0; // Hvis ikke $offset er sat, sættes den til 0
$pr_side = 5;

$conn = mysql_connect("localhost", "usr", "pass") or die(mysql_error());
mysql_select_db("DB");

$r = mysql_query("select * from uploads where kate = '$kate' and (emne like '%$soeg%' or besk like '%$soeg%') order by id DESC LIMIT $offset,$pr_side");
echo "<div class=b1>Din søgning på: <i>$soeg</i> gav <i>$antal</i> resultater.<br><br></div>";
echo "<table width=400 align=center cellspacing=0 cellpadding=0><tr>";
echo "<td width=110 bgcolor=\"#C0C0C0\"><div class=b2>Type</div></td>";
echo "<td width=340 bgcolor=\"#C0C0C0\"><div class=b2>Emne</div></td>";
echo "<td width=50 bgcolor=\"#C0C0C0\"><div class=b2>Karakter</div></td></tr>";

while ($row = mysql_fetch_array($r)) {
    echo "<tr>";
    echo "<td><div class=b2>$row[opgt]</div></td>";
    echo "<td><a href=\"hentpost.php?id=$row[id]\">";
    echo "$row[emne]</a></td>";
    echo "<td><div class=b2>$row[kara]</div></td></tr>";
}
echo "</table>";
echo "<div class=b1>__________________________________________________</div>";
echo "<table align=center width=400 cellspacing=0 cellpadding=0><tr><td align=right>";

$g_total = mysql_query("SELECT COUNT(*) AS total FROM uploads WHERE kate = '$kate' AND (emne LIKE '%$soeg%' OR besk LIKE '%$soeg%')") or die(mysql_error());
$antal = mysql_result($g_total,0);

$til = ($offset+$pr_side > $antal) ? $antal : $offset+$pr_side;
$start = $offset+1;

echo "<table align=center border=0 width=400 cellspacing=0 cellpadding=0></td><td><div class=b2>Viser $start - $til poster ud af $antal</div></td><td align=right>";
if ($offset >= $pr_side) {
    $forrige = $offset-$pr_side;
    echo "<a href='?offset=$forrige&soeg=$soeg&kate=$kate'>Forrige </a>";
}
if ($antal > $offset+$pr_side) {
    $naeste = $offset+$pr_side;
    echo "<a href='?offset=$naeste&soeg=$soeg&kate=$kate'>Næste</a>";
}
echo "</td></tr></table>";
mysql_close($conn);
?>
Avatar billede schaefner Juniormester
27. juni 2003 - 16:13 #26
kwanstudios >> Er sendt.
Avatar billede webcreator Nybegynder
27. juni 2003 - 16:15 #27
Jamen det er jo helt perfekt. Mange tak for hjælpen. Er glad for det endelig virker :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester