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?
Annonceindlæg fra Cognizant
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
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> \"; } $skel = \"\"; if ($beskedforrige != \"\" && $beskednaeste != \"\") { $skel = \"<font face=Tahoma size=1>|</font> \"; } $tal = \"\"; $x = 1; $antal = ceil($antal / 10); while ($x <= $antal) { $y = ($x * 10) - 10; if ($y == $fra) { $tal = $tal.$x.\" \"; } else { $tal = $tal.\"<a href=forslag1-sogning.php3?soegeord=\".$soegeord.\"&fra=\".$y.\">\".$x.\"</a> \"; } $x = $x + 1; } print \"<p align=center><font face=Tahoma size=1>Side: \".$tal.\" </font>\".$beskedforrige.$skel.$beskednaeste.\"</p>\"; } Dette er nok ikke den nemmeste måde, men det virker fint!! - Anders
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
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
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?
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
29. september 2000 - 15:33
#7
kan du ikke smide hele din kode op her... så vil jeg slavisk gå den igennem... - Anders
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> \"; } $skel = \"\"; if ($beskedforrige != \"\" && $beskednaeste != \"\") { $skel = \"<font face=Tahoma size=1>|</font> \"; } $tal = \"\"; $x = 1; $antal = ceil($antal / 10); while ($x <= $antal) { $y = ($x * 10) - 10; if ($y == $fra) { $tal = $tal.$x.\" \"; } else { $tal = $tal.\"<a href=searchform.php?soegeord=\".$fornavn.\"; \".$efterfornavn.\"; \".$vejnavn.\"; \".$postnummer.\"; \".$bynavn.\"; \".$mobilnummer.\"; \".$fastnetnummer.\"; \".$email.\"; &fra=\".$y.\">\".$x.\"</a> \"; } $x = $x + 1; } print \"<p align=center><font face=Tahoma size=1>Side: \".$tal.\" </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 ?>
29. september 2000 - 16:03
#9
Det har du... :o) Jeg kigger lige på det... 2 sek - Anders
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> \"; } $skel = \"\"; if ($beskedforrige != \"\" && $beskednaeste != \"\") { $skel = \"<font face=Tahoma size=1>|</font> \"; } $tal = \"\"; $x = 1; $antal = ceil($antal / 10); while ($x <= $antal) { $y = ($x * 10) - 10; if ($y == $fra) { $tal = $tal.$x.\" \"; } 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> \"; } $x = $x + 1; } print \"<p align=center><font face=Tahoma size=1>Side: \".$tal.\" </font>\".$beskedforrige.$skel.$beskednaeste.\"</p>\"; } ?> - Anders
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)
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
29. september 2000 - 16:59
#13
Ellers må du smide fejlen op her... Er det en parse error eller en sql fejl?? - Anders
29. september 2000 - 17:14
#14
Det er en parse error. pelann
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
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
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
29. september 2000 - 18:29
#18
Gider du sende HELE din source til mig på: anders@halnet.dk - Anders
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; } }
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
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\";
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
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
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
30. september 2000 - 12:03
#25
parentes = gåseøjne - Anders
30. september 2000 - 12:05
#26
Har du en URL hvor vi kan se resultatet? - Anders
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
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
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
Computerworld tilbyder specialiserede kurser i database-management