Variable vergleichen

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

  • Variable vergleichen

    Hallo an alle

    ich habe ein kleines Problem und komme damit nicht weiter!

    Folgendes:
    ich möchte gerne eine Variable vergleichen und prüfen, ob es auch die richtige ist, wenn nicht, dann soll eine Fehlerseite geladen werden!

    Dies ist meine bisherige Überprüfung:

    PHP-Code:
    if (isset($_GET['Seite']) &&
        
    is_string($_GET['Seite'])) {
      
    $site $_GET['Seite'];}
    else {
      
    $site 'Startseite'
    Hier ist das Problem, dass erstmal nur überprüft wird, ob die Variable "Seite" da ist, wenn ja welchen Wert hat sie, diesen Wert dann $site zuordnen und demendsprechenden Content laden, ist die Variable Seite nicht angegeben, dann ordne der Variable $site den Wert Startseite zu.

    Ist jetzt die Variable falsch, z.B. Seite = Seiteee, dann ornde der Variable $site wieder den Wert "Startseite" zu.. Ist ja so auch richtig (laut Code)..

    Aber ich möcht folgende Überprüfung:
    wenn Seite != Seite oder Seite nicht vorhanden, dann ordne der Varaiable $site den Wert "pagenorfound" zu

    wenn Seite vorhanden, dann ordne den Wert von Seite der Variable $site zu...

    Ich hoffe ihr könnt mir helfen!

  • #2
    Ich habe dafür z.B. die Klasse als Beispiel:

    PHP-Code:
    class view {

        public 
    $path        =    'templates';
        public 
    $template;

        public function 
    setTemplate($template) {
            
    $this->template $template;
        }

        public function 
    loadTemplate(){
            
    $file    =    $this->path."\\tmpl.".$this->template.".php";
            
    $exists    =    file_exists($file);

            if (
    $exists === true){
                include(
    $file);
            } else {
                
    $this->template 'tmpl.default';
                
    $file    =    $this->path."\\".$this->template.".php";
                include(
    $file);
            }
        }

    Kommentar


    • #3
      Zitat von sdvs Beitrag anzeigen
      Hier ist das Problem, dass erstmal nur überprüft wird, ob die Variable "Seite" da ist, wenn ja welchen Wert hat sie
      Nein, der Wert wird nicht geprüft, höchstens welchen Typ der Wert hat - und das ist überflüssig, denn GET/POST/COOKIE liefern immer Strings.

      Aber ich möcht folgende Überprüfung:
      wenn Seite != Seite oder Seite nicht vorhanden, dann ordne der Varaiable $site den Wert "pagenorfound" zu

      wenn Seite vorhanden, dann ordne den Wert von Seite der Variable $site zu...
      Dann müsstest du erst mal definieren, wann ein Wert als "vorhanden" gelten soll.
      I don't believe in rebirth. Actually, I never did in my whole lives.

      Kommentar


      • #4
        Zitat von wahsaga Beitrag anzeigen
        Dann müsstest du erst mal definieren, wann ein Wert als "vorhanden" gelten soll.

        ein Wert soll als vorhanden gelten, wenn ein String, egal welcher, in der Variable steckt.

        Denn steckt keiner drin, dann wird der String "Startseite" zugewiesen!

        Ist aber die ganze Variable falsch, dann wird ebenfalls "Startseite" zugewiesen!

        Ich habe das absichtlich so geschrieben, dann mann könnte auch im else zweig angeben "pagenotfound" dann würde aber bei dem Aufruf der Seite ohne Variable ebenfalls die Seite pagenotfound aufgerufen werden.

        deshalb soll geprüft werden, ob die Seite mit options oder Variablen aufgerufen werden oder ohne...

        funktion:
        wenn Seite nicht = Seite, dann pagenotfound

        sollte aber die Webseite ohne Parameter aufgerufen werden, dann soll der Wert Startseite zugeordnet werden.



        Bisher hatte ich immer folgendes:
        1. Webseite hatte falsche Variable, dann Startseite (nicht gewünscht)
        2. Webseite hatte richtige Variable, nur falschen Wert, dann pagenotfound (klappt schon)

        Ich habe den else zweig dann mal umgeschrieben und den Wert "pagenotfound" reingeschrieben, hatte zur Folge, dass bei einem Aufruf der Webseite ohne Parameter die pagenotfound geladen wurde, ist ja auch verständlich!

        Ich möchte nun einfach überprüfen, ob die Varaiable wirklich Seite ist oder nicht, wenn sie es nicht ist, dann pagenotfound, egal welcher Wert drin steckt..

        Problem ist, dass ich auch nicht einfach eine Abfrage starten kann, ob Seite = Seite ist, denn wird die Seite ohne Parameter aufgerufen, dann würde ja wieder pagenotfound als Wert gelierfert werden...

        Kommentar


        • #5
          Zitat von sdvs Beitrag anzeigen
          ein Wert soll als vorhanden gelten, wenn ein String, egal welcher, in der Variable steckt.
          Dazu reicht eigentlich empty bereits aus.

          Denn steckt keiner drin, dann wird der String "Startseite" zugewiesen!
          Noch mal, es gibt an dieser Stelle (wenn) nur Werte vom Typ STRING.

          Ist aber die ganze Variable falsch, dann wird ebenfalls "Startseite" zugewiesen!
          Mit "falsch" meinst du also gar nicht gesetzt, undefiniert?
          Bitte drücke dich so präzise wie möglich aus, das ist an der Stelle absolut erforderlich.

          Ich habe das absichtlich so geschrieben, dann mann könnte auch im else zweig angeben "pagenotfound" dann würde aber bei dem Aufruf der Seite ohne Variable ebenfalls die Seite pagenotfound aufgerufen werden.
          Na dann könnte man auf isset zurückgreifen für die erste Prüfung, ob überhaupt ein Parameter übergeben wurde, und dann empty nachschieben.

          funktion:
          wenn Seite nicht = Seite, dann pagenotfound
          Das ist wieder zu unpräzise - was soll "Seite nicht = Seite" ausdrücken?

          Bisher hatte ich immer folgendes:
          1. Webseite hatte falsche Variable, dann Startseite (nicht gewünscht)
          2. Webseite hatte richtige Variable, nur falschen Wert, dann pagenotfound (klappt schon)
          Was du als "falsche Variable" ansiehst, hast du immer noch nicht klar definiert.
          I don't believe in rebirth. Actually, I never did in my whole lives.

          Kommentar


          • #6
            Zitat von wahsaga Beitrag anzeigen
            Dazu reicht eigentlich empty bereits aus.


            Noch mal, es gibt an dieser Stelle (wenn) nur Werte vom Typ STRING.


            Mit "falsch" meinst du also gar nicht gesetzt, undefiniert?
            Bitte drücke dich so präzise wie möglich aus, das ist an der Stelle absolut erforderlich.


            Na dann könnte man auf isset zurückgreifen für die erste Prüfung, ob überhaupt ein Parameter übergeben wurde, und dann empty nachschieben.


            Das ist wieder zu unpräzise - was soll "Seite nicht = Seite" ausdrücken?


            Was du als "falsche Variable" ansiehst, hast du immer noch nicht klar definiert.
            richtige Variable = Seite
            falsche Variable = Seiteeee

            Seite != Seite soll ausdrücken, wenn die variable anstatt Seite Seiteee heißt, dann pagenotfound!

            diese Überprüfung brauche ich.. Das der Wert in der Variable Seite ein String ist, habe ich bereits verstanden oder an welcher Stelle habe ich mich dies bezüglich falsch ausgedrückt
            Zuletzt geändert von sdvs; 20.07.2009, 18:18.

            Kommentar


            • #7
              Zitat von sdvs Beitrag anzeigen
              richtige Variable = Seite
              falsche Variable = Seiteeee

              Seite != Seite soll ausdrücken, wenn die variable anstatt Seite Seiteee heißt, dann pagenotfound!
              Wenn du nur auf einen Parameter namens Seite in deinem Script reagieren willst, dann sind Parameter mit irgendwelchen anderen Namen doch sowieso uninteressant.
              I don't believe in rebirth. Actually, I never did in my whole lives.

              Kommentar


              • #8
                Zitat von wahsaga Beitrag anzeigen
                Dazu reicht eigentlich empty bereits aus.
                In den allermeisten Fällen. Man nehme aber an, der String '0' könnte einen Wahrheitswert jenseits von FALSE darstellen, dann fällt man mit empty($_GET['examplevalue']) auf die Nase.
                Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

                Kommentar


                • #9
                  In $_GET Values wirst du immer nur Strings finden, ohne Ausnahme.
                  Wir werden alle sterben

                  Kommentar


                  • #10
                    Zitat von wahsaga Beitrag anzeigen
                    Wenn du nur auf einen Parameter namens Seite in deinem Script reagieren willst, dann sind Parameter mit irgendwelchen anderen Namen doch sowieso uninteressant.
                    Normalerweise sollte das so sein... Mein Problem ist aber, dass die variable geändert wurde von site auf seite.. Jetzt hat google die alten urls mit site indexiert und verweist mit alten nicht mehr vorhandenen urls mit der variable site immer auf die startseite..

                    jetzt möcht ich, dass bei einer falschen variable (genau wie bei einem falschen string in der variable) den wert pagenotfound zuordnen, dazu muss ich aber irgendwie vergleichen, ob das die variable ist, die ich haben will oder nicht!
                    wenn der wert falsch ist, dann wird schon die pagenotfound geladen.. ist aber jedoch die variable falsch, dann wirdt anstatt pagenotfound startseite der wert in der variable..

                    ist ja auch verständlich mehr macht die funktion ja nicht, sie soll jetzt erweitert werden um die funktion, dass überprüft wird, ob die variable richtig ist..
                    ob das überhaupt möglich ist weiß ich nicht, deshalb frage ich euch profis ja!

                    Kommentar


                    • #11
                      PHP-Code:
                      $site = isset($_GET['Seite']) && !is_numeric($_GET['Seite']) ? $_GET['Seite'] :'Startsite'

                      Kommentar


                      • #12
                        Wenn du nur sicher sein willst dss Seite nicht leer ist dann lieber das:

                        PHP-Code:
                        $site = isset($_GET['Seite']) && $_GET['Seite']<>'' $_GET['Seite'] :'Startseite'

                        Kommentar


                        • #13
                          Zitat von sdvs Beitrag anzeigen
                          Normalerweise sollte das so sein... Mein Problem ist aber, dass die variable geändert wurde von site auf seite.. Jetzt hat google die alten urls mit site indexiert und verweist mit alten nicht mehr vorhandenen urls mit der variable site immer auf die startseite..

                          jetzt möcht ich, dass bei einer falschen variable (genau wie bei einem falschen string in der variable) den wert pagenotfound zuordnen, dazu muss ich aber irgendwie vergleichen, ob das die variable ist, die ich haben will oder nicht!
                          wenn der wert falsch ist, dann wird schon die pagenotfound geladen.. ist aber jedoch die variable falsch, dann wirdt anstatt pagenotfound startseite der wert in der variable..
                          PHP-Code:
                          $allowed_parameters = array (
                              
                          'site''Seite',
                          );
                          $page 'Startseite'// Default-Wert
                          foreach ($allowed_parameters as $parameter) {
                              if (
                                  isset(
                          $_GET[$parameter]) && // nur, wenns den Parameter gibt und 
                                  
                          isset($_GET[$parameter][0])  // er nicht leer ist
                              
                          ) {
                                
                          $page $_GET[$parameter];
                                break;
                              }
                          }
                          // ab hier hat $page entweder den voreingestellten Wert
                          // oder den Wert, der per GET übergeben wurde 
                          Entschuldige bitte, dass ich $page statt des von dir benutzten $site verwendet habe, aber dieser Name erschien mir logischer.

                          Zitat von combie Beitrag anzeigen
                          In $_GET Values wirst du immer nur Strings finden, ohne Ausnahme.
                          Fall sich das auf ...

                          Zitat von fireweasel Beitrag anzeigen
                          In den allermeisten Fällen. Man nehme aber an, der String '0' könnte einen Wahrheitswert jenseits von FALSE darstellen, dann fällt man mit empty($_GET['examplevalue']) auf die Nase.
                          ... bezog:

                          Eben! Und weil empty() den String '0' als FALSE bewertet[1] (und TRUE zurückgibt), genauso wie bei einem leeren String '' oder gar keinem Wert, vermeide ich es, empty() zur Auswertung von Strings heranzuziehen. Es gibt bessere Alternativen wie
                          strlen($string), isset($string[0]) usw.

                          Bei allen anderen Datentypen stellt das kein Problem dar.

                          --
                          [1] empty($var) ist das Gleiche wie !((bool) $var) nur ohne Warnung, wenn die Variable nicht existiert.
                          Zuletzt geändert von fireweasel; 21.07.2009, 13:57. Grund: Ergänzt
                          Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

                          Kommentar


                          • #14
                            Zitat von fireweasel Beitrag anzeigen
                            PHP-Code:
                            $allowed_parameters = array (
                                
                            'site''Seite',
                            );
                            $page 'Startseite'// Default-Wert
                            foreach ($allowed_parameters as $parameter) {
                                if (
                                    isset(
                            $_GET[$parameter]) && // nur, wenns den Parameter gibt und 
                                    
                            isset($_GET[$parameter][0])  // er nicht leer ist
                                
                            ) {
                                  
                            $page $_GET[$parameter];
                                  break;
                                }
                            }
                            // ab hier hat $page entweder den voreingestellten Wert
                            // oder den Wert, der per GET übergeben wurde 
                            Entschuldige bitte, dass ich $page statt des von dir benutzten $site verwendet habe, aber dieser Name erschien mir logischer.



                            Fall sich das auf ...



                            ... bezog:

                            Eben! Und weil empty() den String '0' als FALSE bewertet[1] (und TRUE zurückgibt), genauso wie bei einem leeren String '' oder gar keinem Wert, vermeide ich es, empty() zur Auswertung von Strings heranzuziehen. Es gibt bessere Alternativen wie
                            strlen($string), isset($string[0]) usw.

                            Bei allen anderen Datentypen stellt das kein Problem dar.

                            --
                            [1] empty($var) ist das Gleiche wie !((bool) $var) nur ohne Warnung, wenn die Variable nicht existiert.
                            Danke für den Lösungsansatz.. aber selbst wenn ich site aus den erlaubten parametern rausnehme, dann habe ich nach wie vor das problem, dass auf startseite verwiesen wird, wenn site anstatt seite angegeben wird...

                            danke aber trotzdem!

                            Kommentar


                            • #15
                              entschuldige...

                              mitlerweile habe ich gesehen, dass sich schon etwas geändert hat! jetzt würde egal ob site oder Seite angegeben wird (insofern der Wert in der Variable stimmt) immer die richtige Seite angezeigt werden und wenn der Wert nicht stimmt, dann eben die pagenotfound..

                              wäre es möglich etwas einzusetzen, dass jede variable (ausser Seite) als falsch gewertet wird und dann sofort auf pagenotfound verwiesen wird?

                              die Lösung ist schon gut, danke dafür.. Ist jetzt nur rein interessehalber..

                              Also zusammengefasst:
                              Seite ohne parameter 'Startseite'
                              Seite mit parameter 'Seite' und richtigem String Content laden
                              Seite mit parameter 'Seite' und falschem String 'pagenotfound'

                              Seite mit falschem paramter zb seiteeeee und richtigem string 'pagenotfound'
                              Seite mit falschem Parameter und falschem String 'pagenotfound'


                              Vielen lieben Dank schonmal für eure Hilfen!

                              Kommentar

                              Lädt...
                              X