Oprettet fre. d. 19. oktober 2012 kl. 19:09:47

tobrukDk
tobrukDk (2.145 point. Point ude: 0)

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/ (...)

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!:)

Skrevet fre. d. 19. oktober 2012 kl. 20:45:23| #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)

Skrevet fre. d. 19. oktober 2012 kl. 21:17:28| #2

tobrukDk
tobrukDk (2.145 point)
hvad mener du helt? jeg forstår det ikke helt?

Skrevet fre. d. 19. oktober 2012 kl. 21:21:01| #3


Skrevet fre. d. 19. oktober 2012 kl. 21:58:09| #4

tobrukDk
tobrukDk (2.145 point)
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);

Skrevet fre. d. 19. oktober 2012 kl. 22:02:32| #5

Og det er nok fordi der mangler en ]

$sog = preg_replace("#[^0-9a-z]#i", "", $sog);

Skrevet fre. d. 19. oktober 2012 kl. 22:09:30| #6

tobrukDk
tobrukDk (2.145 point)
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

Skrevet fre. d. 19. oktober 2012 kl. 22:33:39| #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%'"))

Skrevet fre. d. 19. oktober 2012 kl. 22:42:35| #8

tobrukDk
tobrukDk (2.145 point)
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 ;)

Skrevet fre. d. 19. oktober 2012 kl. 22:43:12| #9

tobrukDk
tobrukDk (2.145 point)
ååhhh

line 24 skal ligger op af ;)

Skrevet fre. d. 19. oktober 2012 kl. 22:50:56| #10

Mnæhh, det har nok mere med at gøre, at du på det tidspunkt har sagt close() til dit £stmt.

Skrevet fre. d. 19. oktober 2012 kl. 22:53:42| #11

tobrukDk
tobrukDk (2.145 point)
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 ;)

Skrevet fre. d. 19. oktober 2012 kl. 23:17:45| #12


Skrevet fre. d. 19. oktober 2012 kl. 23:24:04| #13

Ja, det må du gerne, og efterfølgende acceptere det. Jeg samler slet ikke på point, tak.

Skrevet fre. d. 19. oktober 2012 kl. 23:42:05| #14

tobrukDk
tobrukDk (2.145 point)
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 ;)

Skrevet lør. d. 20. oktober 2012 kl. 00:01:10| #15

Nej, den forstår jeg ikke. Hvad er det, der ikke virker som du vil?

Skrevet lør. d. 20. oktober 2012 kl. 00:14:51| #16

tobrukDk
tobrukDk (2.145 point)
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 ?

Skrevet lør. d. 20. oktober 2012 kl. 00:22:01| #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.

Skrevet lør. d. 20. oktober 2012 kl. 00:35:50| #18

tobrukDk
tobrukDk (2.145 point)
det ligemeget jeg har klart det :) og det virker jeg lukker her!

Skrevet lør. d. 20. oktober 2012 kl. 02:33:53| #19

tobrukDk
tobrukDk (2.145 point)
Igen tak for hjælpen

Skriv et indlæg




Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] [img]link til billede[/img]
Web- og emailadresser omdannes automatisk til links

Log ind

   


Seneste spørgsmål

ZF2 Entity was not found

Oprettet den 23. maj 2013 kl. 12.51
zorkmontana giver 60 point for svar | Giv et svar »

hjælp til php / mysql

Oprettet den 23. maj 2013 kl. 10.54
AOT1977 giver 30 point for svar | Giv et svar »

Hjælp til database kolonne

Oprettet den 22. maj 2013 kl. 17.44
StotheT giver 30 point for svar | Giv et svar »








Tips & Tricks fra PC World

Teaser billede

Her gemmer de hemmelige kopier af dine data sig

Hvad sker der, hvis din Mac bryder sammen og du ikke har taget backup? Fortvivl ikke. Der er gode chancer for, at der rundt omkring alligevel ligger sikkerhedskopier af dine data.


Anmeldelser fra PC World

Teaser billede

Test: Samsung Galaxy S4 er et hit - trods gøglertricks

Kan Samsung beholde førertrøjen i det store Android-race? Galaxy S4 er smækfyldt med innovative funktioner, men også med en del gøgl. Er det for meget? Få vores dom over Samsungs nye topmodel.


Seneste blogindlæg

Teaser billede

Tvangslukke spørgsmål: Hvad er den bedste løsning?

Hej Vi har mange åbne spørgsmål på Eksperten. Vi ville gerne tvangslukke dem - så et spørgsmål efter f.eks. 6 måneder lukkes. Men der er et par uklarheder som ville være gode at få lidt input til:...


Nyheder fra PC World

Teaser billede

Ny opfindelse: Oplad din mobil på 20 sekunder

Måske er det snart slut med at lade mobilen op hver aften. Med ny opfindelse kan telefonen få fuld energi på sølle 20 sekunder.


Nyheder fra Computerworld

Teaser billede

Snart kan du printe din egen pizza

Inden længe kan det blive muligt at printe pizzaer og andre fødevarer.


IT Kurser
Samarbejdspartnere

Udgiver · © 2013 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301 · Brug af personoplysninger