DB Einträge auslesen wenn 1 dann $player_on um 1 erhöhen

FBIagent

Erfahrenes Mitglied
Moin,

ich brauche einen sicherlich nicht zu langen codeschnipsel und da ich nicht so
bewandert bin in MySQL wollt ich mal fragen ob ir mal jemand einen Ansatz dazu
geben kann zu folgendem Problem:
Ich muss in der DB 'l2jdb' in der Tabelle 'character' aus jedem einzelnem
Eintrag die Spalte 'online' auslesen. Wenn diese den Wert 1 hat soll
die Variable $player_on um 1 erhöht werden. Dazu soll noch bei jedem
Eintrag bei dem die Spalte 'online' den Wert 1 hat die Spalte 'name'
ausgelesen werden und in einer Tabele ausgegeben werden.

THX im Vorraus
MFG FBIagent
 
Hi FBIagent
Hab da mal gerade was hingehämmert ... im Groben sollte das Deiner Vorstellung entsprechen:

PHP:
$result=mysql_query("SELECT * FROM 'l2jdb' WHERE online=1");
$player_on=0;
echo "Folgende User sind online:<br>";
WHILE ($row=mysql_fetch_array($result)){
   $player_on++;
   echo $row['name']."<br>";
}
echo "Insgesamt sind $player_on User online<br>";
Anstelle des ECHO kannst Du die gefundenen Namen eben auch in ein Array ect. übertragen und damit weiterarbeiten.

Hilft Dir das?

MfG
Posti
 
Hi ,

auf jeden Fall hilft mir das.

Aber fehlt da nich noch was um zur DB zu connecten. Könnte das des hier sein?

Code:
// Verbindungsinfos
$db_host="localhost";
$db_name="l2jdb";
$db_user="FBIagent";
$db_pw="";
 
$db_con = mysql_connect($db_host,$db_user,$db_pw);
mysql_select_db($db_name,$db_con);

Ich kann in deinem BSP nicht nachvollziehen aus welcher tabelle du dir den Wert online
holst. Oder doch, versucht der den Wert aus der Tablle l2jdb zu holen? l2jdb is aber die
DB und 'charactere' ist die Tabelle. Lieg ich da richtig?

Könnte das dan so aussehen?

Code:
// Verbindungsinfos
$db_host="localhost";
$db_name="l2jdb";
$db_user="FBIagent";
$db_pw="";
 
$db_con = mysql_connect($db_host,$db_user,$db_pw);
mysql_select_db($db_name,$db_con);

$result=mysql_query("SELECT * FROM 'characters' WHERE online=1"); 
$player_on=0; 
echo "Folgende User sind online:<br>"; 
WHILE ($row=mysql_fetch_array($result)){ 
$player_on++; 
echo $row['account_name']."<br>"; 
} 
echo "Insgesamt sind $player_on User online<br>";

Hierbei bekomm ich noch den Fehler:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\Programme\apachefriends\xampp\htdocs\Homepage\Player_on.php on line 22

THX im Vorraus
MFG FBIagent
 
Zuletzt bearbeitet:
FBIagent hat gesagt.:
Hi ,

auf jeden Fall hilft mir das.

Aber fehlt da nich noch was um zur DB zu connecten. Könnte das des hier sein?

Code:
// Verbindungsinfos
$db_host="localhost";
$db_name="l2jdb";
$db_user="FBIagent";
$db_pw="";
 
$db_con = mysql_connect($db_host,$db_user,$db_pw);
mysql_select_db($db_name,$db_con);

Ich kann in deinem BSP nicht nachvollziehen aus welcher tabelle du dir den Wert online
holst. Oder doch, versucht der den Wert aus der Tablle l2jdb zu holen? l2jdb is aber die
DB und 'charactere' ist die Tabelle. Lieg ich da richtig?

Könnte das dan so aussehen?

Code:
// Verbindungsinfos
$db_host="localhost";
$db_name="l2jdb";
$db_user="FBIagent";
$db_pw="";
 
$db_con = mysql_connect($db_host,$db_user,$db_pw);
mysql_select_db($db_name,$db_con);

$result=mysql_query("SELECT * FROM 'characters' WHERE online=1"); 
$player_on=0; 
echo "Folgende User sind online:<br>"; 
WHILE ($row=mysql_fetch_array($result)){ 
$player_on++; 
echo $row['account_name']."<br>"; 
} 
echo "Insgesamt sind $player_on User online<br>";

Hierbei bekomm ich noch den Fehler:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\Programme\apachefriends\xampp\htdocs\Homepage\Player_on.php on line 22

THX im Vorraus
MFG FBIagent

Hi

Jupp, hast das Alles so erkannt, wie ich das meinte.
Den DB-Connect hatte ich nicht mit reingebracht, da ich davon ausging, daß Dein Script bestimmt schon irgendwo mit der DB connectet. (Bei mir immer in einer Config.php, die die DB-Daten aus einer geschützten Datei ausliest, bzw die DB-Datei aus einem geschütztem Ordner included)

Die Warnung interpretiere ich mal so, daß die Zeile 22 die Anfrage in der WHILE-Schleife ist, wenn dem so ist, dann hat Deine Tabelle 'caracters' keine Spalte mit dem Namen 'online'.

Zur Zeilenbestimmung (also um PHP zu Tippen) nutze ich den PHPWriter von A.Weintrub ... bin mit dem Teil sehr zufrieden

Bei meinen Scripten lasse ich mit in der Testphase die Datenbank-Anfragen vor der Anfrage mittels ECHO anzeigen ... wenn dann nen Fehler erscheint (und ich nicht so dolle Englisch kann), kann ich diese Ausgabe kopieren und im PHPmyAdmin direkt an der DB testen und erhalte weitere Info's bei einem Fehler ... z.B. nicht vorhandene Spalten.

Ok, wenn der Script dann 'scharf' geschaltet wird, sollten diese Ausgaben rauskommen ... sieht auch für den User dann besser aus *g*.

Die Variable ONLINE setze ich zu Anfang auf 0 (Null) und zähle Diese bei jedem gefundenem Datensatz (der ONLINE ist) um eins herauf und gebe den Nick mittels Echo aus.

Genau so könntest Du die gefundenen Nick's der User in eine weitere Tabelle schreiben.

Die Anzahl der gefundenen Datensätzen könntest Du auch mittels
PHP:
$anzahl=mysql_num_rows($result);
herauslesen ... aber da dann eben nicht die Nick's.

Zur Datenbank connecte ich ähnlich wie Du:
PHP:
$outi=@mysql_connect($dbhost, $dbuser, $dbpass);
if (!$outi){
   echo  "Fehler ".mysql_errno."<br>Datenbank nicht erreichbar (".mysql_error().")$outi<br>";
}else{
   $outi=@mysql_select_db($dbname);
   if (!$outi){
      echo "Fehler ".mysql_errno."<br>Datenbank nicht anwählbar (".mysql_error().")$outi<br>";
   }
}
if (!$outi){
   @mysql_close();
   echo "Beende Script<br>";
   die();
}
Wenn der Server nicht erreichbar, oder die Datenbank nicht anwählbar, wird entsprechend eine Fehlermeldung ausgegeben und der Script beendet.
Das Beenden hat eher stylistische Gründe ... die ganzen Warnungen sehen halt nicht schön aus :)

MfG
Posti
 
Kann das damit denn zusammenhänge, das vieleicht nur 1 eintrag in tabelle characters ist?
oder das garkein eintrag der Spalte online eine 1 enthällt?
 
hi,
$result=mysql_query("SELECT * FROM 'characters' WHERE online=1");

fehlt ein strichpunkt:
$result=mysql_query("SELECT * FROM 'characters' WHERE online=1;");

oder täusch ich mich ?

Mfg
Andi

 
$result=mysql_query("SELECT * FROM 'characters' WHERE online=1;");
Hier steht 'characters' auch für die Tabelle oder?

Aber tuts trotzem nicht.

Gibts denn noch andere Ursachen für den oben genannten Error?

Hier nochmal der Code, damit man nicht von oben an lesen muss:

Code:
<?php
 // Verbindungsinfos
$db_host="localhost";
$db_name="l2jdb";
$db_user="FBIagent";
$db_pw="";
 
$db_con = mysql_connect($db_host,$db_user,$db_pw);
mysql_select_db($db_name,$db_con);
 
$result=mysql_query("SELECT * FROM 'characters' WHERE online=1;"); 
$player_on=0; 
 
echo "Folgende User sind online:<br>"; 
while ($row=mysql_fetch_array($result)){ 
 $player_on++; 
 echo $row['account_name']."<br>"; 
} 
echo "Insgesamt sind $player_on User online<br>";
?>

THX im Vorraus
MFG FBIagent
 
Hi

Wenn Du keinen Treffer hast (also kein User online ist) dann müsste die Fehlermeldung ok sein ... vll davor mit dem num_row abfragen, ob überhaupt Treffer vorhanden sind.

Das kannst Du aber austesten, wenn Du einfach ein oder 2 User'n das Online auf 1 setzt.

Vll kannst du auch mit
PHP:
if (!$result){
   echo "Keine User gefunden, die online sind<br>";
}
Überprüfen, ob die Anfrage Ergebnisse hat, bzw die While-Schleife nur ausfuhrst, wenn Ergebnisse vorliegen:
PHP:
if ($result){
   while ($row=mysqwl_fetch.......){
      ... mache was mit den Daten
   }
}else{
   echo "Kein User online<br>";
}
Zu dem ; in der Select-Anfrage ... hab ich noch NIE gemacht, aber jetzt, wo Du es so sagst, PHPmyAdmin packt da immer nen ; ans Ende dran.
Denke, das ist wie in PHP nur ein Befehls-Trenner ... wenn nur 1 Befehl übergeben wird, scheint das fehlende ; (anders als in PHP) ignoriert zu werden.

MfG
Posti

Hab das Ganze mal zusammenkopiert
PHP:
<?php
 // Verbindungsinfos
$db_host="localhost";
$db_name="l2jdb";
$db_user="FBIagent";
$db_pw="";
 
$db_con = mysql_connect($db_host,$db_user,$db_pw);
mysql_select_db($db_name,$db_con);
 
$result=mysql_query("SELECT * FROM 'characters' WHERE online=1;"); 
$player_on=0; 
 
echo "Folgende User sind online:<br>"; 
if (mysql_num_rows($result)!=0){
   while ($row=mysql_fetch_array($result)){ 
    $player_on++; 
    echo $row['account_name']."<br>"; 
   } 
   echo "Insgesamt sind $player_on User online<br>";
}else{
   echo "kein USer online<br>";
}
?>

PS: Du kannst anstelle des CODE auch das PHP nutzen, um dein PHP-Code entsprechend darstellen zu lassen.

CODE
Code:
$vari=mysql_query("SELECT * FROM 'liste'");

PHP
PHP:
$vari=mysql_query("SELECT * FROM 'liste'");
 
Zuletzt bearbeitet:
if (mysql_num_rows($result)!=0){
Hier gibts jetzt nen Feher bei dem vorrangegangenden BSP ich blick da garnicht mehr durch.
Vieleicht liegts an meinem Server. Hab von Apachefriends den XAMPP inclusive PHP und MySQL.
Server hab ich auch gestartet. Den online Status meines Admin Users hab ich einfach einmal auf 1
gestellt. Das ist auch der einzige User der in dieser Tabelle ist.
 
Hi

Das kann ich mir gerade nicht erklären ... komme aber gerade jetzt auch nicht an meine Files dran ... muß gerade nen Backup hoch schieben :-/

Wenn's Dir reicht, brobier ich mich morgen Abend noch mal dran, vll hab ich ja irgendwo in dem row-Befehl nen Bug drin.

MfG
Posti
 
Zurück