frage zu php und variabel

Dieses Thema im Forum "Webentwicklung" wurde erstellt von momastieref, 13. Juni 2006 .

Schlagworte:
Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 13. Juni 2006
    also, zu meiner frage:

    ich habe vor links zu erstellen wo variabeln über get hinterhängen, bsp:

    index.php?sec=1
    index.php?sec=2
    index.php?sec=3
    ...

    bei klick auf einen enstsprechenden link soll er dann eine bstimmte html includen,
    soweit so gut, funzt alles

    ich möchte aber jetzt das wenn man auf diese php datei geht und keine variabe gesetzt ist sprich "index.php"

    nicht die else seite aufgeht, sondern eine gewisse andere seite.....ich habe keine ahnung wie ich das erreichen kann!? bitte hälft mir !?

    mein helfer bekommt selbst verständlich einen 10er

    [EDIT]

    habe selbst schon ne lösung gefunden, weiß aber nicht ob das der richtige weg ist!?

    also einfach noch ne else if " if($sec == "") ", ist das so ok oder ist das inkorekte programierung !?
     
  2. 13. Juni 2006
    Hmm, ich habe dein Problem nicht wirklich verstanden ...
    Meinst du die Kontrolle nach dieser GET-Variablen? Ich würde nebenbei übrigens dringenst von $sec abraten und lieber $_GET['sec'] nehmen, ist sicherer!

    PHP:
    <? php

    if( $_GET [ 'sec' ] ==  1 ) {
        include(
    "1,html" );
    } elseif(...) { 
    // elseif ist eine PHP-Funktion und funktioniert quasi wie else if
        
    include(...);
    }
    ...

    // oder du machst das ganze mit switch
    switch( $_GET [ 'sec' ]) {
        default: 
    // default funktioniert wie else bei if
            
    include( '1.html' );
        break; 
    // break ist wichtig!
        
    case  1 :
            ...
        break;
    }

    ?>
    Ich hoffe, ich konnte dir helfen.
     
  3. 13. Juni 2006
    erstmal muss ich dich loben...

    du hast nicht versucht z.b. index.php?sec=blabla.php und dann im code include("$_GET['sec']"); zu machen! das hätte bei dir tür und tor für ein xss geöffnet... <- sowas überprüf ich bei solchen seiten immer als erstes... oft mit erfolg

    zu der version von ma-ju:
    (erstmal hat er recht, was $sec und $_GET['sec'] angeht... (das auszunützen liebe ich auch )
    ich würde das net mit if-abfragen machen; wird unübersichtlich!
    lieber mit switch... jedoch bei deiner lösung bin ich mir net sicher ob sie geht: da default am anfang steht, isses IMHO IMMER wahr; sprich die datei wird IMMER included. auch hier aus gründen der übersichtlichkeit und IMO der semantik: default immer an das ende eines switch...
     
  4. 13. Juni 2006
    Jeder mag ja seine eigenen Scripte am liebsten, also hier mal meine Lösung.
    Das schöne ist, du brauchst keine Dateien in das Script explizit einbinden, also zu ladende Seiten eintragen. Man könnte es "dynamisch" schimpfen

    PHP:
    <? php

        $sec 
    basename ( $_GET [ 'sec' ]);

        if(!
    $sec ) {
            
    $sec = "iLog" // Der Default-Eintrag, d.h. die Startseite beim Aufruf der Domain.
        
    }


        
    $file  "./" . $sec . ".php" ;

        if(!
    file_exists ( $file )) {
            include(
    "404.php" );  // Falls ein Held oben was eingibt, was nicht existiert kommt customized-404 ;)
        
    } else {
            include(
    $file );  // Seite wird "geladen"
        
    }

    ?>
    Es erklärt sich eigentlich von selbst, aber dennoch Kommentare.
    Lesen ja genug mit die noch in den "Anfangsschuhen" stecken.
     
  5. 13. Juni 2006
    ich danke schon mal allen, ihr habt mir alle schon mal weiter geholfen, 10er ist draußen

    [EDIT]

    mein code sieht jetzt so aus, aber damit habe ich immer noch nicht gerefelt, das er wenn er keine variable kriegt das und das macht!? also im klar text:

    wenn die variable sec nicht gegeben ist soll er eine andere seite includen....
    jetzt includet er die home.htm, aber gibt auch noch ein fehler code aus !?

    wie kann ich das machen, ich hoffe ihr versteht mich, ich kann das nicht so ganz umschreiben

    PHP:
    <? php
        
    echo  "<a name='top'></a>" ;
        include 
    "./data/head.htm" ;
        switch (
    $_GET [ "sec" ]) 
            {
            case 
    100 :
                include 
    "./data/home.htm" ;
                break 
    1 ;
            case 
    200 :           
                include 
    "./data/guest.htm" ;
                break 
    1 ;
            case 
    300 :             
                include 
    "./data/forum.htm" ;
                break 
    1 ;
            case 
    400 :                
                include 
    "./data/fotos.htm" ;
                break 
    1 ;
            case 
    401 :                
                include 
    "./fotos/we_1/pic.htm" ;
                break 
    1 ;
            case 
    402 :                
                include 
    "./fotos/we_2/pic.htm" ;
                break 
    1 ;
            case 
    403 :                
                include 
    "./fotos/we_3/pic.htm" ;
                break 
    1 ;
            case 
    404 :                
                include 
    "./fotos/we_4/pic.htm" ;
                break 
    1 ;
            case 
    500 :                
                include 
    "./data/kalender.htm" ;
                break 
    1 ;
            case 
    600 :          
                include 
    "./data/kontakt.htm" ;
                break 
    1 ;
            default:
                include 
    "./data/home.htm" ;  
            }  
        echo 
    "<center><a href='#top'>top...</a></center>" ;    
    ?>
     
  6. 13. Juni 2006
    wenn keine variable angegeben wird, macht der den teil im default block, gibt also keinen fehler
     
  7. 13. Juni 2006
    erstmal reicht ein schlichtes "break;" aus...

    welcher Fehler wird ausgeben?
     
  8. 13. Juni 2006
    Irgendwie ist die Lösung verdammt häßlich.
    Wirkt so HauDrauf-mäßig, sorry.
     
  9. 13. Juni 2006
    den sag mir wie ich es besser machen soll, duch dein code steig ich nicht durch

    und wegen dem fehler, bei meinem server zuhause mit php 5 aufn nen winXP IIS server macht er ein fehler, aufn web server bei funpic nicht
     
  10. 13. Juni 2006
    Eigentlich ist der sehr simple und sicher.
    Schau dir die Funktionen die du nicht kennst einfach auf php.net an, bzw. frag mich zu den Zeilen wo genau du scheiterst.
     
  11. 14. Juni 2006
    hier mal eine eigene schnell mal kommentiert
    PHP:
    <?
    $page  $_GET [ 'sec' ];  // Wir wollen ja nicht mit register_globals vorgehen
    if(isset( $page ) AND  file_exists ( $page )) {  // Wenn sec nicht leer ist und diese Datei auch existiert
        
    include( $page );  // Dann include uns die
    } elseif(isset( $page ) AND ! file_exists ( $page )) {  // Oder wenn sec auch nicht leer ist aber die Datei nicht existiert
        
    include( "error.php" );  // include uns Fehlerseite
    } else {
        include(
    "start.php" );  // Wenn es die beiden oben Abfragen nicht betrifft include uns Startseite
    }
    ?>
     
  12. 14. Juni 2006
    ich sehe in deiner Lösung ein kleines Sicherheitsproblem.
    man könnte rein threoretisch alles includen, was per sec übergeben wird...

    Blöde Frage, aber warum alles über die get-variable includen und nicht die datei direkt aufrufen?
     
  13. 14. Juni 2006
    Sieht nach mehr aus und kommt deshalb besser bei den Mädels an!
     
  14. 14. Juni 2006
    lol

    ne im Ernst.. das is mir schon lange aufgefallen. Jede Seite wird über index.php?page=scheißmichtot.php aufgerufen...
    warum dieser Umweg, der so nichmal zu 100% Suchmaschinenkonform is und außerdem bei falscher Anwendung ein enormes Sicherheitsloch öffnet?
    Ich hab schon diverse Seiten gefunden, bei denen ich durch so nen "Schwachsinn" Zugriff auf Daten hatte, die eigentlich dem Admin vorgesehen sind. Wenn ich ein böser Bube wär, dann wär die Datenbank in 2 Fällen ohne ein Problem platt gewesen.
     
  15. 14. Juni 2006
    Mit *.php im GET ist das ja auch falsch. Ich denke, dass das einfach übersichtlicher so ist, wenn nicht 1000 Dateien aufgerufen werden.
     
  16. 14. Juni 2006
    hm.. Mein erscheint mich bisher als "safe".
    Falls jemand damit Probleme hat, oder nich versteht, fragt!
    Sagt mir wo ihr hängt
     
  17. 14. Juni 2006
    Schon, aber ob jetzt 100mal index.php?page=*** oder 100 mal ***.php in der Adressleiste steht is imo egal

    Die Version von tecnision und ma-ju sollten beide den gewünschten Effekt bringen.
    die version mit "switch-case" hat den Vorteil, dass Dateien, die nicht in der Liste stehen auch nicht geöffnet werden.
    Die andere Version is dagegen kürzer...
     
  18. 14. Juni 2006
    Man könnte ja in meinen Code noch eine gewisse Prüfsumme bzw. einen Signaturcheck einbauen der Sicherstellt das nur vorher markierte Scripte geladen werden
     
  19. 15. Juni 2006
    das ist nicht richtig, ich will einfach zwei html verbinden, so wie frams, und ich sehe nur die möglichkeit das so zu machen......frames will ich nicht weil die sind..............klar, ich könnte auch für jede seite dann eine eigene php mit den includes machen, aber so ist das für mich übersichticher

    desweiteren, wegen dem ".php" im get, das war von mir auch nicht beabsichtigt, weil das ist wirklich ein sicherheits risiko......

    [EDIT]

    zu meinem eigendlichen problem habe ich immer noch keine lösung ¿¡!?
     
  20. 15. Juni 2006
    Beispiel:

    Index.php inkludiert Header.htm und Footer.htm

    Gaestebuch.php inkludiert Header.htm und Footer.htm

    usw.

    Dann brauchst du den ganzen Stuff über die Adressleiste nicht.

    Ist einfacher, geht schneller.
     
  21. 15. Juni 2006
    es sieht jeder anders, ich werde am schluss locker mehr als 100 seiten haben

    ich finde es so besser

    [EDIT]

    noch mal ne andere frage, wie kann ich aus einen wert der aus einer variable stammt dierekt eine andere variable machen !?
     
  22. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.