Ankündigung

Einklappen
Keine Ankündigung bisher.

undefined array key 1

Einklappen

Neue Werbung 2019

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

  • undefined array key 1

    Hallöchen,

    ich habe zwar in der Suche was gefunden, Tip war, das mit isset() zu prüfen, aber da bin ich noch etwas unschlüssig.

    meine gruselige php sieht so aus

    PHP-Code:
    <?php

    $uri 
    $_SERVER['REQUEST_URI'];
    $uriArray explode('?'$uri);

    $singsel $uriArray[1];
    switch (
    $singsel) {
    case 
    "f=1":header("Location: .\grusel58da.html");break;
    case 
    "f=4":header("Location: .\grusel31e6.html");break;
    case 
    "f=6":header("Location: .\gruselcf19.html");break;
    case 
    "f=7":header("Location: .\gruseld42b.html");break;
    case 
    "f=10":header("Location: .\grusel15ca.html");break;
    case 
    "f=13":header("Location: .\gruseleb13.html");break;
    case 
    "f=14":header("Location: .\grusel9780.html");break;
    default:echo 
    "Site not found!";
    }
    Ich trenne praktisch den Parameter von der url am Fragezeichen:

    https://MeineUrl.de/MeinPhpFile.php?f=1

    ergibt f=1

    Es könnte nun sein, dass entweder kein oder ein falscher Parameter übergeben wird.
    Falsche Parameter fängt das case bzw. am Ende das default ab, fehlende nicht

    Habe, wie gesagt, hier nachgeschaut - den Hinweis auf isset() gefunden, und weiter gegoogelt, wie das aussehen müsste.
    Im Prinzip sollte eine Prüfung mit isset so funktionieren:

    If isset($array[$key]) ...

    Mangels Name / variable "$key" müsste das wohl so aussehen

    PHP-Code:
    <?php

    $uri 
    $_SERVER['REQUEST_URI'];
    $uriArray explode('?'$uri);
    If isset(
    $array[1]) {
    $singsel $uriArray[1];
    ... 
    restlicher code
    }
    Else {
    echo 
    "Site not found!";
    }
    ist das ok oder sollte / muss ich das anders lösen?





  • #2
    Zitat von schauan Beitrag anzeigen
    Ich trenne praktisch den Parameter von der url am Fragezeichen:

    https://MeineUrl.de/MeinPhpFile.php?f=1

    ergibt f=1
    Warum einfach wenn es auch umständlich geht … Warum verwendest du nicht einfach $_GET['f'] um auf den Wert in der URL zuzugreifen?

    Das switch-Konstrukt würde ich aber auch rauswerfen und ein Array mit den f-Werten als Key und Datei als Wert bauen (Pseudocode):
    Code:
    $array = [
      1 => foo
      2 => bar
    ]
    if isset $_GET['f'] and array_key_exists $_GET, $array
      header ...
    else
      echo nix da

    Kommentar


    • #3
      Hallöchen,

      also, ich freue mich, dass ich armer alter Anfänger nach gut 3 Stunden das kleine php ohne weitere Hilfe fertig bekommen habe. Habe dabei noch ein paar Webseiten zu Arrays, Textzusammensetzung usw. in php "studiert". Mit try and error hab ich an allen möglichen Stellen und mit unterschiedlichster Syntax rumprobiert und dank einer Beschreibung der Syntax von isset in Zusammenhang mit if letztlich auch die Klammersetzung hinbekommen Ich habe keine lokale Testumgebung sodass ich das immer hochlade und dann online teste, was dann natürlich auch etwas länger dauert. ...

      PHP-Code:
      if ((isset($_GET['f'])) and (array_key_exists($_GET['f'], $array))) { 
      komplett sieht es jetzt so aus - die keys im Array sind eventuell auch ohne ' gängig und die Zuweisung von GET['f'] an $txt wäre, wenn man da eine Variable verwenden will, am Anfang des php sinnvoller nebst Einsatz an den anderen 3 Stellen

      PHP-Code:
      <?php
      $array 
      = ['1' => "58da"'4' => "31e6"'6' => "cf19"'7' => "d42b"'10' => "15ca"'13' => "eb13"'14' => "9780"];
      if ((isset(
      $_GET['f'])) and (array_key_exists($_GET['f'], $array))) {
         
      header("Location: ./grusel_vba".$array[$_GET['f']].".html");
      }
      else {
      $txt=$_GET['f'];
      echo 
      "Leider nix gefunden " $txt;
      }
      ?>
      In meiner eigentlichen "Umgebung", also mit VBA, hätte ich das wohl in weniger als 3 Minuten hinbekommen Basic und später VBA mach ich aber auch schon seit gut 40 Jahren. Und jetzt - frei nach Udo Jürgens - fängt mit 66 das (PHP-) Leben an

      Also, Danke für den Ansatz, habe wieder einiges dazu gelernt



      Kommentar


      • #4
        PHP-Code:
        <?php
          
        $uri 
        $_SERVER['REQUEST_URI'];
        $uriArray explode('?'$uri);

        if( 
        == count($uriArray[1])){
            
        $singsel $uriArray[1];  
            switch (
        $singsel) {
                case 
        "f=1":     header("Location: .\grusel58da.html");break;
                case 
        "f=4":     header("Location: .\grusel31e6.html");break;
                case 
        "f=6":     header("Location: .\gruselcf19.html");break;
                case 
        "f=7":     header("Location: .\gruseld42b.html");break;
                case 
        "f=10":    header("Location: .\grusel15ca.html");break;
                case 
        "f=13":    header("Location: .\gruseleb13.html");break;
                case 
        "f=14":    header("Location: .\grusel9780.html");break;
                default:        echo 
        "Site not found!";
            }
        }else{
            echo 
        "falsche Parameter";    // man kann auch per & weiter anhängen
        }
        So würde ich das per swich lösen:
        PHP-Code:
        if( isset( $_GET['f']){
            
        $idintval$_GET['f']);
            switch( 
        $singsel) {
                case 
        1:     header"Location: .\grusel58da.html");break;
                case 
        4:     header"Location: .\grusel31e6.html");break;
                case 
        6:     header"Location: .\gruselcf19.html");break;
                case 
        7:     header"Location: .\gruseld42b.html");break;
                case 
        10:    header"Location: .\grusel15ca.html");break;
                case 
        13:    header"Location: .\gruseleb13.html");break;
                case 
        14:    header"Location: .\grusel9780.html");break;
                default:    echo 
        "Site not found!";
            }
        }else{
            echo 
        "Site not found!";

        Und so per Array:
        PHP-Code:
        $aSite=    array(    "f_1"    => ".\grusel58da.html"),
                            
        "f_4"    => ".\grusel31e6.html"),
                            
        "f_6"    => ".\gruselcf19.html"),
                            
        "f_7"    => ".\gruseld42b.html"),
                            
        "f_10"    => ".\grusel15ca.html"),
                            
        "f_13"    => ".\gruseleb13.html"),
                            
        "f_14"    => ".\grusel9780.html")
        );

        if( isset( 
        $_GET['f'])){
            
        $key'f_'.intval$_GET['f']);
            if( isset( 
        $aSite[$key])){
                
        header"Location: " $aSite[$key]);
                exit();
            }
        }
        echo 
        "Site not found!"

        Kommentar


        • #5
          Zitat von schauan Beitrag anzeigen
          Ich habe keine lokale Testumgebung sodass ich das immer hochlade und dann online teste, was dann natürlich auch etwas länger dauert. ...
          Wenn ist das mal so sagen darf: Blöde Idee

          Du kannst dir in wenigen Minuten eine Lokale Testumgebung hinstellen, wo du dann auch vernünftige Fehlermeldungen, Logs und Debug-Ausgaben verwenden kannst.
          All das, was ein normaler Besucher eben nicht sehen sollte.

          Außerdem zerlegst du dir im Zweifel nur deine eigene Box und kannst neu installieren.

          "Das ist nur ein Hobbyprojekt, da wird schon nichts passieren" gilt nicht.
          ​​​​​​
          Wenn du im öffentlichen Internet eine Seite oder einen Dienst betreibst, dann solltest du auch sicher sein, dass das alles sicher ist.

          Dabei geht es zu 99% gar nicht um deine eigene Seite. Wenn die zerlegt wird, ist das alleine dein Problem.
          Wenn aber jemand deine Seite verwendet, um damit anderen zu schaden (und der großteil von Botnetzen und Phishing Seiten laufen auf gekaperten fremden Maschinen), dann haben auch alle anderen ein Problem.

          Ein Auto mit defekter Bremse gehört nicht auf die Straße. Wenn du gegen nen Baum schepperst... tough shit. Wenn du gegen nen Fußgänger schepperst... du verstehst die Analogie?

          Außerdem ist es viel bequemer und entspannter, lokal zu entwickeln.

          ​​​Wenn du Hilfe benötigst für ne lokale Umgebung, werrate uns deine Anforderungen (Betriebssystem? Webserver? Datenbank? etc.) und dir kann geholfen werden.

          Kommentar

          Lädt...
          X