Announcement

Collapse
No announcement yet.

Prüfung ob in einem *.html Text/Bild steht

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Prüfung ob in einem *.html Text/Bild steht

    Guten Tag,

    ich habe folgendes Problem:
    Mit Hilfe von 2 Sprungmenüs/ComboBox sollen 99 *.html Seiten aufgerufen werden können. Die Seiten sind durchnummeriert von 00.html ... 99.html. In jedem Sprungmenü sind die Werte von 0-9 eingetragen, die dann zusammengesetzt einen Wert ergeben.
    Dieser Wert soll dann bestimmen, welche *.html Seite aufgerufen werden soll.
    Diese 99-Werte stehen für einen bestimmten biologischen Pflanzen-Code. Nicht jeder Pflanze werden aber 99 Werte zugewiesen, sondern manchmal nur 50 oder 70.
    Da ich aber eine Vorlage erstellen möchte, die für alle Pflanzen gültig ist, möchte ich nicht die Wert.html-Seiten löschen, denen kein Wert zugewiesen werden kann, sondern ich möchte, das überprüft wird, ob in der Seite ein Text oder Bild eingefügt wurde und ob ich dann dorthin springen kann. Sollte die *.html-Seite leer sein, soll dann zur nächsten Seite gesprungen werden und dann wieder eine Überprüfung stattfinden. Steht was drin, soll die Seite angezeigt werden.
    Hat jemand ein Skript zur Hand, wo so eine Menu-Steuerung beschrieben wird? Ich habe leider keine Ahnung von php (gehöre zu den Delphianern) und muss mich da erst einarbeiten und habe auch leider keine einfacheren Probleme (im Moment) zu lösen um mich in der Kunst des php-Scriptings zu üben.

    Vielleicht kann mir ja jemand helfen!

    Viele Grüsse

    Dirk Nöding

  • #2
    Hallo Dirk,

    wenn ich es korrekt verstanden habe, liegen
    immer 99 HTML Dateien vor.<br> <br>

    Wie du vorgehen kannst, hängt davon ab ob die
    Dateien leer ( Größe 0 Byte ) sind, oder ob sie
    ein HTML-Gerüst ohne Einträge im
    Body-Bereich enthalten. <br> <br>

    Wenn die Dateien leer sind, kannst du es
    folgendermaßen prüfen. <br> <br>

    <?PHP <br>
    $datei = "99.html"; <br>
    $size = filesize($datei); <br>
    if ( $size == 0 ) <br>
    echo "leere Datei"; <br>
    else <br>
    echo "Datei mit Inhalt"; <br>
    ?> <br>
    <br>
    Wenn die Dateien hingegen ein HTML-Gerüst
    ohne Einträge im Body-Bereich enthalten wird
    es ein wenig schwieriger. <br> <br>

    So könntest du es machen: <br> <br>

    <?PHP <br>
    $datei = "99.html"; <br>
    $fp = fopen ($zaehler_anmelden, "r"); <br>
    $str = fread ($fp, filesize ($datei)); <br>
    fclose ($fp); <br>
    <br>
    // Suchmuster für preg_match <br>
    // vor dem ?body steht kein V <br>
    //sondern \ + / ohne Leerzeichen. <br>
    $muster ="/<body.*>[\w+].*<\/?body.*>/iU";
    <br>
    <br>
    // Das Muster trifft zu wenn mindestens eins
    <br>
    // der Zeichen a-z, A-Z,0-9 zwischen den <br>
    Body-Tags enthalten ist. <br>
    <br>
    if (preg_match($muster,$str)) <br>
    echo "es steht etwas zwischen den <br>
    Body-Tags"; <br>
    ?> <br>
    <br>
    Ich hoffe, es hilft dir weiter. <br>
    <br>
    Gruß Uwe<br>

    Comment


    • #3
      Hallo Dirk, <br>

      hier noch eine Korrektur des Suchmusters.
      <br>

      So wie es oben angegeben ist, funktioniert es
      nicht. Stattdessen bitte dieses Muster
      verwenden. <br>

      $muster
      ="/.*<body.*>[\w+].*<\/?body.*>.*/iU"; <br>

      Ebenfalls falsch ist die Variable
      $zahler_anmelden bei fopen. <br> <br> Sie
      muss
      $datei heißen ( C+P Fehler, sorry ) <br> <br>


      Auf diese Weise kannst du prüfen, ob in einer
      HTHL-Datei etwas außer Leerzeichen zwischen
      deinen BODY-Tags steht und entsprechend
      verzweigen.

      Gruß Uwe

      Comment


      • #4
        ..... und hier die letzte Ergänzung/Änderung im
        Suchmuster.
        <br>
        $muster
        ="/.*<body.*>.*[\w+].*<\/?body.*>.*/iU";
        <br>

        Das vorherige Muster funktionierte nicht bei
        Leerzeichen die sofort nach dem einleitenden
        Body-Tag standen. Durch das zusätzliche
        <b>.*</b> vor den <b>[\w+]</b> werden
        jetzt auch diese berücksichtigt.

        Jetzt sollte es bei allen Möglichkeiten
        funktionieren.

        Gruß Uw

        Comment


        • #5
          > /.*<body.*>.*[\w+].*<\/?body.*>.*/iU

          Warum setzt du \w+ hier in eckige Klammern

          Comment


          • #6
            Hallo xabbuh,

            weil es so schön aussieht :-)

            Nein, Spaß beiseite. Ich hatte erst die lange
            Schreibweise [a-zA-Z0-9], stattdessen habe ich
            es dann in \w geändert.

            Du hast recht, da können die Klammern weg.
            Und wo wir schon am optimieren sind, ohne
            das Plus geht es auch.

            Gruß Uw

            Comment


            • #7
              Ist das Problem nicht, dass ein + innerhalb von eckigen Klammern als + und nicht als "Zeichen beliebig oft" interpretiert wird? Bin mir da jetzt nicht ganz sicher

              Comment


              • #8
                Hallo xabbuh,
                <br>
                ich habe es im "regex-coach" getestet und da
                funktioniert es mit und ohne Klammern und
                dann sowohl mit als auch ohne +. <br>
                <br>
                Das + steht ja für mindestens einmal oder
                beliebig oft. Wird im Muster aber nicht
                benötigt, da nach dem "\w" ja noch ".*" folgt.
                <br>
                Das Muster trifft also stets zu, wenn Mindestens
                ein Zeichen "a-zA-Z0-9" vorhanden ist.
                <br>

                Was die Interpretation von "+" angeht, wird
                "+", soweit ich weiß, stets als "beliebiges
                Zeichen mindestens einmal oder beliebig oft"
                gewertet. ( Es sei denn es ist escaped )

                Gruß Uwe

                Comment


                • #9
                  > ich habe es im "regex-coach" getestet und da funktioniert es mit und ohne Klammern und dann sowohl mit als auch ohne +.

                  Dafür gibt es eine simple Erklärung: Innerhalb der geschweiften Klammern gilt das "Entweder-Oder-Prinzip". Wenn einer der Teile (in deinem Fall also \w oder +) erfüllt ist, wird gematched. Da \w ja zutrifft bleibt + ohne Auswirkungen.

                  > Das + steht ja für mindestens einmal oder beliebig oft. [..] Was die Interpretation von "+" angeht, wird "+", soweit ich weiß, stets als "beliebiges Zeichen mindestens einmal oder beliebig oft" gewertet. ( Es sei denn es ist escaped )

                  Genau, allerdings nur außerhalb von eckigen Klammern. Innerhalb von eckigen Klammern wird es als Pluszeichen interpretiert. Das kann man relativ simpel mit folgenden Script überprüfen:
                  <i>
                  <?php
                  $regex = '#^[\w+]$#';
                  var_dump(preg_match($regex, $var, $matches));
                  var_dump($matches);
                  ?>
                  </i>
                  Nimm hier für $var nacheinander einfach folgende Werte:
                  $var = 'a';
                  $var = '+';
                  $var = 'aa'

                  Comment


                  • #10
                    Hallo,

                    ich danke Euch erstmal. Ich muss jetzt erstmal sehen, ob ich das hinbekomme. Werde mich bestimmt nochmal melden.

                    Vielen Dank und Grüsse

                    Dir

                    Comment

                    Working...
                    X