Andreas: Mozilla macht meine Tabellen kaputt??

Hallo,
ein User machte mich darauf aufmerksam, dass die Seiten im Downloadbereich mit Mozilla nicht zu lesen sind, da alle Struktur verschwunden scheint.
Hier ein Link wo ein Screenshot mit Mozilla zu sehen ist:
http://www.access-o-mania.de/forum.php?board=3;action=display;threadid=237
Hier eine der betreffenden Seiten:
http://www.access-o-mania.de/index.php?action=dloadrubrik&rubrik=Abfrage&cat=Access

Bitte schaut es euch mal an, vorallem mit Mozilla wenn ihr habt und gebt mal Feedback.

Gruß und Danke,
Andreas

  1. Hallo,

    http://validator.w3.org/check?uri=http%3A%2F%2Fwww.access-o-mania.de%2Findex.php%3Faction%3Ddloadrubrik%26rubrik%3DAbfrage%26cat%3DAccess

    gruss

    --
    no strict;
    no warnings;
    Über eine Rückmeldung freut sich später jeder, der das gleiche Problem hat und im Archiv nach einer Lösung sucht.
    1. Hallo,
      hier mal ein Beispiel:
      Line 633, column 352: cannot generate system identifier for general entity "kategorie"

      ...href="index.php?action=dloadredirect&kategorie=Access&KONTENTSID=4b2d17a4

      Im PHP Script steht dies:
      <a href="index.php?action=dloadredirect&kategorie='.$rubrikGroup.'" class="navi">

      Also was ist da falsch?

      Andreas

      1. Hallo Andreas,

        Also was ist da falsch?

        & in Adressen mussen durch &amp; ersetzt werden!

        Gruß,
        Michael

        --
        SELFCode: ie:{ fl:( br:> va:{ ls:$ fo:| rl:( n4:& ss:| de:> js:| ch:? sh:( mo:) zu:)
        1. Ok, das wusste ich nicht,
          danke.

          1. Hallo,
            ich wollte nochmals Feedback geben, und euch mitteilen dass ich die Seiten die Mozilla falsch dargestellt hat, validiert habe (*Schweinearbeit*) und tatsächlich funktioniert es jetzt auch.
            Ich werde wohl im Laufe der Zeit die restlichen Seiten auch validieren und überarbeiten.

            Danke nochmals an alle die mich auf den rechten Weg gebracht haben.
            Gruß Andreas

      2. Moin,

        <a href="index.php?action=dloadredirect&kategorie='.$rubrikGroup.'"
        Also was ist da falsch?

        & ist ein Special Character, der Entities einleitet. Er versucht also eine Entity beginnend mit &kategorie... zu finden, welche es nicht gibt. Also Fehler.

        Gruß,
        -Efchen

  2. Moin,

    Ja, das stimmt. Da gibts Probleme.

    Aber wenn Du diese Seite mal dem Validator gibst, findet er ZWEIUNDACHTZIG (82!) Fehler.

    Auf dieser Basis ist eine Fehlersuche nicht möglich. Befreie Deinen Code erst bitte von den 82 Fehlern, vorher ist alle Fehlersuche vergebliche Liebesmüh.
    Wie soll man Darstellungsfehler finden, wenn der Code für die Darstellung schon falsch geschrieben ist?

    Gruß,
    -Efchen

    1. Hallo,
      auf den Validator ist ...

      Aber wenn Du diese Seite mal dem Validator gibst, findet er ZWEIUNDACHTZIG (82!) Fehler.

      Dass Fehler drin sind ist schon klar, aber das kommt vom PHP Script, das der Validator falsch interpretiert.

      Ich wollte ja eigentlich nur bestätigt wissen ob das in Mozilla wirklich so aussieht.

      Andreas

      1. Hallo,

        ja es sieht so aus.

        gruss

        --
        no strict;
        no warnings;
        Über eine Rückmeldung freut sich später jeder, der das gleiche Problem hat und im Archiv nach einer Lösung sucht.
      2. Dass Fehler drin sind ist schon klar, aber das kommt vom PHP Script, das der Validator falsch interpretiert.

        Häh?
        Wieso interpretiert der Validator falsch, dein Script muss sauberes HTML liefern.

        Gruß,
        Michael

        --
        SELFCode: ie:{ fl:( br:> va:{ ls:$ fo:| rl:( n4:& ss:| de:> js:| ch:? sh:( mo:) zu:)
      3. Moin,

        Hallo,
        auf den Validator ist ...

        Nana!

        Dass Fehler drin sind ist schon klar, aber das kommt vom PHP Script, das der Validator falsch interpretiert.

        Ganz sicher nicht! Weißt Du überhaupt, was PHP ist und was der Validator macht? Von PHP weiß der Validator, genauso wie der Mozilla, rein gar nichts.
        Deine Fehler sind alle HTML-Fehler, mit PHP hat das rein gar nichts zu tun. Korrigiere Deine Fehler, sonst wird eine weitere Fehlersuche für Dich zur Qual!

        Gruß,
        -Efchen

        1. Hi Efchen,

          Deine Fehler sind alle HTML-Fehler, mit PHP hat das rein gar nichts zu tun. Korrigiere Deine Fehler, sonst wird eine weitere Fehlersuche für Dich zur Qual!

          Ersetze in alle Links in href & durch &amp, wie unten schon genannt wurde, dann dürfte die hälfte alle Fehler weg sein.

          Bei drei Javascripten hast du das type="text/javascript" vergessen und sonst noch ein paar Kleinigkeiten.

          Bedenke, dass die Zeilenangaben nicht unbedingt mit den Zeilen im PHP Script übereinstimmen. Es handelt sich um die Zeilen ist der HTML Ausgabe.

          MfG, Dennis.

          --
          Mein SelfCode: ie:{ fl:{ br:^ va:) ls:< fo:) rl:( n4:& ss:) de:> js:( ch:{ sh:( mo:} zu:|
          Zufällige Hinweise:
          ------------------------
          Fuer die Neulinge: Auf viele Fragen findet man eine
          Antwort im </archiv/>, das man auch durchsuchen kann
          http://suche.de.selfhtml.org/
  3. Das ist das PHP-Script, welches die Tabelle anzeigt:

    function dloadview($kategorie) {
     require("layer.inc.php");
     echo '&nbsp;&nbsp;Sie sind hier:&nbsp;&nbsp;';
     echo '<a href="index.php" class="navi">Home</a>&nbsp;/&nbsp;<a href="index.php?action=dload" class="navi">Downloads</a>&nbsp;/&nbsp;<b>'.$kategorie.'</b>';
     echo '<table width="100%">';
     echo '<tr><td bgcolor="#6394BD" height="1"></td></tr>';
     echo '<tr><td height="7"></td></tr>';
     echo '</table>';
     echo '<br><br>';
     echo'<Table>';
     echo '<tr><td width="30"></td><td class="norm"><b>Kategorie:&nbsp;&nbsp;'.$kategorie.'</b><br><br></td></tr>';
     $sql_dload = $SQL1->putquery("SELECT Rubrik FROM tbdownload where kategorie = '$kategorie' Group By Rubrik");
     for ( $i = 0 ; $i < mysql_numrows($sql_dload) ; $i++ ){
      $kategorieGroup = mysql_result($sql_dload,$i,"Rubrik");
      $sql_load = $SQL1->putquery("SELECT count(Titel) AS Anzahl FROM tbdownload where Rubrik = '$kategorieGroup' and kategorie = '$kategorie'");
      $anzahl = mysql_result($sql_load,0,"Anzahl");
      echo '<tr><td width="30"></td><td>
      <a class="navi" href="index.php?action=dloadrubrik&rubrik='.$kategorieGroup.'&cat='.$kategorie.'">
      '.$kategorieGroup.'
      </a>
      &nbsp;('.$anzahl.')</td></tr>';
     }
     echo '</table>';
    }

    1. Sorry, habs nicht strukturiert, das will ich keinem zumuten. Hier nun besser lesbar:

      function dloadview($kategorie) {
       require("layer.inc.php");
       echo '&nbsp;&nbsp;Sie sind hier:&nbsp;&nbsp;';
       echo '<a href="index.php" class="navi">Home</a>
      &nbsp;/&nbsp;
      <a href="index.php?action=dload" class="navi">Downloads</a>
      &nbsp;/&nbsp;
      <b>'.$kategorie.'</b>';
       echo '<table width="100%">';
       echo '<tr><td bgcolor="#6394BD" height="1"></td></tr>';
       echo '<tr><td height="7"></td></tr>';
       echo '</table>';
       echo '<br><br>';
       echo'<Table>';
       echo '<tr><td width="30"></td>
      <td class="norm"><b>Kategorie:&nbsp;&nbsp;'.$kategorie.'</b><br><br></td>
      </tr>';
       $sql_dload = $SQL1->putquery("SELECT Rubrik FROM tbdownload where kategorie = '$kategorie' Group By Rubrik");
       for ( $i = 0 ; $i < mysql_numrows($sql_dload) ; $i++ ){
        $kategorieGroup = mysql_result($sql_dload,$i,"Rubrik");
        $sql_load = $SQL1->putquery("SELECT count(Titel) AS Anzahl FROM tbdownload where Rubrik = '$kategorieGroup' and kategorie = '$kategorie'");
        $anzahl = mysql_result($sql_load,0,"Anzahl");
        echo '<tr><td width="30"></td><td>
        <a class="navi" href="index.php?action=dloadrubrik&rubrik='.$kategorieGroup.'&cat='.$kategorie.'">
        '.$kategorieGroup.'
        </a>
        &nbsp;('.$anzahl.')</td></tr>';
       }
       echo '</table>';
      }

      1. Moin,

        Dein PHP-Script ist uninteressant. Die Fehler im Validator sind HTML-Fehler, und Deine Darstellungsprobleme beruhen wahrscheinlich darauf. Sie könnten außerdem im Bereich CSS beheimatet sein, das aber wiederum ohne einen validen HTML-Code ebenso unberechenbar ist.

        Korrigiere Deine 82 HTML-Fehler.
        Alles andere ist Unfug.

        Gruß,
        -Efchen

        1. Hallo,
          alle Seite werden im Mozilla richtig Dargestellt, außer dieser die durch dieses Script erstellt werden.
          Also ist das Problem wohl in diesem Script zu suchen.

          Andreas

          1. Moin,

            Hallo,
            alle Seite werden im Mozilla richtig Dargestellt, außer dieser die durch dieses Script erstellt werden.
            Also ist das Problem wohl in diesem Script zu suchen.

            Nein, im HTML-Code, den das Script erzeugt.

            Gruß,
            -Efchen

          2. Hi,

            eine Beruhigung zwischendurch: Durch die nicht maskierten Und-Zeichen entstehen in aller Regel Folgefehler. Wenn Du jene Zeichen maskierst, wirst Du wahrscheinlich deutlich _weniger_ Fehler haben, als 82.

            Die Fehler stecken aber selbstverständlich im generierten HTML-Code. PHP-Fehler kannst Du an entsprechenden serverseitigen Fehlermeldungen erkennen.

            Viele Grüße,
            Bubax

      2. Hi,

        also zuerst einmal solltest Du Dich mit HTML gut auskennen, bevor Du an PHP rangehst.

        Mache Dir folgendes klar:

        • PHP läuft auf dem Server und liefert i.d.R. HTML (oder XML, PDF, PNG, etc.) an den Browser
        • Die Browser, Suchmaschinen, Validatoren, etc.. können nicht unterscheiden (mal abgesehen von der Endung '.php' in der URL), ob der HTML-Code von PHP, Perl, ASP oder was auch immer erzeugt wurde

        Was Du an PHP zusammengehackt hast, ist ziemlich unübersichtlich und sehr schlechter Programmierstil.

        Ein Vorschlag (ungetestet):

        function dloadview($kategorie)
        {
         require("layer.inc.php");

        $sql_dload = $SQL1->putquery("
          SELECT
           Rubrik
          FROM
           tbdownload
          WHERE
           kategorie = '$kategorie'
            Group By Rubrik
         ");

        print_tab_kat_start($kategorie);

        for ($i=0 ;$i<mysql_numrows($sql_dload); $i++)
         {
          $kategorieGroup = mysql_result($sql_dload, $i, "Rubrik");
          $sql_load = $SQL1->putquery("
           SELECT count(Titel)
            AS Anzahl
           FROM
            tbdownload
           WHERE
            Rubrik = '$kategorieGroup' and
            kategorie = '$kategorie'
          ");
          $anzahl = mysql_result($sql_load, 0, "Anzahl");

        print_tab_kat($kategorieGroup, $kategorie, $anzahl);
         }

        print_tab_kat_end();
        }

        function print_tab_kat_start($kategorie)
        {
         printf('
          &nbsp;&nbsp;Sie sind hier:&nbsp;&nbsp;
          <a href="index.php" class="navi">Home</a>
          &nbsp;/&nbsp;
          <a href="index.php?action=dload" class="navi">Downloads</a>
          &nbsp;/&nbsp;
          <strong>%s</strong> <!-- kategorie -->
          <table width="100%">
           <tr>
            <td bgcolor="#6394BD" height="1"></td>
           </tr>
           <tr>
            <td height="7"></td>
           </tr>
          </table>
          <br><br>
          <table>
           <tr>
            <td width="30"></td>
            <td class="norm">
             <strong>Kategorie:&nbsp;&nbsp;%s</strong><br><br> <!-- kategorie -->
            </td>
           </tr>
          <table>
         ', $kategorie, $kategorie);
        }

        function print_tab_kat($kategorieGroup, $kategorie, $anzahl)
        {
         printf('
          <tr>
           <td width="30"></td>
           <td>
            <a class="navi" href="index.php?action=dloadrubrik&amp;rubrik=%s&amp;cat=%s">%s</a> <!-- kategorieGroup, kategorie, kategorieGroup -->
            &nbsp;%s <!-- Anzahl -->
           </td>
          </tr>
         ', $kategorieGroup, $kategorie, $anzahl);
        }

        function print_tab_kat_end()
        {
         printf('
          </table>
         ');
        }