MySQL: leere / unvollständige Einträge

Alle weiteren Dienste, die nicht in die drei oberen Foren gehören.
Antworten
Shilong
Beiträge: 266
Registriert: 21.05.2003 19:12:37
Wohnort: Oensingen, Schweiz
Kontaktdaten:

MySQL: leere / unvollständige Einträge

Beitrag von Shilong » 12.02.2007 21:57:05

Guten Abend

Ich habe ein Problem mit mysql auf meinem vserver

Das problem sieht so aus: ein einfaches mysql INSERT INTO [..] macht ab und zu mehrere Einträge in die DB, obwohl es nur einmal aufgerufen wird. Von den Einträgen ist jeweils einer richtig, die 2-3 folgenden EInträge sind z.T. identisch, z.T. leer, z.T. halb leer. Das Problem habe ich mit mehreren verschiedenen Scripts, allerdings ist es mir noch nicht gelungen, dieses Resultat zu erzwingen.

ein beispiel ist der schnipsel

Code: Alles auswählen

elseif ($do == "confirm")
{
$sql = "INSERT INTO `friends` (`friend1` , `friend2`) VALUES ('$f1', '$f2')";
$result = mysql_query($sql) OR die(mysql_error());
$data = mysql_query("SELECT * FROM `user` WHERE id='$f1'");
$userinfo = mysql_fetch_array($data);
$nick = $userinfo['nick'];
 
echo "Du hast die Freundschaft mit " . $nick . " best&auml;tigt! <p>Deine Freunde werden auf deiner Profilseite angezeigt ;)";
}
aufgerufen als include über den link:

href='?go=friends&f1=15&f2=5&do=confirm

das gibt dann mehrere Einträge, wovon einer richtig ist - also z.B. 3 freunde, von denen 2 nicht existieren...

Ich habe keine ahnung wo ich da ansetzen soll - könnte das ein Kommunikationsproblem zwischen PHP und mysql sein?

Danke
Shilong

Benutzeravatar
dominator
Beiträge: 790
Registriert: 26.08.2003 10:05:37
Wohnort: Neuerdings meistens im Bierparadies Oberfranken

Beitrag von dominator » 12.02.2007 23:32:41

Aktiviere mal das MySQL-Logging in der my.cnf und beobachte, wie die entsprechenden Abfragen bei MySQL ankommen :idea:
gruss + viel erfolg

Michael
--
Aus aktuellem Anlass :
"Der Glubb is a Depp" - Fränkische Weisheit

Shilong
Beiträge: 266
Registriert: 21.05.2003 19:12:37
Wohnort: Oensingen, Schweiz
Kontaktdaten:

Beitrag von Shilong » 13.02.2007 18:24:13

habe ich mal gemacht, und prompt gab es lange keinen Fehler - nach ein paar minuten freude und etwa 11 testeinträgen kommt dann das in /var/log/mysql.log:


070213 18:01:04 15 Connect dbscout@localhost on
15 Init DB dbscout
15 Query SELECT * FROM user WHERE id = '9'
15 Query INSERT INTO `messages` (`subject` , `text` , `sender` , `receiver` , `date`) VALUES ('', 'fadsfdsgaewrqsdv', '5', '9', '2007-02-13 18:01:04')
15 Quit

[..]

070213 18:07:24 74 Connect dbscout@localhost on
74 Init DB dbscout
74 Query SELECT * FROM user WHERE id = '9'
74 Query INSERT INTO `messages` (`subject` , `text` , `sender` , `receiver` , `date`) VALUES ('', '556gsrdfgu6rtnb gfd ', '5', '9', '2007-02-13 18:07:24')
74 Quit

[..]

070213 18:11:13 89 Connect dbscout@localhost on
89 Init DB dbscout
89 Query SELECT * FROM user WHERE id = '6'
89 Query INSERT INTO `messages` (`subject` , `text` , `sender` , `receiver` , `date`) VALUES ('', 'fdsfadsfagadsfe', '5', '6', '2007-02-13 18:11:13')
89 Quit
90 Connect dbscout@localhost on
90 Init DB dbscout
90 Query SELECT * FROM user WHERE id = '6'
90 Query INSERT INTO `messages` (`subject` , `text` , `sender` , `receiver` , `date`) VALUES ('', '', '', '6', '2007-02-13 18:11:13')
90 Quit
innerhalb einer sekunde zwei einträge, wobei der zweite unvollständig ist - im selben testlauf hats vorher etwa 10 mal funktioniert :roll:

nepos
Beiträge: 5238
Registriert: 05.01.2005 10:08:12

Beitrag von nepos » 14.02.2007 10:18:24

Hm, das dürfte aber eher irgendwie an deinem Skript liegen. Die DB macht von sich aus sicherlich keinerlei Abfragen.

Ach ja, es hat nicht direkt mit deinem Problem zu tun, aber du solltest die Parameter für die INSERTs sauber quoten und das nicht manuell machen. Dein Code ist, zumindest was ich in dem Ausschnitt sehe, anfällig für SQL-Injection.

Shilong
Beiträge: 266
Registriert: 21.05.2003 19:12:37
Wohnort: Oensingen, Schweiz
Kontaktdaten:

Beitrag von Shilong » 14.02.2007 18:16:09

nepos hat geschrieben:Die DB macht von sich aus sicherlich keinerlei Abfragen.
Habe ich natürlich auch gedacht - andererseits macht das Script ja auch nicht nach Lust und Laune Einträge, sondern wäre konstant falsch. Ich habe das Problem mit verschiedenen Skripts und habe lange nach Fehlern gesucht und von Freunden suchen lassen, alles erfolglos. Letztendlich habe ich das ganze auf andere (test-) Server kopiert, und da funktioniert alles problemlos... daher denke ich es muss am Server liegen. Das Verhalten ist mir völlig unerklärlich, ich kenne solche nicht-reproduzierbare Fehler sonst nur von Hardware-Problemen. Davon will der Provider aber erstmal nichts wissen...

nepos hat geschrieben:Ach ja, es hat nicht direkt mit deinem Problem zu tun, aber du solltest die Parameter für die INSERTs sauber quoten und das nicht manuell machen. Dein Code ist, zumindest was ich in dem Ausschnitt sehe, anfällig für SQL-Injection.
Danke für den Hinweis, aber eeehmm... ich verstehe nicht genau was du damit meinst? Den Aufruf über einen Link? Das ist mir bewusst und nur vorübergehend so, gibt dann ein form daraus.

Shilong
Zuletzt geändert von Shilong am 15.02.2007 00:09:58, insgesamt 1-mal geändert.

nepos
Beiträge: 5238
Registriert: 05.01.2005 10:08:12

Beitrag von nepos » 14.02.2007 23:41:51

Dann solltest du dir das hier mal durchlesen: http://de.wikipedia.org/wiki/SQL-Injektion
Ein Formular ändert an der Problematik überhaupt nichts.
Eine grundlegende Regel grade bei Webskripten sollte auch immer sein: trau nie den Benutzereingaben. Jemand, der Unfug anstellen will kann dir als Parameter alles mögliche mitgeben.

Zu deinem DB-Problem an sich kann ich so leider auch nicht mehr sagen. Eventuell war es nur ein Bug in MySQL, was ich mir in der Form allerdings irgendwie nicht so ganz vorstellen kann...

Shilong
Beiträge: 266
Registriert: 21.05.2003 19:12:37
Wohnort: Oensingen, Schweiz
Kontaktdaten:

Beitrag von Shilong » 15.02.2007 00:09:05

nepos hat geschrieben:Dann solltest du dir das hier mal durchlesen: http://de.wikipedia.org/wiki/SQL-Injektion
Ein Formular ändert an der Problematik überhaupt nichts.
Danke sehr! Klar, wird aber in diesem Beispiel nur aus einem Button und hidden-Feldern bestehen - halt statt dem Link.

Ja das mit dem Bug ist so eine Sache... wenns einer wäre hätte man bestimmt davon gehört, ist ja doch recht auffällig. Denke mal es klemmt irgendwo in der Installation / Config / HW. Es handelt sich um einen vorinstallierten, gemieteten vserver, der Provider gibt keine Antwort auf Anfragen.. :roll:

Antworten