Ankündigung

Einklappen
Keine Ankündigung bisher.

Switch/Include - Problem nach Umstellung auf PHP5

Einklappen

Neue Werbung 2019

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

  • Switch/Include - Problem nach Umstellung auf PHP5

    Zugegeben: Ich habe keine große Ahnung von PHP. Vor einiger Zeit habe ich von einem Freund ein Script übernommen, das mir auf Anhieb einfach einzubinden erschien. Soweit, so gut. Allerdings wurde nun der Server von PHP4 auf PHP5 umgestellt. Seither tut es nicht mehr. Habe wirklich schon viel im Netz gestöbert, habe leider bisher keine Lösung für das Problem gefunden.

    Es handelt sich im Grunde um eine Kombination aus SWITCH und INCLUDE. So sieht es zum Beispiel aus:
    Code:
    <? switch ($cms){
                       case "bandinfo": include ("bandinfo.php"); break;
                       case "press": include ("press.php"); break;
                       case "members": include ("members.php"); break;
                       case "history": include ("history.php"); break;
     
                       default: include ("bandinfo.php"); break;
       } ?>
    Aufgerufen werden die Seiten mit Links, z.B. so:
    Code:
    <a href="theband.php?cms=bandinfo">Bandinfo</a>


    Wie gesagt, in PHP4 lief das alles einwandfrei, die verschiedenen Inhalte wurden aufgerufen. Jetzt funktioniert es insofern nicht mehr, als dass nur noch die default-Seite angezeigt wird, egal welchen Link ich anwähle.

    Habe wie hier angeraten, eingetragen.
    Code:
    error_reporting (E_ALL);

    Da wird mir mitgeteilt:
    Code:
    Notice: Undefined variable: cms in /var/www/web140/html/helterskelter/theband/theband.php on line 121

    ... usw. jweils in den Zeilen, in denen die Cases stehen.

    Ok, ich muss etwas ändern, aber wie? Oder liegt es „nur“ an Einstellungen des Servers, die ich ändern kann?`

    Vielen Dank schon mal im Voraus für die Hilfe.


  • #2
    Es liegt eigentlich an den Einstellungen des Servers, wobei sich die Einstellungen bei der Umstellung zu PHP5 aber eigentlich verbessert haben.
    Das Script, wie es vorher war, war zwar korrekt, aber nicht gut.

    Schreib einfach vor die SWITCH-Verzweigung folgende Zeilen:

    PHP-Code:
    if(isset($_POST['cms'])) $cms $_POST['cms'];
    else 
    $cms ''
    Auch das ist nicht perfekt. Eigentlich sollte man den ganzen SWITCH-Teil überspringen, wenn $_POST['cms'] nicht existiert.

    Zum Hintergrund des Problems: In der php.ini (wo die Einstellungen für PHP stehen) gibt es eine Einstellunge "register_globals", die bei alten Servern noch auf 'on' ist. Das bedeutet, dass man auf alle per POST (Formular) oder GET (Formular/URL) übergebenen Variablen direkt mit $variablenname drauf zugreifen kann.
    Heutzutage wird aber empfohlen, "register_globals = off" zu setzen (aus Sicherheitsgründen). Damit kann man nicht mehr direkt über $variablenname, sondern nurnoch über $_POST['variablenname'] bzw $_GET['variablenname'] drauf zugreifen.

    Kommentar


    • #3
      Zitat von Montellese Beitrag anzeigen
      Heutzutage wird aber empfohlen, "register_globals = off" zu setzen (aus Sicherheitsgründen).
      Wobei "Heutzutage" spätestens der 22.April 2002 ist.
      PHP: PHP 4 ChangeLog
      Version 4.2.0
      22-Apr-2002

      * ATTENTION!! register_globals defaults to 'off' now !!!
      Seit PHP 4.2.0 ist es das default-Verhalten von PHP, nur noch _POST, _GET usw. zuzulassen.

      Kommentar


      • #4
        Hm, würde ja gerne erfreut berichten, dass es jetzt super läuft. Leider ist dem nicht so. Was ich jetzt auf jeden Fall weiß ist, dass "register_globals" bei "meinem" Server auf "off" steht.

        Schreib einfach vor die SWITCH-Verzweigung folgende Zeilen:


        PHP-Code:
        if(isset($_POST['cms'])) $cms = $_POST['cms'];
        else $cms = '';


        Bin ja leider wirklich nicht php-fit. Habe es jetzt an diverse Stellen gesetzt, gab immer Fehler. Vermute mal, du meintest es direkt an den Anfang, also noch vor dem switch(cms). In dem Fall gibt es dann nämlich keine Fehlermeldung, allerdings kommt weiterhin nur die default-Seite.

        Hm, oder sollte ich komplett auf den switch-Befehl verzichten. Wie könnte eine Alternative aussehen?

        Bin momentan etwas ratlos, sorry.

        Kommentar


        • #5
          Ich meinte es so:

          PHP-Code:
          <?php

          if(isset($_GET['cms'])) $cms $_GET['cms'];
          else 
          $cms '';

          switch (
          $cms){
              case 
          "bandinfo": include ("bandinfo.php"); break;
              case 
          "press": include ("press.php"); break;
              case 
          "members": include ("members.php"); break;
              case 
          "history": include ("history.php"); break;
           
              default: include (
          "bandinfo.php"); break;

          ?>
          Sorry hatte einen Fehler in meinem anderen Code. Es hätte $_GET anstatt $_POST sein sollen. Hoffe, dass es so klappt.

          Kommentar


          • #6
            Hurra, es klappt!

            Vielen Dank, mal wieder einen Unwissenden ein Stückchen schlauer gemacht.

            Na dann werde ich mal ran machen, die neuen Zeilen überall einzubinden. Habe zwei Webpräsenzen, die im Kern darauf basieren.

            Kommentar

            Lädt...
            X