Suche PHP MySQL mit exaktem Ergebnis
Hallo,
ich habe wahrscheinlich irgendeinen Denkfehler in meinem Script. Ich möchte dass im Suchfeld nach der Stadt gesucht wird. Ich benötige im Ergebnis aber nur das exakte Ergebnis. Aktuell gibt es mir aber alle Datensätze aus die das Suchwort enthalten. Kann mir bitte jemand helfen?
ich habe wahrscheinlich irgendeinen Denkfehler in meinem Script. Ich möchte dass im Suchfeld nach der Stadt gesucht wird. Ich benötige im Ergebnis aber nur das exakte Ergebnis. Aktuell gibt es mir aber alle Datensätze aus die das Suchwort enthalten. Kann mir bitte jemand helfen?
<!DOCTYPE html>
<html>
<head>
<title>Suche</title>
<link rel="stylesheet" type="text/css" href="design.css" />
</head>
<body>
<section>
<div id="form">
<header>Suche</header>
<form method="get">
<input type="text" class="suchfeld" name="search" />
<input type="submit" class="suchbutton" value="Suche" />
<form>
</div>
<div>
<?php
if(isset($_GET["search"])) {
$suchwort = $_GET["search"];
$suchwort = explode(" ", $suchwort);
$abfrage = "";
for($i = 0; $i < sizeof($suchwort); $i++)
{
$abfrage .= "`city` LIKE '%".$suchwort[$i]."%'";
if($i < (sizeof($suchwort) - 1)) {
$abfrage .= "OR";
}
}
$db = @new mysqli('localhost', 'USER', 'PASS', 'DB');
if(mysqli_connect_errno() == 0)
{
$sql = "SELECT * FROM rechner WHERE ".$abfrage ;
$ergebnis = $db->query($sql);
echo '<table border="1">';
while($zeile = $ergebnis->fetch_object())
{
echo "<tr id='city'>";
echo "<td id='city_td'>";
echo "<b id='city'>Stadt $zeile->city</b>";
echo "</td>";
echo "</tr>";
echo "<tr>";
echo "<td>";
echo "<b id='vw'>Durschn. Windgeschwindigkeit von 11.10. - 31.03. (Windigere Zeit)</b>";
echo "</td>";
echo "<td>";
echo "<b id='vw_result'>$zeile->vw</b>";
echo " ";
echo "<b id='vw_result'>m/s</b>";
echo "</td>";
echo "</tr>";
echo "<tr>";
echo "<td>";
echo "<b id='ww'>Durschn. Windgeschwindigkeit von 01.04. - 10.10.(Weniger windige Zeit)</b>";
echo "</td>";
echo "<td>";
echo "<b id='vw_result'>$zeile->ww</b>";
echo " ";
echo "<b id='vw_result'>m/s</b>";
echo "</td>";
echo "</tr>";
echo "<tr>";
echo "<td>";
echo "<b id='pvw'>Produktion der LCG Windturbine von 11.10. - 31.03.</b>";
echo "</td>";
echo "<td>";
echo "<b id='pvw_result'>$zeile->pvw</b>";;
echo " ";
echo "<b id='pvw_result'>kWh</b>";
echo "</td>";
echo "</tr>";
echo "<tr>";
echo "<td>";
echo "<b id='pww'>Produktion der LCG Windturbine von 01.04. - 10.10.</b>";
echo "</td>";
echo "<td>";
echo "<b id='pww_result'>$zeile->pww</b>";
echo " ";
echo "<b id='pww_result'>kWh</b>";
echo "</td>";
echo "</tr>";
echo "<tr>";
echo "<td>";
echo "<b id='pjahr_result'>Erwartete Jahresproduktion in  $zeile->city</b>";
echo "</td>";
echo "<td>";
echo "<b id='pjahr_result'>$zeile->pjahr</b>";
echo " ";
echo "<b id='pjahr_result'>kWh</b>";
echo "</td>";
echo "</tr>";
}
echo "</table>";
}
$db -> close;
}
?>
</div>
<div id="yearresult">
<?php
include('yearresult.php');
?>
</div>
</section>
</body>
</html>
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 3511412677
Url: https://administrator.de/contentid/3511412677
Ausgedruckt am: 22.11.2024 um 02:11 Uhr
8 Kommentare
Neuester Kommentar
Hallo,
https://www.w3schools.com/sql/sql_like.asp
ist dafür verantwortlich.
Ersetzte das LIKE mit einem = und gib die % vor und nach dem Suchwort weg.
Die Sicherheitsaspekte in deinem Code jetzt mal außenvor gelassen!
Gruß
$abfrage .= "`city` LIKE '%".$suchwort[$i]."%'";
https://www.w3schools.com/sql/sql_like.asp
ist dafür verantwortlich.
Ersetzte das LIKE mit einem = und gib die % vor und nach dem Suchwort weg.
$abfrage .= "`city` = $suchwort[$i]";
Die Sicherheitsaspekte in deinem Code jetzt mal außenvor gelassen!
Gruß
Zitat von @Pappo1982:
Jetzt gibt es mir aber gar keine Ergebnisse mehr aus! Auch wenn diese exakt wie in der Datenbank sind. So hatte ich das nämlich schonmal!
Jetzt gibt es mir aber gar keine Ergebnisse mehr aus! Auch wenn diese exakt wie in der Datenbank sind. So hatte ich das nämlich schonmal!
Kannst du denn mal das komplette "finale" SQL Statement ausgeben hier bei dem du keine Ergebnisse mehr bekommst?
Zitat von @Pappo1982:
Das hier spuckt er mir aus wenn ich
ausgebe
SELECT * FROM rechner WHERE `city` = Hof
Das hier spuckt er mir aus wenn ich
echo ($sql);
SELECT * FROM rechner WHERE `city` = Hof
Die Spalte Hof gibt es nicht, du brauchst hier noch Anführungszeichen um den gesuchten Wert - der Query muss dann am Ende so aussehen: SELECT * FROM rechner WHERE `city` = 'Hof'
Aber bevor du weiter machst: beschäftige dich mit dem Thema Kontextwechsel - das was du hier machst ist nämlich richtig gefährlich!