Überspringt/Ignoriert For-Schleife ?!

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

  • Überspringt/Ignoriert For-Schleife ?!

    Hallo Leute,
    Ich habe ein Problem, unzwar
    hab ich eine Funktion prgrammiert die
    mir false ausspucken soll falls ein nich gewünschtes Zeichen
    in einem String vorhanden ist.
    Baer irgendwie wird die For-Schleife übersprungen,
    habe es getestet in dem ich nach der ersten for-schleife
    testweise echo $i; geschrieben hat, $i wurder aber nicht ausgegeben.
    Was ist der Fehler ?
    Gruß
    Till
    PHP-Code:

    function checkstring($string){
        if(
    $string==''){
            return 
    false;
        }
        else{
            
    $badchars = array(
            
    "0" => "Ä","1" => "ä","2" => "Ö","3" => "ö",
            
    "4" => "Ü","5" => "ü","6" => "!","7" => '"',
            
    "8" => "§","9" => "$","10" => "%","11" => "&",
            
    "12" => "/","13" => "(","14" => ")","15" => "=",
            
    "16" => "?","17" => "`","18" => "´","19" => "*",
            
    "20" => "+","21" => "'","22" => "-","23" => "#",
            
    "24" => "~","25" => ".","26" => ",","27" => "<",
            
    "28" => ">","29" => "|","30" => "°","31" => "_",
            
    "32" => ":","33" => ";","34" => "@","35" => "€");

            for(
    $i=0;$i==strlen($string)-1;$i++){
                for(
    $j=0;$j>count($badchars)-1;$j++){
                    if(
    $string[$i]==$badchars[$j]){
                        return 
    false;
                    }
                
                }
            }
            return 
    true;
        }


  • #2
    warum verwendest du nicht einfach preg_match() ?
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Kommentar


    • #3
      Das wäre auch eine Möglichkeit, mich wurmt es aber das
      meine selbstgschriebene Funktion nicht funkitoniert -.-

      Kommentar


      • #4
        PHP-Code:
        function checkstring($string){
            if(
        $string==''){
                return 
        false;
            }
            else{
                
        $badchars = array(
                
        "0" => "Ä","1" => "ä","2" => "Ö","3" => "ö",
                
        "4" => "Ü","5" => "ü","6" => "!","7" => '"',
                
        "8" => "§","9" => "$","10" => "%","11" => "&",
                
        "12" => "/","13" => "(","14" => ")","15" => "=",
                
        "16" => "?","17" => "`","18" => "´","19" => "*",
                
        "20" => "+","21" => "'","22" => "-","23" => "#",
                
        "24" => "~","25" => ".","26" => ",","27" => "<",
                
        "28" => ">","29" => "|","30" => "°","31" => "_",
                
        "32" => ":","33" => ";","34" => "@","35" => "€");
                foreach(
        $badchars as $value){
                    if(
        strpos($string,$value) !== false){
                        return 
        false;
                    }
                }
                return 
        true;
            }

        So sollte dat funzen...

        Gruss

        tobi
        Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

        [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
        Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

        Kommentar


        • #5
          Hi Tobi, Danke für deine Version der Funktion.
          weiß den keiner wieso die for-Schleife ignoriert wird ?
          Gruß Till

          Kommentar


          • #6
            PHP-Code:
            for($i=0;$i==strlen($string)-1;$i++){ 
            So kann das bestimmt nicht funzen. Alternativ
            PHP-Code:
            for($i=0;$i<=strlen($string)-1;$i++){ 
            Gruss

            tobi
            Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

            [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
            Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

            Kommentar


            • #7
              Original geschrieben von till.kaufmann
              Hi Tobi, Danke für deine Version der Funktion.
              weiß den keiner wieso die for-Schleife ignoriert wird ?
              Gruß Till
              weil du "größer als" statt "kleiner als" als schleifenbedingung notiert hast.

              by the way ist deine funktion crap. sie ist ineffizient und wird auf kurze oder lange sicht nicht funktionieren.
              du sollst nicht (die quasi unendliche menge von) unerlaubte(n) zeichen in eine blacklist packen, sondern die (weit weniger) erlaubten zeichen in eine whitelist packen.

              Kommentar


              • #8
                @axo
                Ich denke nicht, dass die innere Schleife das Problem war (auch wenn sie falsch ist). Die Funktion konnte schon mit der äusseren Schleifenbedingung nichts anfangen...

                Gruss

                tobi
                Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                Kommentar


                • #9
                  Original geschrieben von jahlives
                  @axo
                  Ich denke nicht, dass die innere Schleife das Problem war (auch wenn sie falsch ist). Die Funktion konnte schon mit der äusseren Schleifenbedingung nichts anfangen...
                  stimmt. die äußere ist mir gar nicht aufgefallen.

                  grüße
                  axo

                  Kommentar


                  • #10
                    So ich habs hinbekommen, mensch war ich blöd,
                    irgendwie hab ich das was verplant,
                    jetzt geht es ;-)
                    PHP-Code:
                    function checkstring($string){
                        if(
                    $string==''){
                            return 
                    false;
                        }
                        else{
                            
                    $badchars = array(
                            
                    "0" => "Ä","1" => "ä","2" => "Ö","3" => "ö",
                            
                    "4" => "Ü","5" => "ü","6" => "!","7" => '"',
                            
                    "8" => "§","9" => "$","10" => "%","11" => "&",
                            
                    "12" => "/","13" => "(","14" => ")","15" => "=",
                            
                    "16" => "?","17" => "`","18" => "´","19" => "*",
                            
                    "20" => "+","21" => "'","22" => "-","23" => "#",
                            
                    "24" => "~","25" => ".","26" => ",","27" => "<",
                            
                    "28" => ">","29" => "|","30" => "°","31" => "_",
                            
                    "32" => ":","33" => ";","34" => "@","35" => "€");

                            for(
                    $i=0;$i<strlen($string);$i++){
                                for(
                    $j=0;$j<count($badchars);$j++){
                                    if(
                    $string[$i]==$badchars[$j]){
                                        return 
                    false;
                                    }
                                
                                }
                            }
                            return 
                    true;
                        }

                    Eine Whiteliste wäre durchaus größer, da müsste das ganzen Alphabet und die Zahlen von 0-9 rein.
                    Gruß
                    Till

                    Kommentar


                    • #11
                      Original geschrieben von till.kaufmann
                      Eine Whiteliste wäre durchaus größer, da müsste das ganzen Alphabet und die Zahlen von 0-9 rein.
                      Gruß
                      Till
                      schwachfug. das whitelist-alphabet enthält 26*2 + 10 = 52 + 10 = 62 zeichen.
                      das blacklist-alphabet müsste den unicode-zeichensatz minus diese 62 zeichen beinhalten - wie viele sind das nochmal 1024 - 62 oder 1024^2 - 62 ?
                      selbst bei ascii hast du bereits verloren, denn 128-62 > 62.


                      desweiteren ist es ein grundprinzip beim implementieren von sicherungen, nur erlaubte (und damit bekannte) dinge zuzulassen und nicht einfach die nicht erlaubten dinge aufzuzählen, zu entdecken und zu filtern. was würdest du sagen, wenn ich dir eine elektrische sicherung anbiete, die laut definition bis 3.8 volt funktionieren soll, aber die nur genau dann abschaltet, wenn die spannung 3.9, 3.10, 3.11, 3.12, 3.13, 3.14 ... 3.29 volt beträgt? was passiert denn, wenn auf einmal eine spannung von 4.12 volt drübergejagt wird? dann funktioniert das ganze plötzlich nicht mehr, oder was?

                      im übrigen ist das folgende äquivalent zu deiner funktion.
                      wenn du was lernen willst, lerne auch, nicht zu widersprechen, wenn du keine ahnung hast. bereits als erste antwort hast du den hinweis auf reguläre ausdrücke bekommen, und tunlichst ignoriert. du hättest eher danach suchen sollen als weiter an deinem mist zu hängen.

                      PHP-Code:
                      function checkstring($str) {
                        return (bool) 
                      preg_match('/^[a-z0-9]+$/i'$str);

                      grüße
                      axo
                      Zuletzt geändert von axo; 01.08.2006, 11:54.

                      Kommentar


                      • #12
                        Hi Axo,
                        Werde mir deine Worte das nächste mal
                        an deine Worte denken.
                        Gruß
                        Till

                        Kommentar

                        Lädt...
                        X