Brauche hilfe bei einem PHP script

OsirisT

Grünschnabel
Ich Nutze ein Php script das den Online Status eines nicks aus der Datenbank ausliest und dann passend ein Online bild wiedergibt.
Bei dem Script scheint aber leider ein Fehler drin zu sein da er mir nur immer das Offline Bild einsetzt !!

Hier der Quelltext des php scriptes

PHP:
<?php

/* ************************************************** ****************** 

I suggest calling this script via a html img tag 
<img src="http://your.host.here/nickinfo.php?nick=Your_nick&number=0" border="0" alt="" width="88" height="27"> 

************************************************** ****************** */

$dbhost = "";
$dbuser = "";
$dbpass = "";
$dbname = "";

mysql_connect($dbhost, $dbuser, $dbpass) or die("An error occurred while connecting to the database. Context: connect.");
mysql_select_db($dbname) or die("An error occurred while connecting to the database. Context: select database.");


function returnOfflinejpg() {
$im = ImageCreateFromgif ("img/offline.jpg");
if (!$im) { 
die("Error while loading Image"); 
}
Header("Content-type: image/jpeg");
Imagejpeg($im);
}

function returnOnlinejpg() {
$im = ImageCreateFromgif ("img/online.jpg");
if (!$im) { 
die("Error while loading Image"); 
}
Header("Content-type: image/jpeg");
Imagejpeg($im);
}

function Nickinfo($nick,$number) {
$result = mysql_query ("SELECT online FROM user WHERE user.nick = '$nick' ")
or die("Database query failure");
$line = mysql_fetch_array($result, MYSQL_ASSOC);

if($numbers) {
if($line["online"] == "Y") echo "1";
else echo "0";
} else {
if($line["online"] == "Y") returnOnlinejpg();
else returnOfflinejpg();
}
}


if ($number == '1') {
Nickinfo($nick,true);
} else {
Nickinfo($nick,false);
}
?>
Wo könnte hier der Fehler sein kann mir wer helfen!
 
Bist du dir denn sicher, dass in der Datenbank User eingetragen sind, die online sind?

Was mich aber generell etwas irritiert ist, dass die Funktion Nickinfo mit $info und $number aufgerufen wird, dann aber später if($numbers) da steht. Soweit ich das sehen kann, muss das nicht direkt zum beschriebenen Fehler führen, aber es kommt mir doch etwas komisch vor.
 
wo kommt denn $nick überhaupt her?

Rück das Script mal bitte gescheit ein, die IF's sind echt schwer zuzuordnen.

error_reporting(E_ALL);

an den Anfang
 
Mal vom numbers abgesehen, kann es sein dass du in der Datenbank ein "y" statt eines "Y" stehen hast? Wandel doch alles in Großbuchstaben (alternativ kannst du auch Kleinbuchstaben verwenden) um, so kannst du diese Fehlerquelle mal ausschalten.
PHP:
if($number) {
if(strtouper($line["online"]) == "Y") echo "1";
else echo "0";
} else {
if(strtouper($line["online"]) == "Y") returnOnlinejpg();
else returnOfflinejpg();
}

Alternativ versuch mal, die Abfrage auf Nein umzuformen und schau, ob dann immer das Online-Bild angezeigt wird. Kann ja auch sein, dass du deinen Online-Status anders speicherst.


Der Doc!
 
Also das mit dem kleinen y hab ich versucht geht auch nicht! In der Datenbank werden die user richtig eingetragen. Es wird ja wenn ich im Browser fenster diese url eingebe
http://meineaddi.de/nickinfo.php?nick=nickname laut dem Script der user aus der datenbnk abgefrage und fasl der nick da ist dann das online gif angezeigt nur leider zeigt er mir komischerweise immer das offline gif an obwohl der nick richtig drin ist und auch die korrekte Tabelle abgefragt wird!
 
Mal nur so ne Frage, ist bei dir in PHP register_globals auf on gesetzt? Wenn nein, kriegst du in der Variable $nick nichts zurück, PHP gibt die Eingaben dann nur im jeweiligen Systemarray zurück (in deinem Fall also $_GET['nick']).

Wenn das der Fall ist füg einfach ganz am Anfang die Zeile
PHP:
$nick = $_GET['nick'];
ein, dann sollte der Nick auf jeden Fall in der Variable vorhanden sein.


Der Doc!
 
Erst mal muss mich total bedanken das ihr euch für mein Problem zeit nehmt leider bin noch neu auf dem PHP gebiet drum hab ein klein wenig nachsicht wenn ich nicht alle ausdrücke von euch verstehe aber ich geb mein bestes !
 
so ich hab das jetzt so eingefügt und getestet leider ohne ergebniss der teil steht jetzt bei mir so drin

PHP:
function Nickinfo($nick,$number) {
       $nick = $_GET['nick'];
       $result = mysql_query ("SELECT online FROM user WHERE user.nick = '$nick'")
       or die("Database query failure");
       $line = mysql_fetch_array($result, MYSQL_ASSOC);
       
	if($number) {
	if($line["online"] == "Y") echo "1";
	else echo "0";
	} else {
	if($line["online"] == "Y") returnOnlinejpg();
	else returnOfflinejpg();
	}
 
Die Zeile mit $_GET gehört viel weiter obem außerhalb aller Funktionen. Ich fass mal deinen Code zusammen:
PHP:
<?php

/* ************************************************** ****************** 

I suggest calling this script via a html img tag 
<img src="http://your.host.here/nickinfo.php?nick=Your_nick&number=0" border="0" alt="" width="88" height="27"> 

************************************************** ****************** */
$nick = $_GET['nick'];
$number = $_GET['number'];
$dbhost = "";
$dbuser = "";
$dbpass = "";
$dbname = "";

mysql_connect($dbhost, $dbuser, $dbpass) or die("An error occurred while connecting to the database. Context: connect.");
mysql_select_db($dbname) or die("An error occurred while connecting to the database. Context: select database.");


function returnOfflinejpg() {
 $im = ImageCreateFromgif ("img/offline.jpg");
 if (!$im) { 
  die("Error while loading Image"); 
 }
 Header("Content-type: image/jpeg");
 Imagejpeg($im);
}

function returnOnlinejpg() {
 $im = ImageCreateFromgif ("img/online.jpg");
 if (!$im) { 
  die("Error while loading Image"); 
 }
 Header("Content-type: image/jpeg");
 Imagejpeg($im);
}

function Nickinfo($nick,$number) {
 $result = mysql_query ("SELECT online FROM user WHERE user.nick = '$nick' ") or die("Database query failure");
 $line = mysql_fetch_array($result, MYSQL_ASSOC);

 if($number) {
  if($line["online"] == "Y") echo "1";
  else echo "0";
 } else {
  if($line["online"] == "Y") returnOnlinejpg();
  else returnOfflinejpg();
 }
}

if ($number == '1') {
 Nickinfo($nick,true);
} else {
 Nickinfo($nick,false);
}
?>

So aus meiner Sicht sollte der Code eigentlich gehen wenn die Datenbank richtig bestückt ist. Kann das aber nicht testen da ich hier keinen Zugriff auf meinen Server habe. Wenn sich bis morgen Mittag nichts getan hat (Code passt oder jemand anders hatr was gefunden) teste ich das ganze nochmal und melde mich wieder.

BTW: Gewöhn dir an, den Code einzurücken, erhöht die Lesbarkeit und verbessert die Fehlersuche.


Der Doc!
 
Hallo DrSoong wie genau meinst du das mit einrücken damit kann ich leider nix anfangen *schähm* aber wenn ich weiß was gemeint ist mach ich das natürlich.

//edit

Hey DrSoong Jetzt muss ich dich auf ein Bierchen einladen es geht das hat noch gefehlt *gg* Danke dir für die Mühe Ich werd das Forum hier mit freunden weiter empfehlen!!

Klasse
 
Zurück