MySQL-Daten einlesen und damit rechnen

Jens B.

Erfahrenes Mitglied
Hallo!
Ich muss zugeben ich bin nicht so gut mit PHP, ein paar Daten aus einer MySQL an Flash übergeben oder in die MySQL schreiben kann ich, viel mehr aber auch nicht. Jetzt erstelle ich grad einen Flash-Chat und brauche zum ersten mal eine etwas komplexere PHP-Funktion.

Ich habe eine Tabelle "chat_user", jeder user hat eine ID und eine Raumnummer (für einen Chatraum) . Die folgende Funktion bekommt nun also die IDs von zwei Spielern und weist ihnen einen neuen Raum zu - wenn der jeweils andere Spieler schon in einem Raum ist zieht man einfach hinterher, ansonsten soll ein neuer, freier Raum gefunden werden. Räume sind hierbei einfach natürliche Zahlen ab 1.

Zusätzlich wird unter "player_id" noch gespeichert, welcher der beiden denn zuerst in dem Raum war (0 = zuerst, 1 = zweiter).

PHP:
// sucht einen neuen Raum oder geht in den selben Raum wie der Spielpartner
function getaRoom($my_id, $your_id) {
 // In welchem Raum ist der andere Spieler grad
  $query = 'SELECT room_id from chat_user WHERE id="'.$your_id.'"';
  $result = mysql_query($query) or doError(mysql_error());
  $his_room = (int) mysql_fetch_assoc($result);
  $pl = 1;

  if($his_room == 0) {   // der andere ist noch im hauptraum, also muss ich einen raum suchen
      $pl = 0;
      $his_room = 1;
      $query2 = 'SELECT * from chat_user';
      $result2 = mysql_query($query2) or doError(mysql_error());
      
  		while ($line = mysql_fetch_assoc($result2)) {
  			if ((int) $line["room_id"] >= his_room) {
  			  $his_room = $line["room_id"] + 1;
  			}
  		}                       
  }
  
  $upd = 'UPDATE chat_user SET room_id="'.$his_room.'", player_id="'.$pl.'" WHERE user_id = "'.$my_id.'"';
  $result3 = mysql_query($upd) or doError(mysql_error());
}

Das Problem ist: jeder Spieler kommt immer in den Raum 1 und hat immer die player_id 0. Ich vermute mal, dass es irgendwas mit den eingelesenen Datentypen zu tun hat, die ich dann einfach mit Integern vergleiche - habe schon durch (int) probiert, das zu konvertieren. Aber ohne Erfolg.

Danke für eure Hilfe
jens
 
Danke schonmal Da_Chris.

Ich befürchte daran liegt es nicht - ich setze schließlich erstmal $pl = 1 und ändere es dann auf 0, wenn $his_room == 0 ist. Ich denke eher, dass da etwas mit dem Vergleich in der if schief geht - aber was genau das ist vermag ich mit meinen beschränkten PHP-Kenntnissen nicht zu sagen.

room_id hat in der MySQL übrigens den Typ bigint(20) und player_id hat smallint(6), ist das in irgendeiner Weise hilfreich? :)
 
Meines Erachtens nach kann das nicht funktionieren:
PHP:
$his_room = (int) mysql_fetch_assoc($result);

Verwende stattdessen mal folgendes:
PHP:
$his_room = mysql_num_rows($result);
 
Zurück