Avatar billede pelann Nybegynder
29. september 2000 - 13:48 Der er 28 kommentarer og
1 løsning

Søgeresultat

Jeg prøver at lave en lille søgemaskine hvor jeg kan søge på navn og tlf.nr. osv. Men jeg ville gerne begrænse søgeresultaterne lidt, så jeg kun får 10 resultater pr. side. Hvad er koden for det, og hvor i koden skal jeg sætte den ind?
Avatar billede jd Nybegynder
29. september 2000 - 13:54 #1
Det gøres ikke i din sql! -det gøres i det programmeringssprog du laver det i udover mysql! (fx. php)
Altså, du tæller op hvor mange resultater der findes med mysql_num_rows() og fordeler det derefter...

/Jon@z
Avatar billede haldesign Nybegynder
29. september 2000 - 14:05 #2
Det gøres OGSÅ i din sql!

if (!$fra) {
  $fra = 0;
}
$result = mysql_query(\"SELECT * FROM tabel\");
$antal = mysql_num_rows($result);
mysql_query(\"SELECT * FROM tabel LIMIT $fra,10\");
$number = mysql_num_rows($result);
if ($number > 0) {
  $til = $fra + 10;
  $fra1 = $fra + 1;
  if ($til > $antal) {
    $til = $antal;
  }
  print \"<p align=center><font face=Tahoma size=1>Fra \".$fra1.\" til \".$til.\" af \".$antal.\" fundne.</font></p>\";
  // Vis resultater
}
if ($antal > 0) {
  $naeste = $fra + 10;
  $naestetal = $fra + 20;
  if ($naestetal > $antal) {
    $naestetal = $antal - $naeste;
  } else {
    $naestetal = $naestetal - $naeste;
  }
  if ($antal > $naeste) {
    $beskednaeste = \"<font face=Tahoma size=1><a href=forslag1-sogning.php3?soegeord=\".$soegeord.\"&fra=\".$naeste.\">Næste \".$naestetal.\"</a></font>\";
  }
  $forrige = $fra - 10;
  if ($forrige >= 0) {
    $beskedforrige = \"<font face=Tahoma size=1><a href=forslag1-sogning.php3?soegeord=\".$soegeord.\"&fra=\".$forrige.\">Forrige 10</a></font> &nbsp;\";
  }
  $skel = \"\";
  if ($beskedforrige != \"\" && $beskednaeste != \"\") {
    $skel = \"<font face=Tahoma size=1>|</font> &nbsp;\";
  }
  $tal = \"\";
  $x = 1;
  $antal = ceil($antal / 10);
  while ($x <= $antal) {
    $y = ($x * 10) - 10;
    if ($y == $fra) {
      $tal = $tal.$x.\"&nbsp;\";
    } else {
      $tal = $tal.\"<a href=forslag1-sogning.php3?soegeord=\".$soegeord.\"&fra=\".$y.\">\".$x.\"</a>&nbsp;\";
    }
    $x = $x + 1;
  }
  print \"<p align=center><font face=Tahoma size=1>Side: \".$tal.\" &nbsp; &nbsp;</font>\".$beskedforrige.$skel.$beskednaeste.\"</p>\";
}


Dette er nok ikke den nemmeste måde, men det virker fint!!

- Anders
Avatar billede haldesign Nybegynder
29. september 2000 - 14:08 #3
...
$result = mysql_query(\"SELECT * FROM tabel\");
$antal = mysql_num_rows($result);
mysql_query(\"SELECT * FROM tabel LIMIT $fra,10\");
$number = mysql_num_rows($result);

SKAL RETTES TIL:

$result = mysql_query(\"SELECT * FROM tabel\");
$antal = mysql_num_rows($result);
$result = mysql_query(\"SELECT * FROM tabel LIMIT $fra,10\");
$number = mysql_num_rows($result);

Du skal selvfølgelig også rette \"forslag1-sogning.php3 til filnavnet samt \"soegeord\" til det din hedder.

- Anders
Avatar billede jd Nybegynder
29. september 2000 - 14:36 #4
ja, okay.... men det kan ikke laves KUN i sql! :o)

Nu må vi da håbe at han har lavet det i php... :)

/Jon@z
Avatar billede pelann Nybegynder
29. september 2000 - 14:48 #5
Jeg har lavet det i php. Jeg har lige prøvet med ovenstående kode, men jeg gør åbenbart noget galt. Jeg får nu 18 resultater på hver side, og den tager hele indholdet af min tabel med. Har i nogen idé om hvor jeg mangler at rette den?
Avatar billede haldesign Nybegynder
29. september 2000 - 15:32 #6
Har du rettet:
\"mysql_query(\"SELECT * FROM tabel LIMIT $fra,10\");\"
TIL
\"$result = mysql_query(\"SELECT * FROM tabel LIMIT $fra,10\");\"
???

- Anders
Avatar billede haldesign Nybegynder
29. september 2000 - 15:33 #7
kan du ikke smide hele din kode op her... så vil jeg slavisk gå den igennem...

- Anders
Avatar billede pelann Nybegynder
29. september 2000 - 15:54 #8
Den ser sådan ud:

mysql_connect (\"mysql.localhost\", \"db\", \"pw\");
 
mysql_select_db (\"db\");

if (!$fra) {
  $fra = 0;
}

$result = mysql_query(\"SELECT * FROM oplysning1\");
$antal = mysql_num_rows($result);
$result = mysql_query(\"SELECT * FROM oplysning1 LIMIT $fra,10\");
$number = mysql_num_rows($result);
if ($number > 0) {
  $til = $fra + 10;
  $fra1 = $fra + 1;
  if ($til > $antal) {
    $til = $antal;
  }
  print \"<p align=center><font face=Tahoma size=1>Fra \".$fra1.\" til \".$til.\" af \".$antal.\" fundne.</font></p>\";
  // Vis resultater
}
if ($antal > 0) {
  $naeste = $fra + 10;
  $naestetal = $fra + 20;
  if ($naestetal > $antal) {
    $naestetal = $antal - $naeste;
  } else {
    $naestetal = $naestetal - $naeste;
  }
  if ($antal > $naeste) {
    $beskednaeste = \"<font face=Tahoma size=1><a href=searchform.php?soegeord=\".$fornavn.\"; \".$efterfornavn.\"; \".$vejnavn.\"; \".$postnummer.\"; \".$bynavn.\"; \".$mobilnummer.\"; \".$fastnetnummer.\"; \".$email.\"; &fra=\".$naeste.\">Næste \".$naestetal.\"</a></font>\";
  }
  $forrige = $fra - 10;
  if ($forrige >= 0) {
    $beskedforrige = \"<font face=Tahoma size=1><a href=searchform.php?soegeord=\".$fornavn.\"; \".$efterfornavn.\"; \".$vejnavn.\"; \".$postnummer.\"; \".$bynavn.\"; \".$mobilnummer.\"; \".$fastnetnummer.\"; \".$email.\"; &fra=\".$forrige.\">Forrige 10</a></font> &nbsp;\";
  }
  $skel = \"\";
  if ($beskedforrige != \"\" && $beskednaeste != \"\") {
    $skel = \"<font face=Tahoma size=1>|</font> &nbsp;\";
  }
  $tal = \"\";
  $x = 1;
  $antal = ceil($antal / 10);
  while ($x <= $antal) {
    $y = ($x * 10) - 10;
    if ($y == $fra) {
      $tal = $tal.$x.\"&nbsp;\";
    } else {
      $tal = $tal.\"<a href=searchform.php?soegeord=\".$fornavn.\"; \".$efterfornavn.\"; \".$vejnavn.\"; \".$postnummer.\"; \".$bynavn.\"; \".$mobilnummer.\"; \".$fastnetnummer.\"; \".$email.\"; &fra=\".$y.\">\".$x.\"</a>&nbsp;\";
    }
    $x = $x + 1;
  }
  print \"<p align=center><font face=Tahoma size=1>Side: \".$tal.\" &nbsp; &nbsp;</font>\".$beskedforrige.$skel.$beskednaeste.\"</p>\";
}


$q=\'SELECT * FROM oplysning1 WHERE 1\'; 

if ($fornavn)
{$q.=\" AND fornavn LIKE \'$fornavn%\'\";}

if ($efternavn)
{$q.=\" AND efternavn LIKE \'$efternavn%\'\";}

if ($vejnavn)
{$q.=\" AND vejnavn LIKE \'$vejnavn%\'\";}

if ($postnummer)
{$q.=\" AND postnummer LIKE \'$postnummer%\'\";}

if ($bynavn)
{$q.=\" AND bynavn LIKE \'$bynavn%\'\";}

if ($mobilnummer)
{$q.=\" AND mobilnummer LIKE \'$mobilnummer%\'\";}

if ($fastnetnummer)
{$q.=\" AND fastnetnummer LIKE \'$fastnetnummer%\'\";}

if ($email)
{$q.=\" AND email LIKE \'$email%\'\";}

$result = mysql_query ($q);

if ($row = mysql_fetch_array($result)) {

do {
  print (\"<h2>\");
  print $row[\"fornavn\"];
  print (\" \");
  print $row[\"efternavn\"];
  print (\"</h2>\");
  print $row[\"vejnavn\"];
  print (\"<P>\");
  print $row[\"postnummer\"];
  print (\" \");
  print $row[\"bynavn\"];
  print (\"<p>\");
  print $row[\"mobilnummer\"];
  print (\"  /  \");
  print $row[\"fastnetnummer\"];
  print (\"<P>\");
  print $row[\"email\"];
  print (\"<P>\");
} while($row = mysql_fetch_array($result));

} else {print \"Desværre, søgningen gav intet resultat\";}

Jeg ved ikke om jeg har sat din kode ind et forkert sted, jeg er helt grøn i det her.

pelann

?>
Avatar billede haldesign Nybegynder
29. september 2000 - 16:03 #9
Det har du... :o)

Jeg kigger lige på det... 2 sek

- Anders
Avatar billede haldesign Nybegynder
29. september 2000 - 16:16 #10
Prøv lige det her:


<?php
mysql_connect (\"mysql.localhost\", \"db\", \"pw\");
mysql_select_db (\"db\");

if (!$fra) {
  $fra = 0;
}

$q=\'SELECT * FROM oplysning1 WHERE 1=1\'; 
if ($fornavn)
{$q.=\" AND fornavn LIKE \'$fornavn%\'\";}
if ($efternavn)
{$q.=\" AND efternavn LIKE \'$efternavn%\'\";}
if ($vejnavn)
{$q.=\" AND vejnavn LIKE \'$vejnavn%\'\";}
if ($postnummer)
{$q.=\" AND postnummer LIKE \'$postnummer%\'\";}
if ($bynavn)
{$q.=\" AND bynavn LIKE \'$bynavn%\'\";}
if ($mobilnummer)
{$q.=\" AND mobilnummer LIKE \'$mobilnummer%\'\";}
if ($fastnetnummer)
{$q.=\" AND fastnetnummer LIKE \'$fastnetnummer%\'\";}
if ($email)
{$q.=\" AND email LIKE \'$email%\'\";}

$result = mysql_query ($q);
$antal = mysql_num_rows($result);
$q. = \" LIMIT \".$fra.\",10\";
$result = mysql_query ($q);
$number = mysql_num_rows($result);

if ($number > 0) {
  $til = $fra + 10;
  $fra1 = $fra + 1;
  if ($til > $antal) {
    $til = $antal;
  }
  print \"<p align=center><font face=Tahoma size=1>Fra \".$fra1.\" til \".$til.\" af \".$antal.\" fundne.</font></p>\";

  while ($row = mysql_fetch_array($result)) {
    print (\"<h2>\");
    print $row[\"fornavn\"];
    print (\" \");
    print $row[\"efternavn\"];
    print (\"</h2>\");
    print $row[\"vejnavn\"];
    print (\"<P>\");
    print $row[\"postnummer\"];
    print (\" \");
    print $row[\"bynavn\"];
    print (\"<p>\");
    print $row[\"mobilnummer\"];
    print (\"  /  \");
    print $row[\"fastnetnummer\"];
    print (\"<P>\");
    print $row[\"email\"];
    print (\"<P>\");
  }
} else {print \"Desværre, søgningen gav intet resultat\";}

if ($antal > 0) {
  $naeste = $fra + 10;
  $naestetal = $fra + 20;
  if ($naestetal > $antal) {
    $naestetal = $antal - $naeste;
  } else {
    $naestetal = $naestetal - $naeste;
  }
  if ($antal > $naeste) {
    $beskednaeste = \"<font face=Tahoma size=1><a href=searchform.php?
    fornavn=\".$fornavn.\"&efternavn=\".$efterfornavn.\"&vejnavn=\".$vejnavn.\"&
    postnummer=\".$postnummer.\"&bynavn=\".$bynavn.\"&mobilnummer=\".$mobilnummer.\"&
    fastnetnummer=\".$fastnetnummer.\"&email=\".$email.\"&fra=\".$naeste.\">Næste \".$naestetal.\"</a></font>\";
  }
  $forrige = $fra - 10;
  if ($forrige >= 0) {
    $beskedforrige = \"<font face=Tahoma size=1><a href=searchform.php?
    fornavn=\".$fornavn.\"&efternavn=\".$efterfornavn.\"&vejnavn=\".$vejnavn.\"&
    postnummer=\".$postnummer.\"&bynavn=\".$bynavn.\"&mobilnummer=\".$mobilnummer.\"&
    fastnetnummer=\".$fastnetnummer.\"&email=\".$email.\"fra=\".$forrige.\">Forrige 10</a></font> &nbsp;\";
  }
  $skel = \"\";
  if ($beskedforrige != \"\" && $beskednaeste != \"\") {
    $skel = \"<font face=Tahoma size=1>|</font> &nbsp;\";
  }
  $tal = \"\";
  $x = 1;
  $antal = ceil($antal / 10);
  while ($x <= $antal) {
    $y = ($x * 10) - 10;
    if ($y == $fra) {
      $tal = $tal.$x.\"&nbsp;\";
    } else {
      $tal = $tal.\"<a href=searchform.php?
      fornavn=\".$fornavn.\"&efternavn=\".$efterfornavn.\"&vejnavn=\".$vejnavn.\"&
      postnummer=\".$postnummer.\"&bynavn=\".$bynavn.\"&mobilnummer=\".$mobilnummer.\"&
      fastnetnummer=\".$fastnetnummer.\"&email=\".$email.\"&fra=\".$y.\">\".$x.\"</a>&nbsp;\";
    }
    $x = $x + 1;
  }
  print \"<p align=center><font face=Tahoma size=1>Side: \".$tal.\" &nbsp; &nbsp;</font>\".$beskedforrige.$skel.$beskednaeste.\"</p>\";
}

?>


- Anders
Avatar billede pelann Nybegynder
29. september 2000 - 16:39 #11
Nu kommer den med en fejl i linie 103. Da jeg ikke ved om man tæller tomme linier med har jeg \"lokaliseret\" det til at være i dette stykke:

$result = mysql_query ($q);
$antal = mysql_num_rows($result);
$q. = \" LIMIT \".$fra.\",10\";
$result = mysql_query ($q);
$number = mysql_num_rows($result);

if ($number > 0) {
  $til = $fra + 10;
  $fra1 = $fra + 1;
  if ($til > $antal) {
    $til = $antal;
}

Jeg ved ikke om du kan se om der er noget der er forkert, jeg kan godt nok ikke. Men med min erfaring i php ville jeg ikke en gang kunne se en fejl der ville crashe en hel server :o)


Avatar billede haldesign Nybegynder
29. september 2000 - 16:58 #12
haha... jeg ved godt hvad fejlen er... (tror jeg)

$q=\"SELECT * FROM oplysning1 WHERE 1=1\"; 
if ($fornavn)
{$q.=\" AND fornavn LIKE \'$fornavn%\'\";}
if ($efternavn)
{$q.=\" AND efternavn LIKE \'$efternavn%\'\";}
if ($vejnavn)
{$q.=\" AND vejnavn LIKE \'$vejnavn%\'\";}
if ($postnummer)
{$q.=\" AND postnummer LIKE \'$postnummer%\'\";}
if ($bynavn)
{$q.=\" AND bynavn LIKE \'$bynavn%\'\";}
if ($mobilnummer)
{$q.=\" AND mobilnummer LIKE \'$mobilnummer%\'\";}
if ($fastnetnummer)
{$q.=\" AND fastnetnummer LIKE \'$fastnetnummer%\'\";}
if ($email)
{$q.=\" AND email LIKE \'$email%\'\";}

$result = mysql_query(\"$q\");
$antal = mysql_num_rows($result);
$q. = \" LIMIT \".$fra.\",10\";
$result = mysql_query (\"$q\");
$number = mysql_num_rows($result);

Blev det bedre?

- Anders
Avatar billede haldesign Nybegynder
29. september 2000 - 16:59 #13
Ellers må du smide fejlen op her...

Er det en parse error eller en sql fejl??

- Anders
Avatar billede pelann Nybegynder
29. september 2000 - 17:14 #14
Det er en parse error.

pelann
Avatar billede pelann Nybegynder
29. september 2000 - 17:41 #15
Det blev desværre ikke bedre, den skriver stadig;
Parse error in bla bla bla...on line 103. Det er det samme sted som før, så det må næsten være her et sted der er en fejl:

$result = mysql_query(\"$q\");
$antal = mysql_num_rows($result);
$q. = \" LIMIT \".$fra.\",10\";
$result = mysql_query (\"$q\");
$number = mysql_num_rows($result);
}

if ($number > 0) {
  $til = $fra + 10;
  $fra1 = $fra + 1;
  if ($til > $antal) {
    $til = $antal;
  }
  print \"<p align=center><font face=Tahoma size=1>Fra \".$fra1.\" til \".$til.\" af \".$antal.\" fundne.</font></p>\";

Det er noget \"tricky stuff\", det der php.

pelann

Avatar billede haldesign Nybegynder
29. september 2000 - 17:54 #16
Hvad laver den tuborgklamme under $number = mysql_num_rows($result); ?????

Så vidt jeg kan se skal den IKKE være der!!

- Anders
Avatar billede pelann Nybegynder
29. september 2000 - 18:15 #17
Der får jeg godt nok lidt forklaringsproblemer, for den klamme har jeg ikke i min kode. Men ved en \"fintælling\" fandt jeg ud af at det er her den fejlemeddeler:

}
if ($antal > 0) {
  $naeste = $fra + 10;
  $naestetal = $fra + 20;
  if ($naestetal > $antal) {
    $naestetal = $antal - $naeste;
  } else  {
    $naestetal = $naestetal - $naeste;
  }

Hvis man tæller blanke linier med, er det den nederste linie der skulle være noget galt, men det ser da rigtig nok ud. Jeg kan desværre ikke nå mere i dag. Men kigger på det igen i morgen tidlig. Foreløbig tak for hjælpen (og tålmodigheden).

pelann
Avatar billede haldesign Nybegynder
29. september 2000 - 18:29 #18
Gider du sende HELE din source til mig på:
anders@halnet.dk

- Anders
Avatar billede doeleman Nybegynder
29. september 2000 - 22:39 #19
Du har 2 if-sætninger, men du lukker kun den ene!

if ($antal > 0) {
  $naeste = $fra + 10;
  $naestetal = $fra + 20;
  if ($naestetal > $antal) {
    $naestetal = $antal - $naeste;
  } else  {
    $naestetal = $naestetal - $naeste;
  }
}
Avatar billede haldesign Nybegynder
29. september 2000 - 22:42 #20
Den bliver lukket længere nede!

Det er heller ikke linie 103... linie 103 er denne:
$q. = \" LIMIT \".$fra.\",10\";

Jeg kan umidlbart ikke se hvor fejlen er...!

- Anders
Avatar billede doeleman Nybegynder
30. september 2000 - 09:23 #21
Anders >>

Lidt offtopic, men nu har jeg undret mig flere gange:

Hvorfor skriver du ikke bare:
$q .= \" LIMIT $fra,10\";
Avatar billede pelann Nybegynder
30. september 2000 - 10:54 #22
Nu virker søgefunktionen... nu er der bare en ny fejl, og det er, når man vil videre efter de første 10, så kan man ikke...

Pelann

Avatar billede pelann Nybegynder
30. september 2000 - 11:59 #23
Så virker det hele, mange tak for hjælpen. Jeg troede godt nok at man bare skulle droppe et par linier hist og her for at få sådan noget til at virke. Men jeg har vist meget at lære endnu :o)

pelann
Avatar billede haldesign Nybegynder
30. september 2000 - 12:02 #24
-> doeleman
Det er en gammel vane :o)
Jeg tror nok jeg lærte det på den måde... altså at $etellerandet ikke skulle være i parentes!!

- Anders
Avatar billede haldesign Nybegynder
30. september 2000 - 12:03 #25
parentes = gåseøjne

- Anders
Avatar billede haldesign Nybegynder
30. september 2000 - 12:05 #26
Har du en URL hvor vi kan se resultatet?

- Anders
Avatar billede pelann Nybegynder
30. september 2000 - 12:31 #27
Det har jeg. Det er www.kanalgaden.dk, men der er ikke ret mange numre i basen endnu, men det håber vi da kommer. Inden du bliver for \"fordomsfuld\" når du ser siten, skal det vel siges at vi aldrig før har arbejdet med CSS, PHP, MySQL og hvad vi ellers kommer til at bruge fremover. Det er mest ment som et forsøg på at lære noget om programmering, da vi synes det er utroligt spændende. Og så kunne det da være sjovt hvis vi kunne få så mange ting på siten, at der også er nogen der gider at besøge den med tiden. Men det er ikke det primære, det er som sagt mest for at få raget lidt erfaring til os, og få prøvet noget nyt.

Tak igen.

pelann
Avatar billede haldesign Nybegynder
30. september 2000 - 13:08 #28
Sådan skal det være... bare klø på... det er den eneste måde man bliver god!

Kan det passe at der kun er 4 poster i databasen?
Du skal evt. lave lidt javascript der gør at man SKAL udfylde mindste eet felt!

- Anders
Avatar billede haldesign Nybegynder
30. september 2000 - 13:17 #29
<script>
function CheckFelter(form) {
  if (form.fornavn == \"\" &&
    form.efternavn == \"\" &&
    form.vejnavn == \"\" &&
    form.postnummer == \"\" &&
    form.bynavn == \"\" &&
    form.mobilnummer == \"\" &&
    form.fastnetnummer == \"\" &&
    form.email == \"\") {
    alert(\"Du skal udfylde mindst eet felt\")
    form.fornavn.focus()
    return false
  }
  return true
}
</script>
...
<form onSubmit=\"return CheckFelter(this)\" action=searchform.php method=POST>
...

Jeg ved ikke om det virker... er selv helt ny i javascript!!

- Anders
 
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
Computerworld tilbyder specialiserede kurser i database-management

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