Philipp: Problem mit Array und for Schleife

Hallo! Ich bastele an folgendem Script. Es soll verhindern, dass man bestimmte Seiten aufrufen kann. Nur leider scheint es nicht zu funktionieren. Der Teil der nicht zu funktionieren scheint ist wohl :

for (var i=0; i < Erlaubt.length; i++)
                        else if(URL != Erlaubt[i]) {
aber ich weiss nicht wieso!

Wäre nett, wenn mir ja jemand helfen könnte!

<html>
      <head>
            <title>link.html</title>
            <script language="JavaScript">
                    <!--
                        var Erlaubt = new Array("http://www.hornung.net/","http://www.gmx.de/");

function Go(URL) {

if (URL == null) {
                        document.GoURL.URL.focus(); }

for (var i=0; i < Erlaubt.length; i++)
                        else if(URL != Erlaubt[i]) {
                        alert("Die Seite ist nicht zugänglich für Sie!"); }

else {
                        parent.frames[1].location.href=URL; } }
                    //-->
            </script>
      </head>

<body bgcolor="e1e1e1">
            <form name="GoURL" action="">
                  <input type="text" name="URL" value="http://" size="50">
                  <input type="button" name="" value="Gehe zu" onClick="Go(document.GoURL.URL.value)">
            </form>
      </body>
</html>

  1. Hi,

    Der Teil der nicht zu funktionieren scheint ist wohl :
    for (var i=0; i < Erlaubt.length; i++)
                            else if(URL != Erlaubt[i]) {

    else ist nur als Bestandteil von if (bedingung) { } else { } sinnvoll, nicht jedoch im Zusammenhang mit for.

    cu,
    Andreas

    --
    Der Optimist: Das Glas  ist halbvoll.  - Der Pessimist: Das Glas ist halbleer. - Der Ingenieur: Das Glas ist doppelt so groß wie nötig.
    http://mud-guard.de/? http://www.andreas-waechter.de/ http://www.helpers.de/
    1. else ist nur als Bestandteil von if (bedingung) { } else { } sinnvoll, nicht jedoch im Zusammenhang mit for.

      Tut mir leid, ich verstehe dass nicht? Soll das heissen, dass ich aus:

      for (var i=0; i < Erlaubt.length; i++)
                              else if(URL != Erlaubt[i]) {
                              alert("Die Seite ist nicht zugänglich für Sie!"); }

      for (var i=0; i < Erlaubt.length; i++)
                              if(URL != Erlaubt[i]) {
                              alert("Die Seite ist nicht zugänglich für Sie!"); }

      machen soll?

  2. Vom ganzen Rest mal abgesehen:
    Variablen haben in PHP die Form $name... das heisst du schreibst:

    $erlaubt = array();
    if $URL== etc.

    mfG
    A. Puccio

    1. Hi,

      Vom ganzen Rest mal abgesehen:
      Variablen haben in PHP die Form $name... das heisst du schreibst:

      Aufwachen...

      Es geht nicht um PHP...

      cu,
      Andreas

      --
      Der Optimist: Das Glas  ist halbvoll.  - Der Pessimist: Das Glas ist halbleer. - Der Ingenieur: Das Glas ist doppelt so groß wie nötig.
      http://mud-guard.de/? http://www.andreas-waechter.de/ http://www.helpers.de/
  3. Ich habe das Script jetzt so notiert
                <script language="JavaScript">
                        <!--
                            var Erlaubt = new Array("http://www.hornung.net","http://www.gmx.de");

    function Go(URL) {

    for (var i=0; i < Erlaubt.length; i++)
                            if(URL != Erlaubt[i]) {
                            parent.frames[1].location.href=URL; }

    else {
                            alert("Diese Seite ist für Sie gesperrt!"); } }
                        //-->
                </script>
          es funktioniert auch, nur wenn man eine seite aufruft bekomme ich immer genau so viele meldungen wie ich seiten im array notiert habe! wie kann ich das ändern?

    mfg

    Philipp

    1. Hallo,

      es funktioniert auch, nur wenn man eine seite aufruft bekomme ich immer genau so viele meldungen wie ich seiten im array notiert habe! wie kann ich das ändern?

      Die brichst die for-Schleife mit break ab, sobald eine unerlaubte Seite auftritt.

      Gruß,
      Henning

      --
      Gruß aus Braunschweig
      SELF-Code: sh:( fo:| ch:{ rl:( br:> n4:( ie:( mo:) va:) de:] zu:} fl:( ss:| ls:<
    2. Moin!

      <script type="Text/JavaScript">

      <!--
      var Erlaubt = new Array("http://www.hornung.net","http://www.gmx.de");

      function Go(URL) {
        var flag=false;
        for (var i=0; i < Erlaubt.length; i++) {
          if(URL == Erlaubt[i]) {
            var flag =true;  // Flagvariable auf true setzen
            var i = Erlaubt.length; // Das bricht die Schleife ab. Dies ist hier nicht notwendig, aber macht das Programm schneller.
          } // end if
        }  // next i
        if (flag) {
          parent.frames[1].location.href=URL;
        } else {
           alert("Diese Seite ist für Sie gesperrt!");
           /* hübscher wäre:
           parent.frames[1].document.write("<h1 style="color: red; border: thin solid red;">Die Seite ""+URL+"" dürfen Sie nicht aufrufen.") */
        } // end if
      return flag;
      }
      //-->
      </script>

      Jetzt wo die Klammern ordentlich stehen ist es doch viel besser zu erkennen - oder? Damit ist klar, warum es klug ist den Quelltext zu strukturieren.

      Das alert() war innerhalb der for- Schleife, wurde also bei jeden Durchlauf mit ausgeführt. Sowas macht man mit Flag- Variablen und wertet diese nach der Abarbeitung der Schleife aus.

      Funktionen sollten immer etwas zurückgeben, auch wenn es nicht ausgewertet wird. Aber dies ist das Wesen von Funktionen.

      MFFG (Mit freundlich- friedfertigem Grinsen)

      fastix®

      --
      Meinereinerselbst ist auf der Suche nach Aufträgen
      1. Hi,

        for (var i=0; i < Erlaubt.length; i++) {
            if(URL == Erlaubt[i]) {
              var flag =true;  // Flagvariable auf true setzen
              var i = Erlaubt.length; // Das bricht die Schleife ab. Dies ist hier nicht notwendig, aber macht das Programm schneller.

        Holzhammer-Methode.
        Außerdem: warum deklarierst Du i neu als Variable? Wenn überhaupt auf diese Art, dann ohne das var davor.
        Gleiches gilt für das var vor flag = true;

        Um eine Schleife abzubrechen, gibt es
        break;

        Jetzt wo die Klammern ordentlich stehen

        Du findest KR-Klammerung ordentlich? Ich nicht...

        cu,
        Andreas

        --
        Der Optimist: Das Glas  ist halbvoll.  - Der Pessimist: Das Glas ist halbleer. - Der Ingenieur: Das Glas ist doppelt so groß wie nötig.
        http://mud-guard.de/? http://www.andreas-waechter.de/ http://www.helpers.de/
        1. Moin!

          Holzhammer-Methode.

          Ja. Die erschlägt alles. Und das ist gut so.

          Außerdem: warum deklarierst Du i neu als Variable? Wenn überhaupt auf diese Art, dann ohne das var davor.

          Das hab ich einfach mal aus dem Original übernommen.

          Gleiches gilt für das var vor flag = true;

          Stimmt. Hier war das (auch) unnötig.

          Um eine Schleife abzubrechen, gibt es
          break;

          Womöglich. In dieser Sprache. Ich versuche einzigartige Konstrukte zu vermeiden. Das senkt den Fehlersuchaufwand, wenn ich mal in einer anderen Sprache progge.

          Jetzt wo die Klammern ordentlich stehen
          Du findest KR-Klammerung ordentlich? Ich nicht...

          Ich klammere nie :)
          Im Ernst: Da gibt es durchaus unterschiedliche Ansichten. Ich finde es so sehr übersichtlich. Angesichts des Originals wirst Du mit mir vollkommen übereinstimmen...

          Nichts für ungut, aber gabs da nicht irgendwo eine Frage, wo Du wirklich hättest helfen können?

          MFFG (Mit freundlich- friedfertigem Grinsen)

          fastix®

          --
          Meinereinerselbst ist auf der Suche nach Aufträgen