• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Kein doppelter eintrag

Hab nochmal einen Neuen Kunden hinzugefügt, der schmeißt mir jetzt raus:
vname: Bugra nname: Korhan
war ja zu erwarten, aber was bringt mir das jetzt?


PHP:
$vname_test = "Bernhard";
$nname_test = "Eckel";
$result = mysql_query("SELECT * FROM ava_kunden WHERE vname='$vname_test' AND nname='$nname_test'");
if (!$result){
    die("Die Abfrage konnte nicht ausgeführt werden: " . mysql_error() . " (Fehlernr.: " . mysql_errno() . ")");
}
while ($row = mysql_fetch_array($result, MYSQL_NUM)) {
    printf("vname: %s  nname: %s", $row[5], $row[6]);  
}
mysql_free_result($result);
 
Zuletzt bearbeitet:
Jetzt weißt du, dass es diesen Eintrag gibt. Und kannst damit eine Dublette verhindern.
PHP:
$vname_test = "****";
$nname_test = "******";
$result = mysql_query("SELECT * FROM ava_kunden WHERE vname='$vname_test' AND nname='$nname_test'");
if (!$result){
    die("Die Abfrage konnte nicht ausgeführt werden: " . mysql_error() . " (Fehlernr.: " . mysql_errno() . ")");
}
if (mysql_fetch_array($result, MYSQL_NUM)) {
    echo "Es gibt einen Eintrag mit diesem Namen.";
}
mysql_free_result($result);
 
Zuletzt bearbeitet:
so hab ich das mal in meine 700zeiler eingetragen und funktioniert einwandfrei, ich danke dir wiedermal vielmals!!!
 
Es gibt einen gravierenden Fehler bei dieser Lösung! Wenn der Kunde zB. als max Mertenz eingetragen obwohl Max Mertens schon eingetragen ist, sprich wie kann man Groß und Kleinschreibung vermeiden oder zB Max Mus termann, also Leerzeichenprüfung braucht man. Kannst du mir da Tips geben?
 
ja ich zwin jetzt die Einträge nur den ersten Buchstaben groß zu machen und leerzeichen wegzumachen ;) funktioniert thx
 
das wird eine ganz schlimme Anwendung ich hoffe du machst sie nie im Internet zugänglich.

In diesem Sinne möchte ich dir, KIUNES, einen Denkanstoß geben:
Was ist wenn ein böser Client (ich z.B.) hergeht und als Vornamen ins Formular eingibt (als simpelstes Beispiel):
foo'; TRUNCATE TABLE ava_kunden;--

Dann würde dein Script diese Abfrage abschicken:
SELECT * FROM ava_kunden WHERE vname='foo'; TRUNCATE TABLE ava_kunden;--' AND nname='$nname_test'
Was passieren könnte (hängt von Servereinstellungen ab): Die Select-Abfrage wird ausgeührt, anschließend wird die Truncate-Abfrage ausgeführt, da sie mit Strichpunkt getrennt angefügt wurde und somit als weitere Query interpretiert wird. Dieser Truncate-Aufruf löscht sämtliche Einträge aus der Tabelle. Am Ende hab ich noch ein "--" gesetzt, was in MySQL einen Kommentar einleitet, d.h. alles was dahinter kommt wird als kommentar angesehen und nicht interpretiert.

Daher möchte ich dir erneut (wie in anderen Threads zuvor schon) raten, dich mit mysql injection auseinanderzusetzen.
Ein guter Start sind SQL-Injection – Wikipedia
PHP: mysql_real_escape_string - Manual
Aber auch google sollte millionen treffer liefern da es mit die größte problematik ist wenn man mit sql bzw datenbanken generell arbeitet.
 
In diesem Sinne möchte ich dir, KIUNES, einen Denkanstoß geben:
Was ist wenn ein böser Client (ich z.B.) hergeht und als Vornamen ins Formular eingibt (als simpelstes Beispiel):
foo'; TRUNCATE TABLE ava_kunden;--

Dann würde dein Script diese Abfrage abschicken:
SELECT * FROM ava_kunden WHERE vname='foo'; TRUNCATE TABLE ava_kunden;--' AND nname='$nname_test'
Was passieren könnte (hängt von Servereinstellungen ab): Die Select-Abfrage wird ausgeührt, anschließend wird die Truncate-Abfrage ausgeführt, da sie mit Strichpunkt getrennt angefügt wurde und somit als weitere Query interpretiert wird. Dieser Truncate-Aufruf löscht sämtliche Einträge aus der Tabelle. Am Ende hab ich noch ein "--" gesetzt, was in MySQL einen Kommentar einleitet, d.h. alles was dahinter kommt wird als kommentar angesehen und nicht interpretiert.

Daher möchte ich dir erneut (wie in anderen Threads zuvor schon) raten, dich mit mysql injection auseinanderzusetzen.
Ein guter Start sind SQL-Injection – Wikipedia
PHP: mysql_real_escape_string - Manual
Aber auch google sollte millionen treffer liefern da es mit die größte problematik ist wenn man mit sql bzw datenbanken generell arbeitet.

Das ist böse!!! Und das kann man mit mysql injection umgehen? Dann muss ich mich wirklich da mal dransetzen!

Aber mal so gesehen, wenn ich doch alles kleinschreibe außer den ersten Buchstanben, wenn ich doch leerzeichen, Komma,Punkt und alle anderen sonderzeichen lösche, bevor dies in die SQL Insert geht, was soll da passieren?

Dann ergäbe dein "HACK" ->
Footruncatetableavakunden
ist zwar ein scheiß Vorname, aber es passiert überhaupt NIX
 
Zuletzt bearbeitet:
jo, aber ich denk mal dass das nich die einzige stelle ist an der du user-eingaben in sql queries übernimmst, und normal will man nich alle zeichen entfernen die theoretisch in nem sql statement vorkommen können.
und das was ich da mache ist sql injection, und du willst sie verhindern
 
Ist jetzt so, du gibst ein:

mus TerMann!$%&/()=?[]_.,;

und in die Datenbank kommt:

Mustermann

Jetzt frag ich dich - Was soll mir da passieren?
 
wie gesagt, in diesem Fall gar nichts.

Aber normalerweise will man eben nicht alle Zeichen rausholen die potentiell für eine sql injection verwendet werden können. Da du dir der Problematik offensichtlich nicht bewusst warst, gilt das ja für alle deine anderen queries genauso.
 
wie gesagt, in diesem Fall gar nichts.

Aber normalerweise will man eben nicht alle Zeichen rausholen die potentiell für eine sql injection verwendet werden können. Da du dir der Problematik offensichtlich nicht bewusst warst, gilt das ja für alle deine anderen queries genauso.

Das ist richtig, danke ieuch, werde das jetzt für alle einbauen ;)
 
Das ist böse!!! Und das kann man mit mysql injection umgehen?
Nein, das ist die Injection, ich schrieb dir aber bereits, dass du dich da mal informieren sollst (ich gehe davon aus, dass bei wikipedia ein ausführlicher Artikel darüber steht).

Und ja - du kannst das natürlich von Hand machen, aber dafür hat PHP Bordmittel (je nachdem welche Version du einsetzt, entweder mit einer Funktion oder mit Platzhalter [dieser Hinweis ist unter Vorbehalt - ich kann kein PHP])
 
Mach es lieber von Hand, ist Versionsunabhängig ;)
Nein, das sind die eingebauten Funktionen, leider hat PHP da einen falschen Weg beschritten, die Version mit den Platzhaltern hätte früher dabei sein müssen. Platzhalter sind meines Wissens auch schneller. Gerade, wenn es sich um das Einfügen von Daten geht (zumindest unter Perl mit dem DBI Modul ist das so).
 
Zurück
Oben