Avatar billede tobrukDk Novice
19. oktober 2012 - 19:09 Der er 18 kommentarer og
1 løsning

søger funktioner problemer - mysqli

hej


Lige nu arbejder på en lille søge function til min side men det er sådan at jeg er kommet ude i problemer med siden.


<form method="post" action="/sog/">
<input type="text" name="sog">
<input type="submit" value="Søg">
</form>


<table border="0">
<?php
/*

Her skal infomation komme ud

*/
echo $output;?>
</table>


Sådan her har jeg valgt at bygge min søg function:


<?php
include ("inc/db/db.php");
session_start();

if(isset($_POST["sog"]))
{
    $sog = $_POST["sog"];
    $sog = preg_replace("#[^0-9a-z#i","",$sog)
   
    if ($stmt = $mysqli->prepare('SELECT `brugernavn`, `navn`, `efternavn` FROM `bruger` WHERE `brugernavn` LIKE "%$sog%" OR `navn` LIKE "%$sog%" OR `efternavn` LIKE "%$sog%"'))
    {
    $stmt->execute();
    $stmt->store_result();
    $count = $stmt->num_rows;
    $stmt->close();
   
    if($count == 0)
    {
        $intet = '';
        $intet = "Prøve igen.. Du fik intet ude af du søgene!";   
    }
    else
    {
        $stmt->bind_result($brugernavn, $navn, $efternavn);
        while ($stmt->fetch())
        {
            $output .=
            "
                <tr>
                    <td>$brugernavn</td>
                    <td>$navn</td>
                    <td>$efternavn</td>
                </tr>
            ";
        }   
    }

    }
    else
    {
        /* Der er opstået en fejl */
        echo 'Der opstod en fejl i erklæringen: ' . $mysqli->error;
    }
}
?>


Fejl kommer frem og siger:

Parse error: syntax error, unexpected T_IF in /home/appsdanm/public_html/sog.php on line 10

Det vil sige her


if ($stmt = $mysqli->prepare('SELECT `brugernavn`, `navn`, `efternavn` FROM `bruger` WHERE `brugernavn` LIKE "%$sog%" OR `navn` LIKE "%$sog%" OR `efternavn` LIKE "%$sog%"'))


Jeg har kigge frem og tilbage og jeg kan bare intet finde eller er det bare min øjne som ikke kigge godt efter..


Min søg function er lavet efter;

http://www.youtube.com/watch?v=PBLuP2JZcEg

dog er den i mysql men der ikke så svær igen til at bygge den om til mysqli. :)

Spørgs hvis der er noget du vil vide omkring sådan som jeg har gjort eller ligne


action="/sog/">


Grund til at den er på den. det er fordi jeg har bygge den om til .htaccsee eller hvordan man staver til det. :)

Håber du kan hjælp mig!:)
Avatar billede erikjacobsen Ekspert
19. oktober 2012 - 20:45 #1
Du skal nok bare kigge efter et semikolon på linien før.

(Og så skal man bruge parameters med mysqli for at opnå beskyttelse mod sql-injection - det gør du ikke)
Avatar billede tobrukDk Novice
19. oktober 2012 - 21:17 #2
hvad mener du helt? jeg forstår det ikke helt?
Avatar billede erikjacobsen Ekspert
19. oktober 2012 - 21:21 #3
Der mangler vist et semikolon på linie 8.
Avatar billede tobrukDk Novice
19. oktober 2012 - 21:58 #4
Warning: preg_replace() [function.preg-replace]: Compilation failed: missing terminating ] for character class at offset 8 in /home/appsdanm/public_html/sog.php on line 8

siger den nu efter jeg har gjort sådan her ved line 8


$sog = preg_replace("#[^0-9a-z#i", "", $sog);
Avatar billede erikjacobsen Ekspert
19. oktober 2012 - 22:02 #5
Og det er nok fordi der mangler en ]

$sog = preg_replace("#[^0-9a-z]#i", "", $sog);
Avatar billede tobrukDk Novice
19. oktober 2012 - 22:09 #6
mærkeligt, nu kommer der ingen fejl eller noget som helst. og der kommer heller ikke noget som helst frem omkring det jeg søger efter :s
Avatar billede erikjacobsen Ekspert
19. oktober 2012 - 22:33 #7
Og det er så næste problem. Jeg får nok tæsk af olebole for at vise dig en rettelse, der (måske) får det til at virke, men som alligevel aldrig må bruges - i hvert fald hvis siden kan tilgås udefra. Du skal, i betydningen skal, bruge parameters med mysqli ... men altså, ... du skal egentlig bare bytte om på ' og "

    if ($stmt = $mysqli->prepare("SELECT `brugernavn`, `navn`, `efternavn` FROM `bruger` WHERE `brugernavn` LIKE '%$sog%' OR `navn` LIKE '%$sog%' OR `efternavn` LIKE '%$sog%'"))
Avatar billede tobrukDk Novice
19. oktober 2012 - 22:42 #8
Ny fejl kommer frem;

Warning: mysqli_stmt::bind_result() [mysqli-stmt.bind-result]: Couldn't fetch mysqli_stmt in /home/appsdanm/public_html/sog.php on line 24

Warning: mysqli_stmt::fetch() [mysqli-stmt.fetch]: Couldn't fetch mysqli_stmt in /home/appsdanm/public_html/sog.php on line 25

har ikke klik på noget som helst eller ligne ;)
Avatar billede tobrukDk Novice
19. oktober 2012 - 22:43 #9
ååhhh

line 24 skal ligger op af ;)
Avatar billede erikjacobsen Ekspert
19. oktober 2012 - 22:50 #10
Mnæhh, det har nok mere med at gøre, at du på det tidspunkt har sagt close() til dit £stmt.
Avatar billede tobrukDk Novice
19. oktober 2012 - 22:53 #11
Jeg har smidt "$stmt->close();" længe ned af,, ;)




$stmt->close();
    }
    else
    {
        /* Der er opstået en fejl */
        echo 'Der opstod en fejl i erklæringen: ' . $mysqli->error;
    }
}
?>


det virker nu ;)
Avatar billede tobrukDk Novice
19. oktober 2012 - 23:17 #12
lige et svar?
Avatar billede erikjacobsen Ekspert
19. oktober 2012 - 23:24 #13
Ja, det må du gerne, og efterfølgende acceptere det. Jeg samler slet ikke på point, tak.
Avatar billede tobrukDk Novice
19. oktober 2012 - 23:42 #14
Tak for hjælpen!.. :)

men har lige et sidste spørgsmål

Det er sådan at når man skal søge efter noget så skal det komme frem og kun det ikke andre bruger eller ligne,

men hvis man ikke har søgt eller ligne så skal man kun se bruger eller hvordan man forklare det bedre. ellers spørger mig ;)


<form method="post" action="/sog/">
        <input type="text" name="sog">
        <input type="submit" value="Søg">
    </form>

   
    <?php
    if(!isset($_POST["sog"]))
    {
    $sog = $_POST["sog"];
    $sog = preg_replace("#[^0-9a-z]#i", "", $sog);
   
    if ($stmt = $mysqli->prepare("SELECT `id`, `brugernavn`, `profilbillede`, `profilbillede_godkendt` FROM `bruger` WHERE `brugernavn` LIKE '%$sog%' OR `navn` LIKE '%$sog%' OR `efternavn` LIKE '%$sog%'"))
    {
    $stmt->execute();
    $stmt->store_result();
    $count = $stmt->num_rows;
   
    if($count == 0)
    {
        $intet = '';
        $intet = "Prøve igen.. Du fik intet ude af du søgene!";   
    }
    else
    {
        $stmt->bind_result($id, $brugernavn, $navn, $efternavn);
        while ($stmt->fetch())
        {
            $output .=
            "
                <tr>
                    <td>$brugernavn</td>
                    <td>$navn</td>
                    <td>$efternavn</td>
                </tr>
            ";
        }   
    }
    $stmt->close();
    }
    else
    {
        /* Der er opstået en fejl */
        echo 'Der opstod en fejl i erklæringen: ' . $mysqli->error;
    }
    }
   
    elseif ($stmt = $mysqli->prepare('SELECT `id`, `brugernavn`, `profilbillede`, `profilbillede_godkendt` FROM `bruger`')) {
    $stmt->execute();
    $stmt->bind_result($id, $brugernavn, $profilbillede, $profilbillede_godkendt);

    while ($stmt->fetch()) {
    if($profilbillede_godkendt == 0)
        {
            echo "<div id=\"bruger_box_indhold\">";
            echo "<a href=\"/profil/$id/\"><img src=\"/profil-img/ikke-godkendt/users.png\" alt=\"$brugernavn\" height=\"115\" width=\"100\"></a>";
            echo "<a href=\"/profil/$id/\">$brugernavn</a>";
            echo "</div>";
        }
        if($profilbillede_godkendt == 1)
        {
            echo "<div id=\"bruger_box_indhold\">";
            echo "<a href=\"/profil/$id/\"><img src=\"/profil-img/$profilbillede\" alt=\"$brugernavn\" height=\"115\" width=\"100\" border=\"0\"></a>";
            echo "<a href=\"/profil/$id/\">$brugernavn</a>";
            echo "</div>";
        }
        if($profilbillede_godkendt == 2)
        {
            echo "<div id=\"bruger_box_indhold\">";
            echo "<a href=\"/profil/$id/\"><img src=\"/profil-img/ikke-godkendt/users.png\" alt=\"$brugernavn\" height=\"115\" width=\"100\"></a>";
            echo "<a href=\"/profil/$id/\">$brugernavn</a>";
            echo "</div>";
        }
    }
    $stmt->close();
    } else {
        echo 'Der opstod en fejl i erklæringen: ' . $mysqli->error;
    }
    ?>


der hvor der stå "elseif" det er hvor den viser bruger når man ikke har søgt ;) ellers spørger eller opret jeg bare en ny ;)
Avatar billede erikjacobsen Ekspert
20. oktober 2012 - 00:01 #15
Nej, den forstår jeg ikke. Hvad er det, der ikke virker som du vil?
Avatar billede tobrukDk Novice
20. oktober 2012 - 00:14 #16
Det hele virker men det er bare sådan at normalt skal der bare blive vist billeder af brugerne., men lige så snart man har sagt så gå alle brugerne væk og så kommer der kun det frem som man har søgt efter ;)

eller spørger igen hvis det er ?
Avatar billede erikjacobsen Ekspert
20. oktober 2012 - 00:22 #17
Er det ikke det, der sker?

Men nu har du ændret din kode til noget mærkeligt: Der hvor du vil finde $brugernavn, $navn, $efternavn er det ikke længere de felter, der hentes ud af tabellen.
Avatar billede tobrukDk Novice
20. oktober 2012 - 00:35 #18
det ligemeget jeg har klart det :) og det virker jeg lukker her!
Avatar billede tobrukDk Novice
20. oktober 2012 - 02:33 #19
Igen tak for hjælpen
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