switch Befehl

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • switch Befehl

    Ich habe eine Tabelle aus einer Datenbank, wobei jede Zeile einen link auf eine neue Seite darstellt (wird mit include geladen)

    <td>
    <?php
    echo "<a href=\"" . htmlspecialchars("?tour=" .
    urlencode($line[Datei])) . "\">\n";
    ?>
    <?=$line[Name]?>
    <?php
    echo "</a>"
    ?>
    </td>

    ///////////////////////////////////////////////////////

    <?
    if ($tour == "001.htm")
    {
    include ("touren/001.htm");
    }
    elseif ($tour == "002.htm")
    {
    include ("touren/002.htm");
    }
    ?>

    Gibt es eine Möglichkeit, mir die ganze if-Liste zu sparen (es wären mehr als 200 links), indem ich den switch-Befehl benutze?

    Ich habe es so versucht, aber irgendwo steckt da der Wurm drin:

    <?
    switch ($tour)
    {
    case $line[Datei]:
    include ("touren/$line[Datei]");
    break;
    }

    ?>

    vielen dank im voraus.

  • #2
    Hi,
    du kannst dir die ganzen IF Abfragen durch eine Switchabfrage sparen.
    Im Codegeschnippsel gab´s mal etwas, vielleicht kannst du damit ja was anfangen.
    Hier der Link http://www.php-resource.de/forum/sho...threadid=13590
    mfg
    Günni


    Praxis: Jeder kann´s, aber keiner weiß wie´s geht...
    Theorie: Jeder weiß wie´s geht, aber keiner kann´s ...
    Microsoft vereint Praxis und Theorie: Nix geht und keiner weiß warum
    City-Tiger - Online durch die Straßen tigern...

    Kommentar


    • #3
      Crossposten ist hier zu unterlassen, das doppelte Posting wurde gelöscht.

      Kommentar


      • #4
        Das hilft mir leider nicht weiter.

        Ich bräuchte eher Hilfe mit dem korrekten Code:

        <?
        switch ($tour)
        {
        case $line[Datei]:
        include ("touren/$line[Datei]");
        break;
        }
        ?>

        Kommentar


        • #5
          Was steht in den Variablen drin?
          mfg
          Günni


          Praxis: Jeder kann´s, aber keiner weiß wie´s geht...
          Theorie: Jeder weiß wie´s geht, aber keiner kann´s ...
          Microsoft vereint Praxis und Theorie: Nix geht und keiner weiß warum
          City-Tiger - Online durch die Straßen tigern...

          Kommentar


          • #6
            Bei $line[Datei] steht dann der Dateiname drinnen : z.B. 069.htm

            Kommentar


            • #7
              und bei $tour?
              mfg
              Günni


              Praxis: Jeder kann´s, aber keiner weiß wie´s geht...
              Theorie: Jeder weiß wie´s geht, aber keiner kann´s ...
              Microsoft vereint Praxis und Theorie: Nix geht und keiner weiß warum
              City-Tiger - Online durch die Straßen tigern...

              Kommentar


              • #8
                $tour ist die Variable aus dem link

                <?php
                echo "<a href=\"" . htmlspecialchars("?tour=" .
                urlencode($line[Datei])) . "\">\n";
                ?>
                <?=$line[Name]?>
                <?php
                echo "</a>"
                ?>

                Kommentar


                • #9
                  Re: switch Befehl

                  Ich habe es so versucht, aber irgendwo steckt da der Wurm drin:

                  <?
                  switch ($tour)
                  {
                  case $line[Datei]:
                  include ("touren/$line[Datei]");
                  break;
                  }
                  das kann nicht funktionieren, weil case einen festen wert für den vergleich haben will.

                  das was du da jetzt gecodet hast erfordert doch überhaupt keinen switch, da kannst du doch gleich im include den dateinnamen dynamisch zusammensetzen:
                  include ("touren/$line[Datei]");
                  welchen sinn soll dabei noch der switch haben?

                  wenn es dir um die sicherheit geht, damit man keinen dateinamen übergeben kann, der z.b. in höhere verzeichnisse wechselt und dort sensible daten ausliest, dann überprüfe doch einfach den dateinamen mit einer regex, ob er wirklich nur aus dateiname plus -endung besteht, oder lösche einfach alle versuche das verzeichnis zu wechseln, aus dem string raus ("../" durch "" ersetzen); bzw. frage einfach ab, ob der dateiname einen slash enthält - wenn ja, gib eine meldung aus, anderfalls include die datei.
                  dann kann nur auf dateien innerhalb des verzeichnisses touren zugegriffen werden.
                  I don't believe in rebirth. Actually, I never did in my whole lives.

                  Kommentar

                  Lädt...
                  X