Avatar billede blach Nybegynder
17. juli 2004 - 12:15 Der er 52 kommentarer og
1 løsning

Søgning der deles op i 10 ad gangen

Jeg har en søgning i en mySQL database som jeg godt kunne tænke mig blev delt op i sider visende 10 ad gangen. (altså hvis den finder mere end 10)

Min mySQL udtræk ser således ud:
$query = mysql_query("SELECT * FROM filer WHERE kat='$kat' AND (titel LIKE '%$search%') ORDER BY titel") or die(mysql_error());
while ($row = mysql_fetch_array($query)) {
...
}
Avatar billede 3xm Nybegynder
17. juli 2004 - 12:24 #1
brug LIMIT

=)
Avatar billede 3xm Nybegynder
17. juli 2004 - 12:32 #2
fx.

SELECT * FROM filer WHERE kat='$kat' AND (titel LIKE '%$search%') ORDER BY titel LIMIT 0,10

den tager de 10 første.

(...) LIMIT 10,10

tager de 10 næste.

så LIMIT x,10 hvor du sætter x efter hvad side i søgningen man er på.

=)
Avatar billede razmuz_dk Nybegynder
17. juli 2004 - 12:41 #3
^ Jep :-) - vil lige tilføje noget:

Du kan så fx skrive

<a href=\"search.php?kat=$kat&search=$search&page=".($_GET[page]+1)."\">Næste side</a>
<a href=\"search.php?kat=$kat&search=$search&page=".($_GET[page]-1)."\">Forrige side</a>

og så i din sql skrive sådan i din query:

mysql_query("SELECT * FROM filer WHERE kat='$kat' AND (titel LIKE '%$search%') ORDER BY titel LIMIT ".($_GET[page]*10).",10");

Læg mærke til hvordan page-variablen bruges til at vise "de 10 næste"

Håber det var en hjælp
Avatar billede 3xm Nybegynder
17. juli 2004 - 12:44 #4
- og så bør du selvfølgelig kun vise næste/forrige-linkene hvis der ER færre/flere (check hvor mange rækker der er før du laver de links).

=)
Avatar billede blach Nybegynder
17. juli 2004 - 13:03 #5
ok ok.. kender godt limit :]

Kan I ikke vise hvad jeg kan gøre på sådan en simpel en her?
$foresp = mysql_query("SELECT * FROM annonce_udlejer ORDER BY dato LIMIT 0,10") or die(mysql_error());
while($data = mysql_fetch_array($foresp)){

}


Kan godt forstå at der skal være en frem og tilbage knap hvor dataene fra den gemmes i X,10. Men hvordan?
Razmuz, jeg kan ikk få dit til at virke...
Min URL er index.php?side=soeg når jeg søger...
Avatar billede razmuz_dk Nybegynder
17. juli 2004 - 13:05 #6
<?
$foresp = mysql_query("SELECT * FROM annonce_udlejer ORDER BY dato LIMIT ".($_GET[page]*10).",10") or die(mysql_error());
while($data = mysql_fetch_array($foresp)){
// vis din data
}

print "<a href=\"index.php?side=soeg&kat=$kat&search=$search&page=".($_GET[page]+1)."\">Næste side</a> |

<a href=\"index.php?side=soeg&kat=$kat&search=$search&page=".($_GET[page]-1)."\">Forrige side</a>

Således? :)
Avatar billede razmuz_dk Nybegynder
17. juli 2004 - 13:24 #7
ups: husk lige at lukke print'en efter det sidste </a> ved at skrive ";
Avatar billede blach Nybegynder
17. juli 2004 - 16:32 #8
razmuz.dk --> den finder fint nok de 10 første, men når jeg klikker næste så viser den bare ingenting.. har forkortet det ned til:
"index.php?side=soeg&page=1" hvis jeg klikker på næste...

Det er fordi den registrerer om jeg klikker på submit knappen..
altså database forespørgslen er indkrandset af
if ($_POST['submit']) {

}

Hvad kan jeg så gøre?
Avatar billede blach Nybegynder
17. juli 2004 - 16:35 #9
Jeg kan selvfølgelig skrive
if ($_POST['submit'] || $HTTP_GET_VARS['page']) {

}

Men hvordan får jeg den så til at registrere hvor mange der er i alt? så den ikke altid viser næste/forrige
Avatar billede blach Nybegynder
17. juli 2004 - 16:51 #10
en anden fejl:
når jeg klikker næste og bagefter forrige side sår skriver den page=0
Avatar billede blach Nybegynder
17. juli 2004 - 17:17 #11
OK; jeg har en kode nu!

Men kan I ikke fortælle mig hvorfor den ikke viser noget når jeg først har klikket frem og derefter tilbage?

if ($_POST['submit'] || $HTTP_GET_VARS['s']) {
open();

$pr_side = 10; // Antal poster pr. side
if (isset($_GET['s'])) {
    $s = $_GET['s'];
} else {
    $s = 0;
}

$query = mysql_query("SELECT * FROM annonce_udlejer ORDER BY dato LIMIT $s,$pr_side") or die(mysql_error());
while($row = mysql_fetch_array($query)){
    echo "<B>$row[nr]</B><BR>";
}

echo '<BR><HR>';

$g_total = mysql_query("SELECT COUNT(nr) AS TOTAL FROM annonce_udlejer") or die(mysql_error());
$total = mysql_result($g_total,0);
echo '<BR><CENTER>';

if ($s >= $pr_side) {
    $previous_s = $s-$pr_side;
    echo "<a href='index.php?side=soeg_bolig&s=$previous_s'>tilbage</a> ";
}
if ($total > $s+$pr_side) {
    $next_s = $s+$pr_side;
    echo "<a href='index.php?side=soeg_bolig&s=$next_s'>næste</a>";
}

$antal_sider = ceil($total/$pr_side);
echo "<BR>Du er ser nu side ".(1+$s/$pr_side)." ud af ".$antal_sider ."<BR>";
$temp = 0;
$pages = "Vælg side: ";
while ($temp < $antal_sider)
{
  $temp2 = $temp+1;
  $next_s = $temp * $pr_side;
  if ($s==$next_s) {
    $pages .= $temp2." ";
  } else {
  $pages .= "<a href='index.php?side=soeg_bolig&s=$next_s'>$temp2</a> ";
  }
  $temp++;
}
echo $pages;

echo '<BR></CENTER>';

close();

}
?>
Avatar billede razmuz_dk Nybegynder
17. juli 2004 - 17:18 #12
Hm, nu har jeg lavet en fil der kan køre din søgning selvstændigt. Prøv om du kan finde ud af det ved at kigge på dette eksempel... ellers så skriv igen :)

<?
if(!$_GET[page]) $_GET[page]=0;

// etabler forbindelse til din mysql-db
?>
<form>
<input name="searchword">
<input type="submit">
</form><br>
<?
if($_GET[searchword]) {

$foresp = mysql_query("SELECT * FROM annonce_udlejer ORDER BY dato LIMIT ".($_GET[page]*10).",10") or die(mysql_error());
while($data = mysql_fetch_array($foresp)) {
// vis din data her
}

if(mysql_num_rows($foresp)>(10*($_GET[page]+1))) print "<a href=\"index.php?searchword=$_GET[searchword]&page=".($_GET[page]+1)."\">Næste side</a>";
if($_GET[page]!=0) print "<a href=\"index.php?searchword=$_GET[searchword]&page=".($_GET[page]-1)."\">Forrige side</a>";

}
?>
Avatar billede blach Nybegynder
17. juli 2004 - 17:26 #13
Hmm, du kan ikke rette det eksempel til som jeg skrev 17:17:08
Det har nemlig alle de funktioner som jeg eftersøger.. men har problemer når jeg klikker tilbage - den "glemmer" nærmest udtrækket fra databasen.
Avatar billede 3xm Nybegynder
17. juli 2004 - 18:48 #14
den virker ikke fordi variablen har værdien nul, hvilket svarer til false. i stedet for at sige if($var) skal du bruge if(isset($var)). så burde det virke.

=)
Avatar billede blach Nybegynder
17. juli 2004 - 18:53 #15
3xm --> skal jeg så skrive:
if(isset($_POST['submit'] || $HTTP_GET_VARS['s'])) {

??? Det er koden fra 17:17:08 vi taler om, ik?
Avatar billede blach Nybegynder
17. juli 2004 - 18:55 #16
if(isset($_POST['submit']) || isset($HTTP_GET_VARS['s'])) {
Avatar billede blach Nybegynder
17. juli 2004 - 19:00 #17
Måske du kan fortælle mig også hvordan jeg tildeler hvert udtræk et nummer startende fra 1?
1.
2.
3.

Lige nu bruger jeg
$antal++;
echo "$antal";

Men den genstarter jo tallene når jeg klikker "næste"...
Avatar billede 3xm Nybegynder
17. juli 2004 - 19:09 #18
if($_POST['submit'] || isset($_GET['s'])) {
  $antal = (10*$_GET['s']); // starter så ved 10 på side 2, 20 på side 3, osv.
  (...)
  $antal++;
  echo "$antal";
  (...)
}


håber du kan se meningen med det.

=)
Avatar billede blach Nybegynder
17. juli 2004 - 19:25 #19
ja.. men den skriver 101 på nr. 2 side... hvor den burde skrive 11
Avatar billede 3xm Nybegynder
17. juli 2004 - 19:28 #20
du skal gange FØR du kører mysql.

så hvis $s er 2 ganger den med 10, det giver 21, så køre mysql hvor den første så med ++ bliver 21, den næste 22, osv.

..giver det mening?

=)
Avatar billede blach Nybegynder
17. juli 2004 - 19:29 #21
$antal = (10*$_GET['s']);

  $query = mysql_query("SELECT * FROM annonce_udlejer ORDER BY dato LIMIT $s,$pr_side") or die(mysql_error());
  while($row = mysql_fetch_array($query)){

$antal++;

    echo "<B>$antal</B>";
}

Det giver også 101 på side 2... hvor den burde skrive 11
Avatar billede 3xm Nybegynder
17. juli 2004 - 19:32 #22
hmm... og $_GET['s'] er 1? det giver jo ingen mening... (10 * 1)++ burde ikke give 101.

bliver den næste så 102 eller 1002 eller noget helt tredje?

=)
Avatar billede blach Nybegynder
17. juli 2004 - 19:33 #23
s=10 når man klikker videre. (næste)
Avatar billede 3xm Nybegynder
17. juli 2004 - 19:36 #24
ahh! derfor. min fejl.

så bare sæt $antal = $_GET["s"]; i stedet for at gange. så burde det virke.

=)
Avatar billede blach Nybegynder
17. juli 2004 - 19:37 #25
så vi nøjes med at gange med 1 :]
Avatar billede blach Nybegynder
17. juli 2004 - 19:38 #26
Hehe ja...
Jeg har lige et spørgsmål mere, så skal du nok få pointene... :)
Avatar billede 3xm Nybegynder
17. juli 2004 - 19:38 #27
ja. eller slet ikke at gange. hehe.

virker det så?

=)
Avatar billede 3xm Nybegynder
17. juli 2004 - 19:38 #28
bare kom med det...

=)
Avatar billede blach Nybegynder
17. juli 2004 - 19:40 #29
Min søgning består af 3 dropdown boxe, og jeg kan godt lave et "WHERE tabel = '$dropdown_box' i databasen.. men i de dropdown boxe kan man også vælge "alle" - altså hvor den skal søge på alt. Hvad gør jeg der?
Er jeg så nød til at dele det op i if-sætninger eller kan jeg lave noget smart i WHERE-sætningen?
Avatar billede 3xm Nybegynder
17. juli 2004 - 19:46 #30
ved ikke om der findes noget smartere. jeg ville gøre sådan her:

if ($dd_box == "alle")
  $where = "tabel = 'MULIGHED1' OR tabel = 'MULIGHED3' OR tabel = 'MULIGHED3'";
else
  $where = "tabel = '$dd_box'";

$query = mysql_query("SELECT * FROM filer WHERE $where (osv.)");
Avatar billede 3xm Nybegynder
17. juli 2004 - 19:46 #31
- hvis det er korrekt forstået..?

=)
Avatar billede blach Nybegynder
17. juli 2004 - 19:55 #32
Hmm.. ikke helt .. for den skal ikke tage efter nogle forskellige muligheder hvis man vælger alle. Så skal den bare vælge alle dem der er!
Avatar billede blach Nybegynder
17. juli 2004 - 19:57 #33
Så hvis man klikker "alle" i de 3 dropdown boxe, så bliver det hele databasen som vælges...
Avatar billede 3xm Nybegynder
17. juli 2004 - 19:58 #34
jeg er ikke helt med. hvad refererer dropdown-boxen til? hvilken tabel der skal søges på eller hvad der skal søges efter i en bestemt tabel?

har du evt. et sted hvor man kan se det i funktion? det gør det hele lidt lettere.

=)
Avatar billede blach Nybegynder
17. juli 2004 - 19:59 #35
jov.. altså man søger på noget bestemt i 3 kategorier (celler) i databasen. F.eks. en by. så vælger man en by eller klikker at man vil søge på alle byer.
Avatar billede blach Nybegynder
17. juli 2004 - 20:01 #36
så skulle man gøre det således:

if ($dd_box == "alle") {
  $where = "";
else
  $where = "tabel = '$dd_box'";
}

eller det kan man vel ikke? den skal ikke søge efter noget hvis man tager alle - bare være uden "WHERE"
Avatar billede 3xm Nybegynder
17. juli 2004 - 20:03 #37
ahh! så er jeg med.


if ($dd_box == "alle")
  $where = "(by1 LIKE '%$search%') OR (by2 LIKE '%$search%') OR (by3 LIKE '%$search%')";
else
  $where = "($dd_box LIKE '%$search%')";

$query = mysql_query("SELECT * FROM filer WHERE $where (osv.)");


- er det korrekt forstået?

=)
Avatar billede 3xm Nybegynder
17. juli 2004 - 20:04 #38
ellers er dú nødt til at vise mig tabel-strukturen for at kunne forstå det...

=)
Avatar billede blach Nybegynder
17. juli 2004 - 20:07 #39
Hmm, kan jeg ikke smide en mail med adressen?
Avatar billede 3xm Nybegynder
17. juli 2004 - 20:12 #40
jo... 3xm - snabela - detfalskested.dk

=)
Avatar billede blach Nybegynder
17. juli 2004 - 20:19 #41
har sendt et link...
Avatar billede 3xm Nybegynder
17. juli 2004 - 20:22 #42
okay, bare for at få det helt på det rene:

ligger al data i den samme eller flere forskellige tabeller?

=)
Avatar billede blach Nybegynder
17. juli 2004 - 20:24 #43
De ligger i forskellige celler i SAMME tabel.
Avatar billede 3xm Nybegynder
17. juli 2004 - 20:25 #44
okay... godt så. kan du også sende mig din databasestruktur eller vise den herinde?

=)
Avatar billede blach Nybegynder
17. juli 2004 - 20:29 #45
Jamen cellerne hedder bare det som man kan søge efter...
Jeg kan bare ikke komme på en smart måde at dele det op, så man definerer en søgning (altså skriver WHERE = man vælger noget i dropdown menuen) eller man søger efter alt (vælger alle = man behøves ikke at definere WHERE)
Avatar billede 3xm Nybegynder
17. juli 2004 - 20:31 #46
jeg har stadigt svært ved at forstå strukturen uden at se den...

=)
Avatar billede blach Nybegynder
17. juli 2004 - 20:45 #47
ok, jeg sender...
Avatar billede blach Nybegynder
17. juli 2004 - 20:53 #48
jeg smutter for iaften.. online imorgen!
Avatar billede 3xm Nybegynder
17. juli 2004 - 20:53 #49
tak for det. vender tilbage senere. skal lige spise.

=)
Avatar billede blach Nybegynder
19. juli 2004 - 12:40 #50
OK, har du et forslag til hvad jeg kan gøre?
Avatar billede blach Nybegynder
19. juli 2004 - 19:18 #51
Jeg har gjort det med if-sætninger.. så tak for hjælpen anyways, 3xm og andre.

3xm, pointene er vist dine? Lig et svar...
Avatar billede 3xm Nybegynder
19. juli 2004 - 20:00 #52
hov, undskyld. den her var smuttet i en sletning af e-mails. kan du leve med if'er?

=)
Avatar billede blach Nybegynder
19. juli 2004 - 21:05 #53
yes det går fint :]
Så må du lære mig noget smartere en anden gang...
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