Zitat von N4N0
Beitrag anzeigen
Suche mit mehreren Eingabefeldern
Einklappen
X
-
-
@ wahsaga
Ich verstehe nicht, worauf du mit deiner Aussage über den mysqli_escape_string hinaus willst?
Desweiteren: Ich habe doch bereits anhand des empty() geprüft, ob besagte Werte leer sind? Wieso soll ich das nochmal tun? Und wie soll diese Teil-Bedingung aussehen?
@ Quetschi:
Danke, aber solche Kommentare kannst du dir getrost verkneifen. Zumal ich in meinem allerersten Beitrag darüber aufgeklärt habe, dass ich ein Anfänger bin. Ich lasse mich eben nicht so leicht von etwas abschrecken, nur weil es nicht gleich funktioniert. In Bücher habe ich auch schon geschaut. Da mir das allerdings nur bedingt weitergeholfen hat, bin ich hierher gekommen, in der Hoffnung, hier Hilfe zu finden.
Da haben solche Kommentare nichts verloren!RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
Kommentar
-
Einer dieser Blöcke müsste in etwa so aussehen:
PHP-Code:if (isset($_POST["vname"]) && !empty($_POST['vname'])) {
$abf .= " AND `vname`= '" . mysqli_real_escape_string($sql, $_POST['vname']) . "'";
}
Kommentar
-
Zitat von mermshaus Beitrag anzeigenEiner dieser Blöcke müsste in etwa so aussehen:
PHP-Code:if (isset($_POST["vname"]) && !empty($_POST['vname'])) {
$abf .= " AND `vname`= '" . mysqli_real_escape_string($sql, $_POST['vname']) . "'";
}
RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
Kommentar
-
Zitat von N4N0 Beitrag anzeigenIch verstehe nicht, worauf du mit deiner Aussage über den mysqli_escape_string hinaus willst?
Desweiteren: Ich habe doch bereits anhand des empty() geprüft, ob besagte Werte leer sind? Wieso soll ich das nochmal tun?Code:AND foo = "wert"
Und wie soll diese Teil-Bedingung aussehen?I don't believe in rebirth. Actually, I never did in my whole lives.
Kommentar
-
Zitat von N4N0 Beitrag anzeigenDa haben solche Kommentare nichts verloren!Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
Schön - etwas Geschichte kann ja nicht schaden.
Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!
Kommentar
-
Zitat von N4N0 Beitrag anzeigenDanke für den Hinweis! Jetzt gleich die nächste Frage: Dass $sql mit dort drin steht sorgt dann dafür, dass das Script nicht mehr für SQL_Injection anfällig ist? Ich dachte, das wäre es vorher schon gewesen?
PHP: mysqli::real_escape_string - ManualIhr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
Schön - etwas Geschichte kann ja nicht schaden.
Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!
Kommentar
-
Leute vielen Dank für eure Hilfe! Das Script macht nun, was es soll.
Allerdings bringt es mir alle Datenbankeinträge, wenn ich jedes Feld
leer lasse und auf "Suchen" klicke.
PHP-Code:<?php error_reporting(E_ALL);
$db_host = "";
$db_user = "";
$db_pass = "";
$db_name = "";
$abf = false;
if (isset($_POST["search"])) {
echo "<p><br /></p><hr /><hr />Anfrage - Check (1/3)<hr /><hr /><br />";
$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"]) && !empty($_POST['vname'])) {
$abf .= " AND `vname`= '" . mysqli_real_escape_string($sql, $_POST['vname']) . "'";
}
if (empty($_POST["vname"])) {
echo "<p><br /></p><hr /><hr />Das Feld Vorname wurde nicht verwendet!<hr />";
}
if (isset($_POST["nname"]) && !empty($_POST['nname'])) {
$abf .= " AND `nname`= '" . mysqli_real_escape_string($sql, $_POST['nname']) . "'";
}
if (empty($_POST["nname"])) {
echo "<hr />Das Feld Nachname wurde nicht verwendet!<hr />";
}
if (isset($_POST["strnr"]) && !empty($_POST['strnr'])) {
$abf .= " AND `strnr`= '" . mysqli_real_escape_string($sql, $_POST['strnr']) . "'";
}
if (empty($_POST["strnr"])) {
echo "<hr />Das Feld Straße und Nr. wurde nicht verwendet!<hr />";
}
if (isset($_POST["plz"]) && !empty($_POST['plz'])) {
$abf .= " AND `plz`= '" . mysqli_real_escape_string($sql, $_POST['plz']) . "'";
}
if (empty($_POST["plz"])) {
echo "<hr />Das Feld PLZ wurde nicht verwendet!<hr />";
}
if (isset($_POST["ort"]) && !empty($_POST['ort'])) {
$abf .= " AND `ort`= '" . mysqli_real_escape_string($sql, $_POST['ort']) . "'";
}
if (empty($_POST["ort"])) {
echo "<hr />Das Feld Ort wurde nicht verwendet!<hr /><hr /><p><br /><br /></p>";
}
if ($sql != false and $abf != false) {
echo "<hr /><hr />Verarbeitung - Check (2/3)<hr />";
if ($result = mysqli_query($sql, $abf)) {
echo "<hr />Ausgabe - Check (3/3)<hr /><hr /><p><br /></p>";
$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";}
}
?>
AND foo = "wert"
ins Spiel, richtig?RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
Kommentar
-
Zitat von N4N0 Beitrag anzeigenAllerdings bringt es mir alle Datenbankeinträge, wenn ich jedes Feld leer lasse und auf "Suchen" klicke.
Hier kommt dann wohl
AND foo = "wert"
ins Spiel, richtig?
Das, was du hier anfügst:
PHP-Code:if (isset($_POST["vname"]) && !empty($_POST['vname'])) {
$abf .= " AND `vname`= '" . mysqli_real_escape_string($sql, $_POST['vname']) . "'";
}
Wenn du gar nicht suchen möchtest, wenn alle Felder leer gelassen wurden – dann musst du das natürlich noch extra prüfen, und in dem Fall dann gar nicht erst eine Datenbank-Abfrage machen, sondern stattdessen nur eine Fehlermeldung ausgeben o.ä.I don't believe in rebirth. Actually, I never did in my whole lives.
Kommentar
-
Gibt's da nicht noch eine andere Möglichkeit? Im Sinne von: Ich ändere einfach ein paar schon vorhandene Dinge, wie beispielsweise ...
PHP-Code:$abf= "SELECT * FROM ... WHERE 1=1 ";
RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
Kommentar
-
Was willst du denn machen, wenn alle Felder leer sind? Wenn du dann gar nicht erst in der Datenbank suchen willst, dann ist es ja wohl sinnfrei, an der Abfrage etwas zu ändern – das musst du dann schon vorher abfangen.
Alle Felder leer -> Meldung an den Benutzer,
andernfalls: Datenbankabfrage aus den übergebenen Werten zusammenbauen.I don't believe in rebirth. Actually, I never did in my whole lives.
Kommentar
-
Im Moment ist es so, dass wenn alle Felder leer sind und ich auf Suchen klicke, er mir ALLE Einträge in der Datenbank listet. Jetzt wollte ich einen Schritt in die andere Richtung machen und das Script so abändern, dass man alle Angaben machen muss, ansonsten der Hinweis kommt, dass "Feld XY auszufüllen" ist. Nur mit der Realisierung hapert es etwas.
// EDIT
Also ich habe jetzt mehrere Stunden (sieht man wahrscheinlich) damit zugebracht, Tutorials zu suchen und Bücher zu wälzen. Dies hat mir insofern geholfen, mein Script minimal zu verfeinern. Ich habe mich zudem auch daran orientiert, was du zu mir gemeint hast (Zitat "Änderung vor der Abfrage"). Allerdings besteht mein Problem (s. o.) leider immer noch. Hier der Code:
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";}
}
?>Zuletzt geändert von N4N0; 07.02.2015, 02:07.RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
Kommentar
-
Wie gesagt: Eine Variante wäre es, eine Zählervariable in jedem if-Block, der einen Wert auf „ist gesetzt und nicht leer“ prüft, um 1 zu erhöhen. Entspricht der Wert nach allen Checks der Anzahl der Felder, sind alle Felder gesetzt und nicht leer. Ansonsten nicht.
Kommentar
Kommentar