Avatar billede prodigy01 Nybegynder
08. maj 2008 - 13:41 Der er 13 kommentarer og
2 løsninger

Simpel søge-funktion i php

Hej!
Jeg har prøvet lidt med det her, men det virker ikke når jeg søger på noget som er i databasen.
Når jeg søger på noget som ikke er i databasen, siger den at den ikke kunne finde det.
Nogen som kan finde fejlen?..

<?php
if(isset($_POST['search']))
{
    include("connect.php");
    $search = mysql_escape_string($_POST['sSearch']);
    $query = mysql_query("SELECT * FROM spil WHERE navn LIKE '".$search."' OR beskrivelse LIKE '".$search."'");
    if(mysql_num_rows($query) > 0)
    {
        //Vi fandt noget...
        while($row = mysql_fetch_array($query))
        {
            echo $row['kategori'] . " - " . $row['navn'] . " - " . $row['beskrivelse'] . " - " . $row['link'] . "<br>";
        }
    }
    else
    {
        //Vi fandt ikke noget...
        echo "Vi fandt desværre ikke: " . $search . " i vores database, prøv igen!";
    }
}

echo "<form action=\"".$_SERVER['PHP_SELF']."\" method=\"POST\">\n";
echo "<input type=\"text\" name=\"sSearch\">\n";
echo "<input type=\"submit\" name=\"search\" value=\"Søg\">\n";
echo "</form>\n";

?>
Avatar billede jakobdo Ekspert
08. maj 2008 - 13:43 #1
Prøv denne variant:

<?php
if(isset($_POST['search'])){
    include("connect.php");
    $search = mysql_escape_string($_POST['sSearch']);
    $query = mysql_query("SELECT * FROM spil WHERE navn LIKE '%".$search."%' OR beskrivelse LIKE '%".$search."%'");
    if(mysql_num_rows($query) > 0){
        //Vi fandt noget...
        while($row = mysql_fetch_array($query)){
            echo $row['kategori'] . " - " . $row['navn'] . " - " . $row['beskrivelse'] . " - " . $row['link'] . "<br>";
        }
    }else{
        //Vi fandt ikke noget...
        echo "Vi fandt desværre ikke: " . $search . " i vores database, prøv igen!";
    }
}

echo "<form action=\"".$_SERVER['PHP_SELF']."\" method=\"POST\">\n";
echo "<input type=\"text\" name=\"sSearch\">\n";
echo "<input type=\"submit\" name=\"search\" value=\"Søg\">\n";
echo "</form>\n";

?>
Avatar billede prodigy01 Nybegynder
08. maj 2008 - 13:48 #2
Når jeg trykker på søg uden at skrive noget, finder den alle resultater frem.
Men når jeg søger efter noget specifik - f.eks et spil som er i databasen.
Så finder den det ikke? :S
Avatar billede prodigy01 Nybegynder
08. maj 2008 - 13:51 #3
Når jeg kopiere den tekst jeg ska søge efter, og søger efter den, så gider den godt nogen gange?
Men ikke hvis jeg selv skriver.. Den opfører sig mærkeligt.
Avatar billede w13 Novice
08. maj 2008 - 13:53 #4
Koden vil kun blive kørt, hvis der er blevet klikket på submitknappen.

Jeg ville nok rette:
if(isset($_POST['search'])){
til:
if(isset($_POST['sSearch'])){
Avatar billede w13 Novice
08. maj 2008 - 13:53 #5
Og så kan du rette:
echo "<input type=\"submit\" name=\"search\" value=\"Søg\">\n";
til:
echo "<input type=\"submit\" value=\"Søg\">\n";
Avatar billede w13 Novice
08. maj 2008 - 13:55 #6
Problemet før: når du indtaster noget i feltet, trykker du vel enter i stedet for at klikke på knappen. Og den gamle kode kunne ikke vise noget, hvis der ikke var klikket på knappen.
Avatar billede prodigy01 Nybegynder
08. maj 2008 - 13:58 #7
Virker bedre nu Tak.
Hvordan gør jeg sådan at hvis man trykker enter uden at skrive noget, at den så ikke foretager sig,, eller måske bare siger "fandt ikke noget desværre".

OG..

Hvordan gør jeg sådan at den også søger under alle billeder OG spil..?
Avatar billede jakobdo Ekspert
08. maj 2008 - 15:39 #8
Hvis du har rettet:
if(isset($_POST['search'])){
til
if(isset($_POST['sSearch'])){
tilføj så også:

if(isset($_POST['sSearch']) && $_POST['sSearch'] != ''){
Avatar billede w13 Novice
08. maj 2008 - 15:41 #9
Du kan også rette:

echo "<form action=\"".$_SERVER['PHP_SELF']."\" method=\"POST\" onsubmit=\"return this.sSearch.value!=''\">\n";
echo "<input type=\"text\" name=\"sSearch\">\n";
echo "<input type=\"submit\" name=\"search\" value=\"Søg\">\n";
echo "</form>\n";

Så prøver den slet ikke at søge, hvis man ikke har indtastet noget. Og brugeren skal derved ikke sidde og vente, f.eks. hvis han får trykket ved en fejl.
Avatar billede w13 Novice
08. maj 2008 - 15:42 #10
Og hvis den skal søge under både spil og billeder, så er din "simple søge-funktion i php" ikke helt så simpel længere. :)
Avatar billede prodigy01 Nybegynder
08. maj 2008 - 17:06 #11
Nå okay..
Tusind tak skal i have.. Smid svar begge to.. Det virker super :)

Men kan i fortælle mig hvordan jeg deler det.
Altså, har prøvet, men haha ;D det virker ikke..

<?php
if(isset($_POST['sSearch']) && $_POST['sSearch'] != ''){
    include("config/database.php");
    $search = mysql_escape_string($_POST['sSearch']);
    $query = mysql_query("SELECT * FROM spil WHERE navn LIKE '%".$search."%' OR beskrivelse LIKE '%".$search."%' OR kategori LIKE '%".$search."%'");
?>
<?
    if(mysql_num_rows($query) > 0){
        //Vi fandt noget...
        while($row = mysql_fetch_array($query)){
            echo("");
        }
?>
<? echo $row[navn]; ?>
<?
}
?>
<?
}else{
echo "<font color=red>Der er desværre ingen resultater på: " . $search . " i vores database, prøv igen!</font>";
}
?>
<?
}
?>
Avatar billede w13 Novice
08. maj 2008 - 18:36 #12
Jeg opretter et svar her. Så skal Jakobdo oprette et svar og så kan du markere begge vores brugernavne i boksen her nederst på siden og vælge "Acceptér".
Avatar billede prodigy01 Nybegynder
08. maj 2008 - 18:40 #13
Ja okay :)

Men ved du hvordan jeg deler koden?.. Har prøvet der, det gik ikke..
Avatar billede jakobdo Ekspert
08. maj 2008 - 21:33 #14
Svar!
Avatar billede jakobdo Ekspert
08. maj 2008 - 21:54 #15
Takker for point.
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