ARX: PHP-Fehler bei Sunlog-Installation

Hi Leute,

nachstehende Meldung erhalte ich, wenn ich das "SUNLOG" insatallieren möchte. Der Hersteller meint er könne mir nicht helfen, es sei ein IIS-Problem und er habe keinen IIS zur Verfügung.

Mein PHP ist leider nicht so gut, daß ich alles verstehen würde, was der in seinen Files so macht.

System Win2000, IIS, PHP 4.2.1, MySQL 3.23.51

PHP Notice: Undefined index: uid in c:\inetpub\wwwroot\sunblog\admin\security_auth.php on line 27 PHP Notice: Undefined index: user in c:\inetpub\wwwroot\sunblog\admin\security_auth.php on line 28 PHP Notice: Undefined index: password in c:\inetpub\wwwroot\sunblog\admin\security_auth.php on line 29 PHP Notice: Undefined index: status in c:\inetpub\wwwroot\sunblog\admin\security_auth.php on line 30 PHP Notice: Undefined index: lang in c:\inetpub\wwwroot\sunblog\admin\security_auth.php on line 31 PHP Warning: Cannot add header information - headers already sent in c:\inetpub\wwwroot\sunblog\admin\security_auth.php on line 34

Code-Start
require("../cfg/config.inc.php");
require("../cfg/vars.inc.php");
require("inc/vars.functions.php");

session_start();

$phpversion=str_replace(".", "", phpversion());
$phpversion=(int)$phpversion;

if($phpversion<="410"){
 $_SESSION=& $HTTP_SESSION_VARS;
}

$uid=$_SESSION["uid"];        <------Zeile 27
$user=$_SESSION["user"];
$log_pwd=$_SESSION["password"];
$userstatus=$_SESSION["status"];
$langfile=$_SESSION["lang"].".inc.php";

if(!isset($uid)){
    header("Location: security_login.php");
    exit;
}

$query=mysql_query("SELECT * FROM $tb_user WHERE id='$uid'") or die(mysql_error());
$count=mysql_num_rows($query);

if($count==0){
    header("Location: security_login.php");
    exit;
}

while($array = mysql_fetch_array($query)) {
    $out["password"]=$password;
}

if($out["password"]!=$password){
    header("Location: security_login.php");
    exit;
}
Code-Ende

Vielleicht kann mir jemand nen Tip geben in welche Richtung ich nachsehen soll.

Schönen Tag + vielen Dank im Voraus!

ARX

Bjartur.Auf.Sommerhaus

  1. nachstehende Meldung erhalte ich, wenn ich das "SUNLOG" insatallieren möchte. Der Hersteller meint er könne mir nicht helfen, es sei ein IIS-Problem und er habe keinen IIS zur Verfügung.

    Nein, das ist kein IIS-Problem (ja, sowas gibt's auch ;), es ist eigentlich gar kein Problem, sondern eine Hilfestellung von PHP.

    PHP Notice: Undefined index: uid in c:\inetpub\wwwroot\sunblog\admin\security_auth.php on line 27

    Soll heißen: 'PHP-Hinweis: Nicht definierter Index "uid" in Zeile 27.'

    $uid=$_SESSION["uid"];        <------Zeile 27

    Alles, was PHP Dir hier mitteilen möchte, ist, daß das Feld $_SESSION keinen Index (oder Eintrag) namens "uid" hat. Anders ausgedrückt: Du greifst hier auf eine nicht-initialisierte bzw. nicht-existierende Variable zu.

    Sowas tut man normalerweise nicht, weil (unter anderen Umständen) Variablen, die niemals initalisiert wurden, irgendeinen Müll enthalten. Genauer gesagt den Müll, der noch von irgendeinem vorigen Programm an der Stelle des Rechnerspeichers rumlungert, an dem jetzt diese Variable ihren Speicherplatz hat.
    Und da niemand weiß, was das für ein Müll ist, kann es auch sehr unangenehm enden, wenn man sich im Verlauf des Programms auf den anfänglichen Inhalt dieser leeren Variable verlässt.

    Mit besagten "anderen Umstände" sind hier allerdings Programme gemeint, die zum Beispiel in C geschrieben und mit einem Compiler in lauffähige Programmdateien übersetzt wurden. In PHP ist das Problem aber soweit mir bekannt nicht existent, weil Variablen von PHP beim Erstellen automatisch auf Null oder "" gesetzt werden.

    Insofern sind diese Hinweise zwar eine nette Hilfe, um stilistisch sauberen Code zu schreiben, aber sie können auch etwas nerven. "Sauber" in Deinem Fall wäre es, zuerst zu prüfen, ob $_SESSION existiert, bevor Du versuchst, daraus zu lesen:

    if (! isset($_SESSION))  // $_SESSION existiert nicht
        {
         header("Location: security_login.php");
         exit;
        };

    $uid=$_SESSION["uid"];
      [und so weiter..]

    Sinnigerweise hat der Autor Deines Skriptes so eine Abfrage schon eingebaut, nur leider an der falschen Stelle, viel zu spät:

    if(!isset($uid)){
          header("Location: security_login.php");
          exit;
      }

    Er liest also erst aus $_SESSION in $uid und fragt dann, ob $uid existiert..naja. Da kann man auch jemandem auf den Fuß trampeln und dann fragen, ob's möglicherweise weh tut :)

    Alternativ zur Code-Änderung kannst Du auch in Deiner php.ini nach einer Zeile mit dem Wörtchen error_reporting suchen und dort diese weniger wichtigen Hinweismeldungen abschalten - quasi die Lösungsvariante für faule Menschen :)

    Der zweite Fehler:

    Warning: Cannot add header information - headers already sent in c:\inetpub\wwwroot\sunblog\admin\security_auth.php on line 34

    if(!isset($uid)){
        header("Location: security_login.php");  <---- Zeile 34
        exit;
    }

    HTTP-Anfragen bzw. Antworten bestehen aus zwei Teilen, dem Kopf (header) und den eigentlichen Daten. Im Kopf werden diverse Informationen zu den Daten übertragen, zum Beispiel Änderungsdatum, Größe oder Art der Daten. Der Datenblock enthält dann zum Beispiel die eigentliche HTML-Datei.
    Mit header() kann PHP weitere Kopfzeilen einfügen; oben wird versucht, eine Weiterleitung zur Seite security_login.php auszugeben. Nun kommt aber der Kopf logischerweise vor den Daten, was wiederum bedeutet, daß wenn man erstmal angefangen hat, Daten zu senden, keine Kopfzeilen mehr einfügen kann. Und genau darüber beschwert PHP sich mit der Warnung "Cannot add header information". Die Variablen-Warnungen stehen im Datenteil der HTTP-Antwort, der Kopf ist also schon weg und header() kann dementsprechend nichts mehr zum Kopf hinzufügen.

    Dieser Fehler verschwindet deshalb von alleine, sobald Du den anderen Fehler beseitigt hast (und deshalb vor header() nichts mehr ausgegeben wird).

    Gruß,
      soenk.e

    1. Hi   soenk.e,

      wollt' mich nur für Deine Hilfe bedanken; jetzt läuft alles wunderbar!

      War so frei und habe Deine Antwort gleich an den Sunlog-Hersteller übermittelt.

      Danke Nochmal + schönen Abend/Tag!

      ARX