Martin G.: Server "verhaspelt" sich?

Hallo,

Ich habe Probleme mit einer PHP-Datei, deren HTML-Resultat nach dem Hochladen auf den Server falsch ausgegeben wird. Die Datei besteht aus HTML und einem PHP-Bereich, in dem durch eine Fallunterscheidung geprüft wird, was ausgegeben werden soll.

Vereinfacht kommt folgender Code in der Datei vor:

<div class="content">
  <div class="headline">&Uuml;berschrift</div>
  <br>
  <br>
  <div class="text">
  <?php
    if ($bedingung) {
      echo "Gib den ersten Satz aus.<br>\n";
    }
    else {
      echo "Gib den zweiten Satz aus<br>\n";
    }
  ?>
  </div>
</div>
<!-- restlicher Code -->
</body>
</html>

Im Browser kommt aber folgender Quelltext an:

<div class="content">
  <div class="headline">&Uuml;berschrift</div>
  <br>
  <br>
  <divGib den ersten Satz aus.><br>
  </div>
</div>
</body>
</html> class="text">

Die Ausgabe des Satzes wird also in den div-Tag geschrieben und das class-Attribut ganz an das Ende gesetzt. Eigentlich ist das doch unmöglich, da die Fallunterscheidung erst nach dem div-Tag beginnt.

Kann es sein, dass der Server da vielleicht etwas durcheinander bringt?

Die Datei wird übrigens vom W3-Validator validiert (HTML 4.01 Transitional), außerdem habe ich schon überprüft, ob alle Klammern, Tags, Anführungszeichen etc. ordnungsgemäß beendet werden. Der Server ist ein Apache 1.3.26 (Unix) mit PHP 4.1.2.

Kennt hier jemand dieses Problem und hat vielleicht einen Tip, was ich tun könnte?

Gruß,
Martin

  1. Hallo Martin,

    Du hast mit ziemlicher Sicherheit eine Fehler in deinem Quellcode den Du uns nicht gepostet hast.
    Lade doch mal den Code als .txt Datei hoch, und verlinke die Seite hier. (entferne aber vorher evtl vorhandene Passwörter) damit man das Problem nachvollziehen kann.

    TomIRL

    1. Lade doch mal den Code als .txt Datei hoch, und verlinke die Seite hier. (entferne aber vorher evtl vorhandene Passwörter) damit man das Problem nachvollziehen kann.

      Hallo TomIRL,

      Der Quellcode müsste eigentlich fehlerfrei sein, da die Seite auf meiner lokalen Apache-Installation korrekt verarbeitet wird. Ich habe beide durch die Fallunterscheidung möglichen Seiten als HTML abgespeichert und erfolgreich validieren lassen. Nur auf dem Server, auf dem die Website abgelegt werden soll, treten die beschriebenen Probleme auf.

      Die Seite ist die Logout-Seite eines passwortgeschützten Bereichs (mit Session Cookies). Deswegen, und weil die Seite auf einem Server des BelWü (Landeshochschulnetz BW) liegt, möchte ich keinen direkten Link dorthin in einem Forum posten. Ich hoffe es ist okay, wenn ich den Quellcode hier rein "klatsche" (Die Variable mit der Bedingung habe ich geändert).

      Gruß,
      Martin

      <?php
          session_start();
      ?>
      <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
      <html>
      <head>
      <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
      <link rel="stylesheet" type="text/css" href="../style.css">
      <title>Seitentitel</title>
      </head>
      <body bgcolor="#ffffff">
      <?php
        include 'header.php';
        echo "<div class="navigation"> <a href="../index.html">Zurück zur Homepage</a></div>\n";
      ?>
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td valign="top" class="links"><img src="../bilder/pixel.gif" width="150" height="5" border="0" alt=""><br>
            <div class="akt_headline">Administration</div>
            <br>
          </td>
          <td valign="top" width="100%" class="rechts"><div class="content">
            <div class="headline">Logout</div>
            <br>
            <br>
            <div class="text">
            <?php
              if ($bedingungObGueltigerLogin) {
                $_SESSION = array();
                session_destroy();

      echo "Sie wurden ausgeloggt.<br><br><br>\n";
                echo "<a href="../index.html">Zurück zur Homepage</a><br><br>\n";
                echo "<a href="../admin/index.html">Zurück zum Anmeldungsformular</a>\n";
              }
              else {
                $_SESSION = array();
                session_destroy();

      echo "<b>Kein Zugriff</b><br><br>\n";
                echo "Sie müssen sich <a href="../admin/index.html">anmelden</a>, um diese Seite aufzurufen.\n";
              }
            ?>
            </div>
            </div></td>
        </tr>
      </table>
      </body>
      </html>

      1. Hello,

        na, vielleicht ist immer noch eine falsche Seite auf Deinem Server und du lädst auch immer noch die falsche hoch. Soll alles schon vorgekommen sein. ;-)

        Liebe Grüße aus http://www.braunschweig.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        1. na, vielleicht ist immer noch eine falsche Seite auf Deinem Server und du lädst auch immer noch die falsche hoch. Soll alles schon vorgekommen sein. ;-)

          Hallo Tom,

          Das war schon der Quelltext, der auf dem Server liegt, ich habe ihn nämlich vorhin vom Server heruntergeladen, da ich ihn hier gerade nicht zur Hand hatte.

          Ich dachte, dass dieses Problem vielleicht anderen schon begegnet ist und ich einen Tip bekommen könnte, was da los ist.

          Gruß,
          Martin

          1. Hello,

            das kann noch einige Gründe in der Konfiguration und dem übrigen Quelltext haben. Ich vermute mal, dass bei Dir shortopen-tags eingeschaltet sind und dann aus irgend einem Grund das Wort "class" bereits eine Anweisung für php ist.

            Liebe Grüße aus http://www.braunschweig.de

            Tom

            --
            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
            1. das kann noch einige Gründe in der Konfiguration und dem übrigen Quelltext haben. Ich vermute mal, dass bei Dir shortopen-tags eingeschaltet sind und dann aus irgend einem Grund das Wort "class" bereits eine Anweisung für php ist.

              Hallo Tom,

              Vielen Dank für die Antworten!

              Ich habe mal versucht, die shortopen-Tags mit der Funktion ini_set() auszuschalten, was aber nicht funktioniert hat, weil ich aus dem Skript wahrscheinlich nicht die Rechte dazu habe. Da werde ich wohl mit den Verantwortlichen bei BelWü Kontakt aufnehmen müssen, um solche Konfigurationsänderungen durchzuführen.

              Ich habe ja schon vermutet, dass es vielleicht am Server liegt, weil der Quelltext fehlerfrei zu sein scheint (nach dem Validator), darum werde ich in dieser Richtung mal weiterforschen und gucken, was es sonst noch für Konfigurationsmöglichkeiten gibt, die "schuld sein" könnten.

              Falls noch jemand eine Idee hat, wäre ich für einen Vorschlag natürlich sehr dankbar. :)

              Gruß,
              Martin

            2. das kann noch einige Gründe in der Konfiguration und dem übrigen Quelltext haben. Ich vermute mal, dass bei Dir shortopen-tags eingeschaltet sind und dann aus irgend einem Grund das Wort "class" bereits eine Anweisung für php ist.

              Was für Kartoffelsalat-mit-Sauerkraut-Umgebungen gibt's eigentlich noch?

  2. Guten Morgen,

    Ich habe ein bisschen mit dem Skript rumprobiert und nach und nach immer eine Anweisung des PHP-Teils hinzugefügt. Die "Code-Verschiebung" tritt immer auf, sobald ich die Funktion session_destroy() verwende.

    Kann sich jemand vorstellen, warum diese Funktion die Probleme des Ausgangspostings auslöst und wie ich sie verhindern könnte?

    Gruß,
    Martin