Hey liebe PHP.de - Community!
Ich habe folgendes Problem:
Mein Suchscript benötigt eine geringfügige Änderung. Es soll ausschließlich nach Ergebnissen suchen, wenn alle Eingaben getätigt wurden. Ansonsten soll eine entsprechende Fehlermeldung an den Benutzer ausgegeben werden.
Hier mein Script:
Ich bin noch recht neu in Sachen PHP und das Script konnte ich in mühevoller Kleinstarbeit (auch in Zusammenarbeit mit ein paar anderen) nach langer Zeit endlich fertigstellen. Dann kam mir die Idee, dass alle Angaben zwingend notwendig sein sollen.
Im Moment sieht es allerdings wie folgt aus:
- Wenn man das Script ohne Eingaben abschickt, zeigt er mir alle Datenbankeinträge
- Man kann nach mehreren Kriterien suchen, muss aber nicht
- Desweiteren zeigt er mir Einträge, die in der Datenbank als bspw. "Straße" stehen, aufgrund der Umlaute nicht an
Ich bitte um Hilfe und freue mich auch über Ratschläge zur Optimierung meines Scriptes.
- Labushuya
Ich habe folgendes Problem:
Mein Suchscript benötigt eine geringfügige Änderung. Es soll ausschließlich nach Ergebnissen suchen, wenn alle Eingaben getätigt wurden. Ansonsten soll eine entsprechende Fehlermeldung an den Benutzer ausgegeben werden.
Hier mein Script:
PHP-Code:
<?php error_reporting(E_ALL);
$db_host = "";
$db_user = "";
$db_pass = "";
$db_name = "";
$abf = false;
if (isset($_POST["search"]) && trim($_POST["search"]) != "") {
echo "<p><br>Ihre Suche brachte folgende <b>Ergebnisse</b>!<br></p>";
if (!isset($_POST["search"])) {
echo "<p><br>Bitte füllen Sie <b>alle</b> Felder aus!<br></p>";
}
$sql = mysqli_connect($db_host, $db_user, $db_pass, $db_name)
or die("Die Datenbank konnte nicht erreicht werden!");
$abf= "SELECT * FROM ... WHERE 1=1 ";
if (isset($_POST["vname"]) && strlen(trim($_POST["vname"])) > 0) {
$abf .= " AND `vname`= '" . mysqli_real_escape_string($sql, $_POST['vname']) . "'";
echo "<p>Sie suchten in <b>\"Vorname\"</b> nach <b>".$_POST["vname"]."</b>!</p>";
}
if (empty($_POST["vname"])) {
echo "<p><hr>Das Feld <b>\"Vorname\"</b> wurde nicht verwendet!</p>";
}
if (isset($_POST["nname"]) && strlen(trim($_POST["nname"])) > 0) {
$abf .= " AND `nname`= '" . mysqli_real_escape_string($sql, $_POST['nname']) . "'";
echo "<p>Sie suchten in <b>\"Nachname\"</b> nach <b>".$_POST["nname"]."</b>!</p>";
}
if (empty($_POST["nname"])) {
echo "<p><hr>Das Feld <b>\"Nachname\"</b> wurde nicht verwendet!</p>";
}
if (isset($_POST["strnr"]) && strlen(trim($_POST["strnr"])) > 0) {
$abf .= " AND `strnr`= '" . mysqli_real_escape_string($sql, $_POST['strnr']) . "'";
echo "<p>Sie suchten in <b>\"Straße und Nr.\"</b> nach <b>".$_POST["strnr"]."</b>!</p>";
}
if (empty($_POST["strnr"])) {
echo "<p><hr>Das Feld <b>\"Straße und Nr.\"</b> wurde nicht verwendet!</p>";
}
if (isset($_POST["plz"]) && strlen(trim($_POST["plz"])) > 0) {
$abf .= " AND `plz`= '" . mysqli_real_escape_string($sql, $_POST['plz']) . "'";
echo "<p>Sie suchten in <b>\"PLZ\"</b> nach <b>".$_POST["plz"]."</b>!</p>";
}
if (empty($_POST["plz"])) {
echo "<p><hr>Das Feld <b>\"PLZ\"</b> wurde nicht verwendet!</p>";
}
if (isset($_POST["ort"]) && strlen(trim($_POST["ort"])) > 0) {
$abf .= " AND `ort`= '" . mysqli_real_escape_string($sql, $_POST['ort']) . "'";
echo "<p>Sie suchten in <b>\"Ort\"</b> nach <b>".$_POST["ort"]."</b>!</p>";
}
if (empty($_POST["ort"])) {
echo "<p><hr>Das Feld <b>\"Ort\"</b> wurde nicht verwendet!</p><hr><br>";
}
if ($sql != false and $abf != false) {
if ($result = mysqli_query($sql, $abf)) {
$anzahl = mysqli_num_rows($result);
echo "<p>Es wurden <strong>".$anzahl."</strong> Datensätze gefunden!</p>\n";
echo "<table border=\"1\">\n".
"<tr><th>Vorname</th><th>Nachname</th><th>Straße / Nr.</th><th>PLZ</th><th>Ort</th>\n";
while ($datensatz = mysqli_fetch_assoc($result)) {
echo "<tr>".
"<td>" .htmlspecialchars($datensatz["vname"])."</td>".
"<td>" .htmlspecialchars($datensatz["nname"])."</td>".
"<td>" .htmlspecialchars($datensatz["strnr"])."</td>".
"<td>" .htmlspecialchars($datensatz["plz"])."</td>".
"<td>" .htmlspecialchars($datensatz["ort"])."</td>".
"</tr>\n";
}
mysqli_free_result($result);
echo "</table>\n";
}
else
{
echo mysqli_error($sql);
echo "<hr />".$abf;
}
mysqli_close($sql);
}
else {echo "Es wurden keine verwertbaren Daten vom Formular übermittelt.\n";}
}
?>
Im Moment sieht es allerdings wie folgt aus:
- Wenn man das Script ohne Eingaben abschickt, zeigt er mir alle Datenbankeinträge
- Man kann nach mehreren Kriterien suchen, muss aber nicht
- Desweiteren zeigt er mir Einträge, die in der Datenbank als bspw. "Straße" stehen, aufgrund der Umlaute nicht an
Ich bitte um Hilfe und freue mich auch über Ratschläge zur Optimierung meines Scriptes.
- Labushuya
Kommentar