[If / Else] Datei auslesen und aktion tätigen.

Dreameeer

Grünschnabel
Hallo liebe Community,

ich habe eine frage zu den if "befehl", ich möchte eine Seite auslesen die so aussieht:

048d6b763ac47bafa44be8718c0dee8d.png


Im Bild bin ich "Client Nick: DreameR Client UID: 626"

Ich möchte auf einer anderen Seite einen Online Status einbauen der wenn ich nicht in der Liste stehe [Machbar mit der Client UID: 626 - da diese fest ist] ein Offline bild kommt und sobald ich online bin ändert sich das Bild.

Also um es kurz zu sagen und zu beschreiben:

[clientlist.php] DreameR (626) nicht in der Liste -> [index.php] Offlinebild
[clientlist.php] DreameR (626) ist in der Liste -> [index.php] Onlinebild

[natürlich sollte es nicht nur auf eine Person beschränkt sein sondern auch mehrere Personen eintragbar sein]


Jedoch weiß ich leider nicht wie ich sowas machen kann und würde es super gern auch lernen und hoffe hier deswegen auf schnelle Hilfe :)


Beispiel:

Datei mit den Informationen:
/test/clientlist.php

Datei wo der Onlinestatus stehen soll:
/index.php


----
So sieht der Code aus der im Bild zu sehen ist.
PHP:
<?php

    require_once 'libraries/TeamSpeak3/TeamSpeak3.php';
$server = array( 
  "tsip" => "localhost",
  "tsport" => "9987",
  "ts_query_admin" => "***",
  "ts_query_password" => "***",
  "ts_query_port" => "10011"
);
try {
  TeamSpeak3::init();
$ts3_VirtualServer = TeamSpeak3::factory("serverquery://".$server["ts_query_admin"].":".$server["ts_query_password"]."@".$server["tsip"].":".$server["ts_query_port"]."/?server_port=".$server["tsport"]."&nickname=".rand());

  $max = (int) $ts3_VirtualServer['virtualserver_maxclients'];
  $now = $ts3_VirtualServer->clientCount();
  $channel = (int) $ts3_VirtualServer["virtualserver_channelsonline"];
} catch(Exception $e) {
  echo "<center><br/>Fehler!<br/>ErrorID: <b>". $e->getCode() ."</b>; Error Message: <b>". $e->getMessage() ."</b></center>;";
}

?>

PHP:
                <?php   

              

          
            echo $ts3_VirtualServer->virtualserver_clientsonline . " / " . $ts3_VirtualServer->virtualserver_maxclients;
            echo '<br />';


            //var_dump($ts3_VirtualServer->clientList());

            echo '<br />';

            foreach($ts3_VirtualServer->clientList() as $client)
            {
              echo ' Client ID: '.$client->getId();
              echo ' Client Nick: '.$client['client_database_id'];
              echo ' Client Nick: '.$client['client_nickname'];
              echo '<br />';
            } 
                ?>
 
Zuletzt bearbeitet:
Hi,

wie generiert die Liste mit den UID's sich den? werden nur alle Aktiven User auf dem TeamSpeak angezeigt?

Prüfe das ganze mit allen UID's die du z.B in einer TXT oder Datenbank hinterlegt hast.

Woher beziehst du alle UID's vom Server, die auch nicht verbunden sind?

Gruß
 
Es werden nur UID's angezeigt die auch auf den Server sind,
Das mit der txt hab ich nicht wirklich verstanden aber ich bin nicht wirklich in der Lage es in einer .txt oder Datenbank zu hinterlegen da ich mich damit überhaupt nicht auskenne :/
 
Ich habe mir nun mal die Doku von TeamSpeak 3 PHP Framework angeschaut und schnell gesehen das die UserID's schon in einer Datenbank liegen ferner ist es möglich sie Auszulesen "Doku Link".

Ich würde nun eine Function() schreiben, die mir alle aktiven id's in ein array() schreibt - natürlich nur die, die auch grade Online sind.

Nun würde ich alle Benutzer per foreach auslesen und beim Eintrag "client_database_id" mit der function Prüfen ob der User Online oder Offline ist.

Gruß
 
Leider kenne ich mich damit wirklich überhaupt nicht aus :/ sowohl mit arrays als auch mit dem Framework ...
 
Okay….
Gehen wir davon aus, dass die ID’s von allen Usern so Ausgelesen werden:

PHP:
foreach($ts3_VirtualServer->clientList() as $client)
            {
              echo $client['client_database_id']."<br />";
            }

Nun müssen wir versuchen diese Werte in einem Array zu speichern oder?
Ein einfaches Array erstellt man in der Regel vereinfacht so:

PHP:
//array erstellen
$liste = array("Oliven", "Kapern", "Ananas", "Sonnenblume");
//array ausgeben
var_dump($liste);

Möchten wir nun ein weiteren Wert im array() übergeben:

PHP:
// erstellen
$liste = array("Oliven", "Kapern", "Ananas", "Sonnenblume");
//weiteren wert dem array übergeben
$liste[] = "Apfel";
//array ausgeben
var_dump($liste);

Nun die Frage an dich, wie müssten wir nun vorgehen, um die ID's im array() zu speichern?
Ich könnte dir den Code schreiben jedoch wäre das ganze nicht sinnig!

Gruß
 
Hmm...
ich kenne mich null damit aus aber ich würde es denke ich mal so versuchen:

PHP:
foreach($ts3_VirtualServer->Clientlist() as $client)
{
    //Auslesen der User Client Database ID die zurzeit auf dem Teamspeak sind.
    echo $client['client_database_id']."<br />";
}
    //Meine Clientdatabase ID in den Array speichern?
   
$liste = array("626");

Hat aber leider nicht geklappt ...

Dann hab ich mir überlegt - Boah hinter dem $client['....'] ein array zu setzen:
PHP:
foreach($ts3_VirtualServer->clientList() as $client)
        {
           
            echo $client['client_database_id'] = array();
        }

wäre doch bestimmt voll schlau - nix da xD

Letzter versuch war dann das
PHP:
        <?php
foreach($ts3_VirtualServer->clientList() as $client)       
        $client['client_database_id'] = array();
        if(in_array("626"))
        {
            echo "DreameR is on";
        }
        else {
            echo "DreameR ist off";
        }
        ?>

aber auch das hat nicht geklappt ...
 
Hallo Dreameeer

Geh doch mal einfach deinen Code Schritt für Schritt durch, ich hab mir das Thema nicht durchgelesen, aber wenn du einfach nüchtern überlegst, was da steht sollte dir klar sein, dass das nie funktionieren kann:
1. foreach($ts3_VirtualServer->clientList() as $client) Du iterierst über alle Einträge in clientList() und hast den jeweiligen Eintrag in der Variable $client
2. $client['client_database_id'] = array() Du weist dem Feld client_database_id des jeweiligen Eintrags aus clientList ein leeres Array zu. Warum?
3. in_array("626") -> Prüft ob der Wert 626. Passt also schon von der Zahl der Parameter nicht (Siehe: http://php.net/manual/de/function.in-array.php )

Viele Grüsse
Cromon
 
Wie sollte ich denn am besten anfangen?
Mir würde einfallen sowas wie

$code = array($client['client_database_id']; aber das hilft mir ebenfalls nicht ...


wenn ich es richtig gelesen habe ist ja:

$bla = "Bla"; Eine Variable
$bla[] = "Bla"; ein Array

Müsste dann nicht $client['client_database_id']; auch ein array sein und mittels in_array auslesbar sein? o_O
 
Zuletzt bearbeitet:
Du bist schon teils auf dem richtigen Weg, wir müssen den Wert aus $client['client_database_id']; in einer Variable setzten die wir vorher schon als array(); Deklariert haben.

PHP:
//Variable  als array() deklarieren
$id = array();
    foreach($ts3_VirtualServer->clientList() as $client)
            {
              //Ids im array() speichern
             $id[] = $client['client_database_id'];

            }

//Alle Ids zum Testen ausgeben
  echo "<pre>";
  var_dump($id);
  echo "</pre>";

Du bist mit dem in_array() schon auf dem richtigen Weg


PHP:
//in_array("Was suchst du?", wie heißt deine Variabel )
if(in_array("626", $id)) {
        echo "Id vorhanden";
    } else {
        echo "Id nicht vorhanden";
    }
Mehr Infos dazu unter php.net

Jedoch bringt uns das nicht weiter da wir das ganze in einer function benötigen

PHP:
//$value ist ein wert den wir später übergeben.
function OnlineTest($value) {
//wir holen uns die Klasse & die benötigen zugansdaten
include("config.php");
//Variable  als array() deklarieren
$id = array();
    foreach($ts3_VirtualServer->clientList() as $client)
            {
              //Ids im array() speichern
             $id[] = $client['client_database_id'];

            }

if(in_array($value, $id)) {
        return TRUE;
    } else {
        return FALSE;
    }
}

Wir benötigen jedoch eine Datei Namens config.php die folgende Daten inne hat

PHP:
require_once("libraries/TeamSpeak3/TeamSpeak3.php");

$server = array(
  "tsip" => "localhost",
  "tsport" => "9987",
  "ts_query_admin" => "serveradmin",
  "ts_query_password" => "*****",
  "ts_query_port" => "10011"
);

$ts3_VirtualServer = TeamSpeak3::factory("serverquery://".$server["ts_query_admin"].":".$server["ts_query_password"]."@".$server["tsip"].":".$server["ts_query_port"]."/?server_port=".$server["tsport"]."&nickname=".rand());

Nun sind wir ja schon fast fertig.... und mir fällt auf das ich ja doch fast alles geschrieben habe :D
Jetzt holen wir uns aus der TeamSpeak3 Server Datenbank alle ID's und prüfen anhand unsere function() ob die ausgegebene ID Online ist.

PHP:
//wir holen uns die Klasse & die benötigen zugansdaten include("config.php");
foreach($ts3_VirtualServer->clientListDb($offset = null,$limit = null) as $ts3_Client)
{   
              echo ' Client Id: '.$ts3_Client['cldbid'];
              echo ' Client Nick: '.$ts3_Client['client_nickname'];
              //per function prüfen ob der User Online ist
              echo (OnlineTest($ts3_Client['cldbid']) == TRUE) ? ' Online' : ' Offline';
              echo '<br />';
}

Das ganze ist nun schnell geschrieben es können sich Logik oder Rechtschreibfehler finden :D
sollte aber funktionieren :-D

Gruß
Dominic
 
Zurück