PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Onlineliste funktioniert nicht richtig.


R4Zz0R
17.12.2009, 17:50:38
Hallo liebe selfphp´ler

Ich bastel seit 2 oder 3 tagen schon an nem simplen code für eine onlineliste.
Diese soll später in meinem chat anzeigen wie viele user sich dort befinden.

Code dazu :



<?php
session_start();
/**
*Onlineliste v0.1
*(
*
*/
//configuration & funktionskatalog laden
include_once('../include/config.inc.php');
include_once('../include/functions.inc.php');
//aktuelle microtime
$jetzt = time();
//username
$user = addslashes($_SERSSION['user']);
//verbinden zur datenbak
condb($db);
//errorreporting fals verbindung fehlschlägt
error($report);

$sql = ("SELECT * FROM online_chat ");
if ($resultat = $db->query($sql)) {
// Antwort der Datenbank in ein Objekt übergeben und
// mithilfe der while-Schleife durchlaufen
while($daten = $resultat->fetch_object() ){
//ab hier ausgeben der spalten.
if ($daten->user == '') {
$sql = ("INSERT INTO online_chat VALUES('','".$user."','".$jetzt."')");
$db->query($sql);
echo $daten->user;

} elseif ($jetzt <($daten->time+60*1)) {

echo $daten->user;
echo $daten->time;

} elseif (($user == $daten->user) & ($jetzt != $daten->time)) {

$sql1 = ("UPDATE online_chat SET time ='" . $jetzt ."' WHERE user ='".$user."' ");

if ($result = $db->query($sql1)) {

echo $daten->user ,'<br>';
echo $daten->time;

} else {

echo 'Fehler';

}

}
}
// Speicher freigeben
$resultat->close();
} else {
// Sollten keine Datensätze enthalten sein, diese Meldung ausgeben
exit;
}
// Verbindung zum Datenbankserver beenden
$db->close();
?>



Ich habe den code schon getestet, es kommt keine fehlermeldung.
Eingetragen wird der user auch nicht wenn er nicht in der datenbank steht,
und aktualiesiert wird auch nichts wenn der aktuelle zeitstempel und der vom script übergebene icht übereinstimmen.

Was hab ich da falschgemacht bzw. wie könnte ich das besser lösen das dieser code funktioniert?
Danke schonmal für jede hilfe.
MFG
R4Zz0R

urvater
17.12.2009, 18:24:39
Wo wird $db erzeugt?
$db->query($sql)new

Um eine Instanz einer Klasse zu erzeugen, muss ein neues Objekt erzeugt und einer Variablen zugewiesen werden. Bei der Erzeugung wird das Objekt immer zugewiesen, außer wenn das Objekt einen definierten Konstruktor besitzt, der aufgrund eines Fehlers eine Exception wirft. Klassen sollten vor ihrer Instantiierung definiert werden (in manchen Fällen ist dies eine Notwendigkeit). Irgend wie vermisse ich diese Stelle in deinem Script.

R4Zz0R
17.12.2009, 18:32:30
Wo wird $db erzeugt?
$db->query($sql)Irgend wie vermisse ich diese Stelle in deinem Script.

in der funktion dbcon($db);

oO
Das wusst ich noch garnicht.

Ich schreibe im normalfall kein OOP weil ich es nicht richtig verstehe habe mich nur deshalb für mysqli entschieden weil ich es einigermaßen verstehe.

Wie kann ich denn eine neue instanz erzeugen und dieser eine variable zuweisen ?

Wäre nett wenn du mir da eine gute kurzerklärung geben könntest eventuell auch mit dem ein oder andern beispielcode.

MFG & Thx
RaZz0R

urvater
17.12.2009, 18:50:10
Ich weiß ja nicht wie du den Zugriff auf deine Datenbank steuerst.
HIER (http://de.php.net/manual/de/mysqli.query.php) findest du zumindest beide Möglichkeiten sich per mysqli mit der DB zu verbinden und eine Anfrage (Query) abzusetzen.

Ob du nun Beispiel #1 Object oriented style oder Beispiel #2 Procedural style nutzt solltest du doch eigentlich wissen.

Offensichtlich hast du eine Funktion geschrieben um eine Verbindung zur DB herstellen zu können (condb($db);). Möglicherweise erzeugst du auch eine Klasse innerhalb der Funktion. Nur wem soll die dort erzeugte Klasse zur Verfügung stehen?

R4Zz0R
17.12.2009, 18:57:51
irgentwie versteh ich das nicht was du da meinst..
und den code vom link leider auch nicht..
Verliere gerade den durchblick lass uns bitte mal ein kleines beispiel durchgehen das ich auf die richtige spur komme.
/EDIT/
$db innerhalb der funktion ist übrigens global
Steht also (wenn ich grad nicht falsch liege )
allen zur verfügung
/EDIT/