Avatar billede miss-g Seniormester
29. marts 2018 - 22:45 Der er 3 kommentarer og
1 løsning

Søge-kode: Vis ordet "lommer", selvom der kun søges "lom"

Jeg er ikke helt klar over, hvor der skal rettes i denne kode. Lige nu søger den kun på præcist stavede ord. Jeg kunne godt tænke mig, at den kunne søge på starten af ordet også. Jeg har f.eks. ordet "lommer" i min database. Hvis jeg søger "lomme", kommer der intet resultat.

Her er koden:
---------------------------------------
<?php
if (isset($_POST['submit'])) {
//You NEED to use prepared statements when connecting to the database, to make the search form secure! I didn't do that in the video, however we will do it here together!
//If you are confused about prepared statements, please watch episode 40 in the PHP playlist and learn it first.

//Here we get the search input
$search = $_POST['search'];

//ALSO remember that we are using prepared statements, meaning that for now, we will use "?" as a placeholder for $search!
$sql = "SELECT * FROM ordliste WHERE ord_dansk LIKE ?
OR ord_engelsk LIKE ?
OR ord_svensk LIKE ?
OR ord_tysk LIKE ?
";

//Here we start the prepared statement
$stmt = mysqli_stmt_init($conn);
if (!mysqli_stmt_prepare($stmt, $sql)) {
  echo "SQL error";
  } else {
//Here we assign our data to the prepared statement, and replace our placeholders with $search
mysqli_stmt_bind_param($stmt, 'ssss', $search, $search, $search, $search);
//Then we execute the statement!
mysqli_stmt_execute($stmt);

//Here we get the number of results we got from the search!
$result = mysqli_stmt_get_result($stmt);
$resultCount = mysqli_num_rows($result);

if ($resultCount > 0) {

while ($row = mysqli_fetch_assoc($result)) {
//Here we output the search results!

echo "<tr>";
echo "<td>".$row['ord_dansk']."</td>";
echo "<td>".$row['ord_engelsk']."</td>";
echo "</tr>";
}
}
}
}
?>
Avatar billede michael_stim Ekspert
29. marts 2018 - 23:16 #1
Du skal have et jokertegn med hvis du bruger like.

LIKE CONCAT('%',?,'%')
Avatar billede michael_stim Ekspert
29. marts 2018 - 23:18 #2
Og hvis det kun er starten der skal matches på kan du udelukke det förste procenttegn.
Avatar billede miss-g Seniormester
30. marts 2018 - 00:29 #3
Tusind tak :-)
Avatar billede arne_v Ekspert
30. marts 2018 - 00:54 #4
Man kunne vaelge at lave konkataneringen i PHP fremfor MySQL.

Altsaa beholde SQL som den er men bruge:

mysqli_stmt_bind_param($stmt, 'ssss', $search . '%', $search . '%', $search . '%', $search . '%');

Der er ingen funktionel forskel.

Men hvis man kan noejes med wilcard til sidst og der er et tree index paa felterne man soeger i, saa vil det sandsynligvis vaere hurtigere.
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

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