Avatar billede Morten Professor
04. november 2015 - 12:22 Der er 4 kommentarer og
1 løsning

Mysqli søge funktion

Hej Eksperter

Jeg er ved at lave en søge funktion.
Har her en Kilde http://www.eksperten.dk/spm/653490
Hvor har prøvet at integrer den på min side, men kan ikke helt få det til at virke.

Ville endelig godt have lavet en mysqli til det.

Med venlig hilsen
Morten
Avatar billede Slater Ekspert
04. november 2015 - 12:27 #1
Så hvad er det du skal have hjælp til? Du er nødt til at beskrive lidt mere end at du ikke kan få det til at virke.
Avatar billede Morten Professor
04. november 2015 - 12:36 #2
Fandt en her der virker men ikke efter hensigten

$query = "SELECT vare, tekst FROM vare ORDER BY id";
if ($result = $hellestrik->query($query)) {

    /* seek to row no. 400 */
    $result->data_seek(399);

    /* fetch row */
    $row = $result->fetch_row();

    printf ("Flue: %s  Tekst: %s\n", $row[0], $row[1]);

    /* free result set*/
    $result->close();
}

/* close connection */
$mysqli->close();
?>

Den kommer kun med den første id.

Og det står der heletiden. ikke bare når man søger.
Og formen hvordan skal den stilles op?
Avatar billede olsensweb.dk Ekspert
04. november 2015 - 14:08 #3
>Og formen hvordan skal den stilles op?
http://www.eksperten.dk/spm/653490#reply_5832468

prøv med et tomt søgeord og tryk på submit knappen
(utested)
   
<?php
if (isset($_POST['sogeord'])) {
// her skal lige valideres, afh sql injection, evt forhindre søgeord tomt,
    $sogeord = $_POST['sogeord'];
    // omskrivning af http://www.eksperten.dk/spm/653490#reply_5832460 til mysqli
    $query = mysqli_query($conn, "select * from vare where navn like '%" . $sogeord . "%'") or die(mysqli_error($conn));
    if (mysqli_num_rows($query) >= 1) {
        echo "<strong>Vi fandt følgende:</strong><br /><br />";
        while ($foo = mysqli_fetch_object($query)) {
            echo $foo->navn . " " . $foo->antal . "<br>";
        }
    } else {
        echo "Ingen vare var at finde.";
    }
} else {
    // man kunne overveje om formen hele tiden skulle visses,
    // jeg har altid fast søgebar i toppen af siden,
    // også når jeg visser søgeresultater, da det så er nemt at søge igen
    echo '
        <!-- http://www.eksperten.dk/spm/653490#reply_5832468 -->
        <form method="post">
        <label for="sogeord">Søgeord:</label><br />
        <input type="text" name="sogeord" />
        <input type="submit" name="submit" value="search!" />
        </form>
    ';
}
?>


skal der søges på hele navnet eller kun del af navnet ?? (her søges på dele af navnet)

lav en tom html side og lig dette ind, og selvføgelig en connection til din db, test det af.

lav evt et sql dump af din varetabel, og lig det herinde
Avatar billede Morten Professor
04. november 2015 - 14:29 #4
Det virker perfekt.
Endnu en gang 1000 tak for du hjælper mig.

Forresten jeg fik det til at virke det med antal på siden.
Så det hele virker.

Vil du smide et svar så du kan få dine point.

Her er koden:
if (isset($_POST['sogeord'])) {
// her skal lige valideres, afh sql injection, evt forhindre søgeord tomt,
    $sogeord = $_POST['sogeord'];
    // omskrivning af http://www.eksperten.dk/spm/653490#reply_5832460 til mysqli
    $query = mysqli_query($hellestrik, "select * from vare where vare like '%" . $sogeord . "%'") or die(mysqli_error($hellestrik));
    if (mysqli_num_rows($query) >= 1) {
        echo "<strong>Vi fandt følgende:</strong><br /><br />";
        while ($foo = mysqli_fetch_object($query)) {
            echo $foo->vare . " " . $foo->tekst . "<br>";
        }
    } else {
        echo "Ingen vare var at finde.";
    }
} else {
    // man kunne overveje om formen hele tiden skulle visses,
    // jeg har altid fast søgebar i toppen af siden,
    // også når jeg visser søgeresultater, da det så er nemt at søge igen
    echo '
        <!-- http://www.eksperten.dk/spm/653490#reply_5832468 -->
        <form method="post">
        <label for="sogeord">Søgeord:</label><br />
        <input type="text" name="sogeord" />
        <input type="submit" name="submit" value="search!" />
        </form>
    ';
}

/* close connection */
$hellestrik->close();

Med venlig hilsen
Morten
Avatar billede olsensweb.dk Ekspert
04. november 2015 - 17:31 #5
svar får du her

man kunne overveje om method ikke skulle være GET(var det oprindeligt), så man kan bookmarke en søgning

hvad skete der hvis søgeordet var tomt ??, (så vidt jeg husker får man listed alle poster)
ikke særlig smart, hvis der er mange poster, hvis man vil tillade det skal man nok lave https://www.google.dk/search?q=mysqli+pagination
lille video https://www.developphp.com/video/PHP/Pagination-MySQLi-Google-Style-Paged-Results-Tutorial

nb: det er ikke særlig smart at have collone navne der er det sammen som tabel navne som du har det her, "from vare where vare", jeg prefixer næsten altid mine tabel navne med tbl_ så er jeg aldrig i tvivl så der ville have stået "from tbl_vare where vare"

(utested)
<!-- http://www.eksperten.dk/spm/653490#reply_5832468 -->
<!-- ville ligge i min top menu -->
<form method="get" action="<?php echo $_SERVER['PHP_SELF']?>">
<label for="sogeord">Søgeord:</label><br />
<input type="text" name="sogeord" />
<input type="submit" value="search!" />
</form>

<?php
// kunne være en anden side
if (isset($_GET['sogeord'])) {
// her skal lige valideres, afh sql injection, evt forhindre søgeord tomt,
    $sogeord = $_POST['sogeord'];
    $query = mysqli_query($hellestrik, "select * from vare where vare like '%" . $sogeord . "%'") or die(mysqli_error($hellestrik)); 
    if (mysqli_num_rows($query) >= 1) {
        echo "<strong>Vi fandt følgende:</strong><br /><br />";
        while ($foo = mysqli_fetch_object($query)) {
            echo $foo->vare . " " . $foo->tekst . "<br>";
        }
    } else {
        echo "Ingen vare var at finde.";
    }
}
?>
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