Script wird 2 mal ausgeführt - wieso?

Jens B.

Erfahrenes Mitglied
Moin

Ich probieren grade, eine Art Terminplaner zu programmieren. Dabei kann man sich für irgendwelche Events "bewerben" und wird dann vom Leiter endweder für das Event zugelassen oder halt nicht. Das ganze geht mit MYSQL.

Bis jetzt hat alles auch super funktioniert. Jetzt möchte ich aber die bewerben-Funktion schreiben... das ganze Funktioniert auch super, nur irgendwie wird das Script 2 mal ausgeführt Wieso?

Gewünschte ausgabe ist das: &name0=löffel&klasse0=Priester
Aber es kommt das: &name0=löffel&klasse0=Priester&name1=löffel&klasse1=Priester

Hier das Script:

PHP:
if($modus == "Bewerben") { // modus wird per GET übergeben
  $name = $HTTP_GET_VARS["name"]; // der name des bewerbers
  $id = $HTTP_GET_VARS["id"]; // die ID des events
  
// jeder bewerber hat sich vorher schon registriert und dort eine "klasse" angegeben. diese
// soll mit in den speicher, also wird die hier noch schnel abgefragt
  $klassenfrage = "SELECT klasse FROM member WHERE name LIKE '$name'";
  $klassenergebnis = mysql_query($klassenfrage);

  while($clsrow = mysql_fetch_object($klassenergebnis))
  {
    $klasse = $clsrow->klasse;
  }
  
//jetzt werden die bereits beworbenen abgefragt. angemeldete ist ein simpler counter
  $abfrage = "SELECT * FROM raids WHERE id LIKE '$id'";
  $ergebnis = mysql_query($abfrage);

  while($row = mysql_fetch_object($ergebnis))
  {
    $angemeldet = $row->anmeldungen;
    $angemeldete = $row->angemeldete;
  }

///////// DIESER TEIL WIRD ANSCHEINEND 2 MAL AUSGEFÜHRT 
  $anfrage = "UPDATE raids Set anmeldungen = '$angemeldet&name$angemeldete=$name&klasse$angemeldete=$klasse' WHERE id = '$id'";
  $angemeldete += 1;
  $angefrage = "UPDATE raids Set angemeldete = '$angemeldete' WHERE id = '$id'";
  $eintragen = mysql_query($anfrage);
  $eingetragene = mysql_query($angefrage);

  echo "result=1";
}

Weiß jemand, was ich falsch mache?

LG
jens
 
PHP:
  $name = $HTTP_GET_VARS["name"]; // der name des bewerbers
[…]  
  $klassenfrage = "SELECT klasse FROM member WHERE name LIKE '$name'";
  $klassenergebnis = mysql_query($klassenfrage);
Achtung, das schreit ja geradezu nach einer SQL-Injection! Denk daran, dass man von außerhalb (Dateien, Benutzereingabe) kommenden Daten nie nie nie vertrauen darf :) Besser wäre folgendes:
PHP:
  $name = $_GET['name'];
[…]
  $klassenfrage = 'SELECT `klasse` FROM `member` WHERE `name` LIKE `'.mysql_real_escape_string($name).'`';

PHP:
  $abfrage = "SELECT * FROM raids WHERE id LIKE '$id'";
  $ergebnis = mysql_query($abfrage);
Selbe Problematik. Hier könnte man aber statt mit [phpf]mysql_real_escape_string[/phpf] auch mit [phpf]intval[/phpf] arbeiten. Für die folgenden zwei Update-Querys gilt dasselbe (dort wäre eine SQL-Injection sogar noch verheerender, da Daten durch böswillige Benutzereingaben überschrieben werden könnten).

Zum eigentlichen Problem kann ich jetzt leider nichts beitragen, aber das konnte ich einfach nicht unerwähnt lassen :)
 
Hrhr, ich nehm mal an dass ne SQL-injektion das is, dass man einfach oben in die Linkzeile guckt und dann die Werte ändert um zu hacken? das wird nicht so sein, denn die eigentliche PHP-Seite wird nicht angezeigt. Ich mache das ganze über Flash, der PHP-Script is nur die Verbundung zwischen Flash und MySQL
 
Trotzdem – externe Daten bleiben externe Daten. Es spricht ja nichts dagegen, dass jemand das Script auch so aufruft. Schaden kann eine Absicherung jedenfalls nie.
 
Zurück