Datenbank Wert ändern

Anacondi

Erfahrenes Mitglied
Hallo .
Ich stehe gerade vor folgendem Problem:
Ich habe ein kleines Spiel.
in dem Spiel hab ich eine Radio seite, wo ich live sende.
Jetzt möchte ich gern, das der User angezeigt wird, wenn er auf der seite ist.
Das habe ich so geregelt:
PHP:
<?php
$seite = $_SERVER["PHP_SELF"];
if (basename($seite) == "radio.php")
{ $update = mysql_query("UPDATE User Set radio_seite = 1 WHERE ID = '$id'"); }
?>
das funktioniert auch.
auf der Radio seite frage ich ab, welche spieler eine 1 bei Radio_seite in der Datenbank haben.
PHP:
$ergebnis1 = mysql_query("SELECT id, Nickname, radio_seite FROM User WHERE radio_seite = '1'");
while($row1 = mysql_fetch_object($ergebnis1))
{
echo $row1->Nickname; echo " , ";
}

Also die namen der Leute, die gerade auf der Seite sind, werden angezeigt.

zu meiner Frage:
Wie stelle ich es an, bzw. wie muß die abfrage lauten, ob der spieler noch immer auf der seite ist, denn der Datenbank eintrag bleibt ja auf 1 stehen.
 
Die einfachste Variante wäre, wenn du einfach den Wert auf 0 setzt, sobald er eine andere Seite aufrufst.

PHP:
$seite = $_SERVER["PHP_SELF"];
if (basename($seite) == "radio.php")
{
   $update = mysql_query("UPDATE User Set radio_seite = 1 WHERE ID = '$id'");
} else {
   $update = mysql_query("UPDATE User Set radio_seite = 0 WHERE ID = '$id'");
}

Übrigens ich würde dir empfehlen nicht weiter mit den mysql_*-Funktionen zu arbeiten und lieber zu mysqli_* oder noch besser gleich zu PDO zu wechseln.
Dies hat den einfachen Grund, dass die mysql_*-Funktionen nicht mehr gewartet werden und bald auch entfernt werden.
 
Danke für deine Antwort.
geht leider nicht, hatte vergessen zu erwähnen, das die Radio seite im Hintergrund als 2. seite läuft, so das man auf den anderen seiten weiter spielen kann
 
Wie wäre es mit einem Timestamp, den du zusammen mit den Wert 1 setzt.
Wenn der Timestamp dann mehr als x Minuten her ist wird er nicht mehr mit angezeigt.
Also nach diesen Prinzip:
PHP:
$seite = $_SERVER["PHP_SELF"];
if( basename($seite) == "radio.php")
{
   $update = mysql_query("UPDATE User Set radio_seite = 1, radio_timestamp = now() WHERE ID = '$id' ");
}


PHP:
$ergebnis1 = mysql_query("SELECT id, Nickname, radio_seite FROM User WHERE radio_seite = '1' and TIMESTAMPDIFF(MINUTE, radio_timestamp, now() ) <= 5");
while($row1 = mysql_fetch_object($ergebnis1))
{
   echo $row1->Nickname; echo " , ";
}

An deiner Stelle würde ich mir dann auch mal Gedanken zwecks des Datenbanken Designs machen.
Vielleicht ist es Sinnvoll die ein oder anderen Felder aus der User Tabelle auszulagern.
 
Ja, Timestamp mit einem passenden Timeout ist das Stichwort, wenn es keine bessere Möglichkeit gibt. (Vielleicht kann die „Radio-Software“ es besser? Irgendwie muss die die Daten ja zum Nutzer streamen.) Andere Ansätze sind kompliziert, weil Leute nun mal verschiedene Tabs geöffnet haben und dergleichen. Du kannst die Radio-Seite dann noch alle paar Minuten per Ajax so eine Art Ping an den Server senden lassen, der den Timestamp aktualisiert. So im Sinne von: „Ich bin immer noch da.“

Dann brauchst du auch die "1" eigentlich nicht mehr. Es hören einfach alle Leute mit einem aktiven Timestamp, also einem Timestamp, der noch nicht ein bestimmtes Alter erreicht hat.


[Edit: Klarere Formulierungen.]
 
Zuletzt bearbeitet:
... (Vielleicht kann die „Radio-Software“ so was? Irgendwie muss die die Daten ja zum Nutzer streamen.) ...

Damit hast du noch etwas wichtiges angesprochen.
Verschiedene Server Software kann man auch direkt abfragen und somit die IP-Adressen der Hörer abfragen.
Wenn man dann die IP-Adresse der Nutzer speichert (aus Datenschutzstechnischen Gesichtspunkt würde ich aber nur ein Hash der IP Speichern) und diese dann mit den Adressen die vom Server kommen abgleichen.

Aber Vorsicht solche Daten (IP-Adresse) müssen nach dem der Nutzer die Seite verlassen hat wieder gelöscht werden!
 

Neue Beiträge

Zurück