maeTimmae
Erfahrenes Mitglied
Folgende Ausführung soll nicht beleidigend oder herablassend sein sondern dich über mögliche Konsequenzen aufklären, die deine Methode nach sich ziehen kannVielleicht wirkt meine Methode etwas Anfängermäßig,
PHP:
$sql = mysql_query("SELECT kw FROM `deineTab` WHERE kw='".$_POST['kw']."'") or die(mysql_error());
// zum Verständnis:
$sql = (mysql_query("SELECT kw FROM `deineTab` WHERE kw='".$_POST['kw']."'") || die(mysql_error()));
PHP:
($sql = mysql_query("SELECT kw FROM `deineTab` WHERE kw='".$_POST['kw']."'")) || die(mysql_error());
Ein Problem dabei ist, dass $_POST['kw'] völlig ungeprüft an MySQL übergeben wird. Was ist, wenn der Clientuser ein "'" eingesetzt hat? Weitergesponnen: Es geht um die Auflistung von Benutzerdaten... Was wäre, wenn der Clientuser durch ein solches Query verarbeitet wird:
SQL:
SELECT *
FROM `user`
WHERE `username` = '{$_POST['username']}' AND `password` = '{$_POST['password']}'
Code:
username = Max Mustermann
password = ' OR `password` != ';
Und schon haben wir das hier:
SQL:
SELECT *
FROM `user`
WHERE `username` = 'Max Mustermann' AND `password` = '' OR `password` != '';
Und das schlimmste ist: Niemand bekommt etwas mit, da das Query funktioniert! Sollte jedoch jemand wenige böse Absichten haben und dennoch nicht gewünschte / falsche Daten eingeben, liefert das Query einen Fehler zurück, was nach deinem Script in einer vorzeitig beendeten Ausgabe endet. Was haben wir davon? Eine Fehlernummer, die niemandem außer versierten Leuten etwas bringt und ansonsten den Umstand, dass der Clientuser von sich aus falsche Werte korrigieren muss.
Eine Speicherung des Fehlers und eine benutzerfreundliche Ausgabe, à la "Deine Daten konnten leider nicht verarbeitet werden auf Grund einer fehlerhaften Eingabe" ist sowieso viel netter
Es gibt diese netten Funktionen [phpf]mysql_real_escape_string[/phpf] und [phpf]mysql_escape_string[/phpf], die einem sämtliche Arbeit in der Hinsicht abnehmen können^^
Und zur Vollständigkeit und Performance sei noch gesagt: [phpf]mysql_num_rows[/phpf] muss wirklich nur dann verwendet werden, wenn man die genaue Anzahl an Ergebnissen schon vor dem Abruf der eigentlichen Datensätze braucht. Ansonsten reicht ein [phpf]mysql_fetch_row[/phpf] oder eine andere Fetching-Funktion aus, die man über eine break-on-return-false Schleife so lange benutzt, bis keine Datensätze mehr abgefangen werden. Ein nebenher laufender, inkrementieller Zähler, ist (wenn überhaupt notwendig) sinnvoller.
Sollte das Ergebnisarray am Ende leer sein, wissen wir dennoch, dass keine Ergebnisse vorhanden sind.
Code:
$entries = array(); $i = 0;
while ($fetch = mysql_fetch_assoc($result)) {
++$i;
$entries[] = $fetch;
}
if (empty($entries)) {
echo "keine Datensätze vorhanden";
} else {
echo "{$i} Datensätze vorhanden, die nun aufgelistet werden\n";
// Auflistung
}