diverslung: Probleme mit Netsape 4

Hallo allerseits!

Ich habe folgendes Problem:

<?php
session_start();
include 'sessionhelpers.inc.php';

$sql = "SELECT
    UserName,
    UserPass,
    UserMail,
    UserSex,
    Vorname,
    Nachname
FROM
    users
WHERE UserSession='".session_id()."' LIMIT 1";

$sth = mysql_query($sql) or die (mysql_error());
// bis hierher klappts: echo $sth; schreibt "Resource id #3"
// aber: var_dump(mysql_num_rows($sth)); schreibt "int(0)"

$result = mysql_fetch_assoc($sth);

// ab hier passiert nix mehr:
// echo $result; schreibt z.B. im IE "Array", in NS4 nichts
// if (!$result) {echo 'nix';}; schreibt in NS4 "nix"
// var_dump($result); schreibt "bool(false)"

$UserName = $result['UserName'];
$UserPass = $result['UserPass'];
$UserMail = $result['UserMail'];
$UserSex = $result['UserSex'];
$Vorname = $result['Vorname'];
$Nachname = $result['Nachname'];

// mit $result = mysql_fetch_array($sth); und entsprechenden Veränderungen funktionierts auch nicht
// mit $result = mysql_fetch_row($sth); und entsprechenden Veränderungen funktionierts auch nicht
?>

obiges Script liest einen Datensatz aus meiner Datenbank und gibt sie als PHP-Variablen aus. In allen neueren Browser klappt das ohne Probleme - nur Netscape 4 scheint die Variablen nicht belegen zu wollen.
Ich habe keine Ahnung, wo das Problem liegen könnte: keine Fehlermeldungen - nichts! Wie kann es überhaupt sein, dass Browser solch serverseitige Scripte unterschiedlich interpretieren???

Vielleicht hat von Euch jemand 'ne Idee
Danke im Voraus

  1. Hallo,

    Wenn es sich um ein browserproblem handelt wäre der Code, den der Browser tatsächlich verarbeitet (sprich: HTML) sinnvoller.

    obiges Script liest einen Datensatz aus meiner Datenbank und gibt sie als PHP-Variablen aus. In allen neueren Browser klappt das ohne Probleme - nur Netscape 4 scheint die Variablen nicht belegen zu wollen.

    Das Problem scheint also am Formular zu liegen.

    Allerdings eine Frage: Warum Netscape 4 noch unterstützen? Hast du noch so viele Besucher die diesen Browser verwenden?
    Wenn nicht rate ich dir, die Unterstützung dafür einfach zu vergessen. Netscape 4 ist schon lange tot.

    Ich habe keine Ahnung, wo das Problem liegen könnte: keine Fehlermeldungen - nichts! Wie kann es überhaupt sein, dass Browser solch serverseitige Scripte unterschiedlich interpretieren???

    Kann nicht, der browser macht vermutlich einen Fehler bei der Interpretierung des Formulars.

    Gruß;

    1. Hallo,

      erstmal Danke für die Antwort, aber
      nischt iss mit Formular...

      auch, wenn ich sämtlichen weiteren Quelltext weglasse und nur mit var_dumb prüfe - der Fehler bleibt der selbe.

      1. Hi,

        auch, wenn ich sämtlichen weiteren Quelltext weglasse und nur mit var_dumb prüfe - der Fehler bleibt der selbe.

        Die Daten kommen doch wohl vom Browser und bestimmte Browser werden sie über Dein Formular nicht so gesendet haben, wie Du es erartest. Prüfe das Formular und was zurückgegeben wird.

        freundliche Grüße
        Ingo

        1. Hi,

          auch, wenn ich sämtlichen weiteren Quelltext weglasse und nur mit var_dumb prüfe - der Fehler bleibt der selbe.
          Die Daten kommen doch wohl vom Browser und bestimmte Browser werden sie über Dein Formular nicht so gesendet haben, wie Du es erartest. Prüfe das Formular und was zurückgegeben wird.

          freundliche Grüße
          Ingo

          Hallo Ingo,

          ich stehe gerade auf der Leitung: wie bitte meinst Du das mit dem Formular?
          Ich habe hier kein Formular verwendet. Die Daten existieren ja bereits in der Mysql-Datenbank und da kann es keine Fehler/Fehleintragungen geben. Das Script soll diese Daten lediglich auslesen und als Variablen zur Verfügung stellen - eine absolute Standard-Funktion.

          Also wie gesagt: Wenn ich den Quelltext genau so wie er obig ist, als PHP-Datei speichere und im NS4 ausführe, dann ergeben sich die erwähnten (und im Quelltext oben auskommentierten) Symptome.

          Ich geb' mir gleich die Kugel: Es muss doch schonmal jemand eine ähnliche Funktion geschrieben haben, die auch in NS4 funktioniert.

          Hilfe!

          1. Hi,

            ich stehe gerade auf der Leitung: wie bitte meinst Du das mit dem Formular?
            Ich habe hier kein Formular verwendet. Die Daten existieren ja bereits in der Mysql-Datenbank und da kann es keine Fehler/Fehleintragungen geben.

            Bist Du sicher? Und wie kamen die darein? Wohl kaum per PHPmyAdmin, oder?

            Also wie gesagt: Wenn ich den Quelltext genau so wie er obig ist, als PHP-Datei speichere und im NS4 ausführe

            Ein Browser führt kein PHP-Script aus. Er ruft es auf und übergibt ggfls. Daten an das Script. Diese musst Du prüfen - was kommt warum vom Browser an?

            freundliche Grüße
            Ingo

            1. Hi Ingo,

              ehrlich gesagt versteh ich nicht, was Du meinst.
              Natürlich habe ich irgendwann mit einem Formular Daten in die Datenbank geschrieben, aber das kann lange her sein und ist mit den verschiedensten Browsern geschehen. Den Daten ist doch egal, mit welchem Formular sie in die Datenbank geschrieben wurden:
              In der Datenbank liegen doch nur reine strings oder integer-Werte, die ich im Übrigen immer auch in PHPmyAdmin kontrolliere. Wie sollen da Fehler entstehen??? - zumal ja alle anderen Browser das Auslesen problemlos über die Bühne bringen.

              Also nochmal: Die Daten existieren in der Datenbank und sind fehlerfrei. Es handelt sich lediglich um eine hart codierte mysql-Abfrage innerhalb einer PHP-Datei.

              Ein Browser führt kein PHP-Script aus. Er ruft es auf und übergibt ggfls. Daten an das Script.

              Das ist mir schon klar und doch scheint es dann Unterschiede in der Aufruf-Routine zu geben.

              1. Moin!

                Also nochmal: Die Daten existieren in der Datenbank und sind fehlerfrei. Es handelt sich lediglich um eine hart codierte mysql-Abfrage innerhalb einer PHP-Datei.

                Trotzdem kriegt es der NS4 nicht hin, sie auszugeben.

                Daraus folgt zwingend: Irgendetwas unterscheidet sich beim Aufruf zwischen dem NS4 und anderen Browsern.

                Und genau diesen Unterschied herauszufinden ist deine Aufgabe.

                Da aber alle Browser mit dem Server nur HTTP sprechen können, und das Skript ja offenbar in beiden Fällen ausgeführt wird, kann der einzige Unterschied in den Aufrufen nur in den vom Browser übermittelten Daten liegen.

                Also in den Werten, die dir in $_GET, $_POST und $_COOKIE zur Verfügung stehen.

                Lass dir diese drei Arrays mit var_dump zusätzlich am Skriptanfang ausgeben, und vergleiche sie. Du wirst vermutlich Unterschiede entdecken. Und diese Unterschiede sind dann der Grund für das unterschiedliche Verhalten deines Skripts.

                Ach ja, noch zu deiner Bemerkung hier: https://forum.selfhtml.org/?t=142723&m=927342
                "Mit Cookies arbeite ich nicht und die aktuelle Session liest selbst der NS 4 per session_id() problemlos aus."

                Natürlich arbeitest du mit Cookies! PHP nutzt Cookies standardmäßig zur Realisierung der Session, also arbeitest du mit Cookies - wenngleich dir das nicht unbedingt bewußt ist. Es wäre dir bewußt, wenn du PHP bewußt so eingestellt hättest, dass absichtlich KEINE Cookies verwendet werden würden.

                Da du aber, entgegen deiner Annahme, doch mit Cookies arbeitest, hat das Browserverhalten bei Cookies natürlich auch Auswirkungen auf das Verhalten deines Skriptes.

                - Sven Rautenberg

                --
                "Love your nation - respect the others."
                1. Hallo und Danke für die Hilfe!

                  Lass dir diese drei Arrays mit var_dump zusätzlich am Skriptanfang ausgeben, und vergleiche sie. Du wirst vermutlich Unterschiede entdecken. Und diese Unterschiede sind dann der Grund für das unterschiedliche Verhalten deines Skripts.

                  Hab ich gemacht und siehe da:
                  var_dump($_GET); schreibt überall "array(0) { }"
                  var_dump($_POST); schreibt überall "array(0) { }"
                  var_dump($_COOKIE); schreibt im IE "array(1) { ["PHPSESSID"]=> string(32) "0024a438352d8eb6622474127801c05a" }" und bei NS 4 "array(0) { }"

                  Natürlich arbeitest du mit Cookies! PHP nutzt Cookies standardmäßig zur Realisierung der Session, also arbeitest du mit Cookies - wenngleich dir das nicht unbedingt bewußt ist.
                  Da du aber, entgegen deiner Annahme, doch mit Cookies arbeitest, hat das Browserverhalten bei Cookies natürlich auch Auswirkungen auf das Verhalten deines Skriptes.

                  Das wußte ich nicht und daher mein Fehler:
                  In meinem NS 4 waren Cookies deaktiviert!!!
                  (Isch schämme misch..)

                  Solch eine Offenbahrung noch kurz vorm Fest  -
                  Danke für Eure Hilfe Jungs!
                  Wünsche Euch alle eine besinnliche Weihnachtszeit.

                  1. Hi,

                    Das wußte ich nicht und daher mein Fehler:
                    In meinem NS 4 waren Cookies deaktiviert!!!
                    (Isch schämme misch..)

                    Solch eine Offenbahrung noch kurz vorm Fest  -

                    dann gleich die nächste Offenbarung: auch in anderen (aktuellen) Browsern lassen sich Cookies deaktivieren. Es sollte Deine Aufgabe sein, dafür zu sorgen, dass die Session dann in der URL übertragen wird. Dies geschieht bei HTML normalerweise automatisch, aber bei generierten Ausgaben musst Du die Konstante SID nutzen.

                    freundliche Grüße
                    Ingo

                    1. Hi,

                      dann gleich die nächste Offenbarung: auch in anderen (aktuellen) Browsern lassen sich Cookies deaktivieren. Es sollte Deine Aufgabe sein, dafür zu sorgen, dass die Session dann in der URL übertragen wird. Dies geschieht bei HTML normalerweise automatisch, aber bei generierten Ausgaben musst Du die Konstante SID nutzen.

                      Die entsprechende PHP-Datei wir durch ein JavaScript-aufgerufen:

                      if(Ziel == 4){var URL = "http://[...]/kontodaten.php?PHPSESSID=<?php echo session_id(); ?>";}
                      parent.main.location.href=URL;

                      Das bedeutet: die SessionID müßte theoretisch mit übertragen werden. Mit

                      echo('<BR>'.$_SERVER[REQUEST_URI]);

                      sehe ich, dass sie auch korrekt übergeben wurde, dennoch funktioniert das Fallback so nicht.
                      An die Server- und PHPeinstellungen komme ich leider nicht heran, sodass ich etwaige PHP-Zusatzmodule nicht installieren kann. Wie könnte ich das sonst lösen?

                      Gruß

                      1. Hi,

                        Die entsprechende PHP-Datei wir durch ein JavaScript-aufgerufen:

                        Und Du bist sicher, dass Javascript aktiviert ist?

                        if(Ziel == 4){var URL = "http://[...]/kontodaten.php?PHPSESSID=<?php echo session_id(); ?>";}

                        warum nicht URL = "http://[...]/kontodaten.php?<?php echo SID; ?>" ?

                        freundliche Grüße
                        Ingo

                        1. Hi,

                          Und Du bist sicher, dass Javascript aktiviert ist?

                          Yep - sonst würde die Date ja auch gar nicht aufgerufen werden...

                          warum nicht URL = "http://[...]/kontodaten.php?<?php echo SID; ?>" ?

                          Weil da offenbar nichts übergeben wird: Weder erscheint so die Session-ID im sich ergebenden HTML-Quelltext, noch wird der URL-Anhang übergeben - wie auch...

                          Bei meiner Version mit dem "?PHPSESSID=<?php echo session_id(); ?>" geht wenigsten noch das...

                          Gruß

                          1. Hallo

                            Und Du bist sicher, dass Javascript aktiviert ist?

                            Yep - sonst würde die Date ja auch gar nicht aufgerufen werden...

                            Und du weißt, dass das bei _allen_Anderen_, die deine Seite nutzen, auch so ist?

                            warum nicht URL = "http://[...]/kontodaten.php?<?php echo SID; ?>" ?
                            ...
                            Bei meiner Version mit dem "?PHPSESSID=<?php echo session_id(); ?>" geht wenigsten noch das...

                            Das Bereitstehen von SID wird in der php.ini geregelt. Aber auf diese hast du ja, wie du bereits anmerktest, keinen Zugriff.

                            Tschö, Auge

                            --
                            Die Musik drückt aus, was nicht gesagt werden kann und worüber es unmöglich ist zu schweigen.
                            (Victor Hugo)
                            Veranstaltungsdatenbank Vdb 0.1
  2. echo $begrüßung;

    $sth = mysql_query($sql) or die (mysql_error());
    // bis hierher klappts: echo $sth; schreibt "Resource id #3"
    // aber: var_dump(mysql_num_rows($sth)); schreibt "int(0)"

    Auch ein leeres Result-Set zählt zu den erfolgreichen Ausführungen. Diese von die beobachtete Kombination ist nichts ungewöhnliches.

    $result = mysql_fetch_assoc($sth);
    // ab hier passiert nix mehr:
    // echo $result; schreibt z.B. im IE "Array", in NS4 nichts

    echo oder print() auf ein Array anzuwenden ist nicht sinnvoll. print_r() und var_dump() sind geeigneter.

    // mit $result = mysql_fetch_array($sth); und entsprechenden Veränderungen funktionierts auch nicht
    // mit $result = mysql_fetch_row($sth); und entsprechenden Veränderungen funktionierts auch nicht

    Ein leeres Result-Set bleibt leer, auch wenn du die Abfragemethode änderst.

    obiges Script liest einen Datensatz aus meiner Datenbank und gibt sie als PHP-Variablen aus. In allen neueren Browser klappt das ohne Probleme - nur Netscape 4 scheint die Variablen nicht belegen zu wollen.
    Ich habe keine Ahnung, wo das Problem liegen könnte: keine Fehlermeldungen - nichts! Wie kann es überhaupt sein, dass Browser solch serverseitige Scripte unterschiedlich interpretieren???

    Der Browser interpretiert dein Script nicht. Er schickt nur Requests zum Server. Finde den Unterschied zwischen dem Request-Response-Verhalten (bzw. der dabei mitgeschickten Daten) des NN4 und Browsern bei denen es funktioniert. Du könntest dazu beispielsweise bei Aufruf des Scripts den Inhalt von $_SERVER in eine Datei loggen, oder einen Netzwerksniffer einsetzen, oder ein Tool wie livehttpheaders für den NN4 suchen.

    Bei einem von mir untersuchten Fall browserabhängiger Scriptausführung stellte es sich nach langem Suchen heraus, dass aufgrund einer fehlerhaften Ressourcen-Referenzierung (sprich: CSS-Datei, Bild oder sowas ähnliches) das Script zweimal aufgerufen wurde: einmal gewollt und dabei ein zweites Mal durch die falsche Einbindung. Ein Browser holte daraufhin das Dokument neu, ein anderer ignorierte die Einbindung.

    echo "$verabschiedung $name";

    1. Hi,

      Bei einem von mir untersuchten Fall browserabhängiger Scriptausführung stellte es sich nach langem Suchen heraus, dass aufgrund einer fehlerhaften Ressourcen-Referenzierung (sprich: CSS-Datei, Bild oder sowas ähnliches) das Script zweimal aufgerufen wurde: einmal gewollt und dabei ein zweites Mal durch die falsche Einbindung. Ein Browser holte daraufhin das Dokument neu, ein anderer ignorierte die Einbindung.

      auf diese Deine Anregung hin habe ich den include() rausgenommen und den Connect zur Datenbank direkt im Script notiert - damit Doppelungen ausgeschlossen sind.
      Härter kann man ein Script nun nicht mehr codieren - sowas wie css etc. gibts nicht mehr. Ohne Ergebnis!
      Bleibt alles beim Alten.

      Danke trotzdem

  3. Hallo,

    ich glaube ich ahbe da ein bisschen was durcheinandergebracht.

    Es könnte sein, dass der Netscape 4 Probleme hat die Session(-Cookie)s zu verarbeiten und du deswegen einen Leeren Ergebnissatz erhälst.

    Gruß;

    1. Hi,

      Es könnte sein, dass der Netscape 4 Probleme hat die Session(-Cookie)s zu verarbeiten und du deswegen einen Leeren Ergebnissatz erhälst.

      Mit Cookies arbeite ich nicht und die aktuelle Session liest selbst der NS 4 per session_id() problemlos aus.
      Aber Leer schein der Ergebnissatz in jedem Fall zu sein.

      Gruß

      1. Hi,

        Mit Cookies arbeite ich nicht

        natürlich doch. session_start() versucht einen Cookie zu setzen und auszulesen!

        freundliche Grüße
        Ingo