[REGEX] Anfänger-Problem - ist aber spezifisch

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

  • [REGEX] Anfänger-Problem - ist aber spezifisch

    Hallo!
    Ich habe ein kleines RegEx-Problem:

    PHP-Code:
      function validate_data() {

        
    // $data ist ein Array, das vom Benutzer eingegebene MySQL-Daten enthält
        
    global $data;
        
        foreach(
    $data as $data_element) {
          echo 
    $data_element;
          if(!
    ereg("[a-zA-Z0-9_]+"$data_element)) {
            die(
    "Die eingegebenen Daten sind nicht gültig.");
          }
        }
      } 
    Leider gibt mir das Script keine Fehlermeldung aus, selbst wenn ich einen Asterisk * oder ein Leerzeichen in die Daten im Array $data eingebe. Wie kann ich die RegEx verbessern bzw. korrigieren?.. Ich bin leider ein absoluter Anfänger in Sachen Reguläre Ausdrücke und habe mir bloß einige Dinge im Internet durchgelesen.
    danke!
    hsbux
    Eine Fehlermeldung bedeutet, dass du einen Programmierfehler gemacht hast - keine Fehlermeldung bedeutet jedoch nicht unbedingt, dass dein Script fehlerfrei ist!

  • #2
    PHP-Code:
    foreach($data as $wert){
        if(
    preg_match('/^[\\w|\\d|_]*$/',$wert) == 0){
            return 
    false//Funktionen sollten Rückgabewerte geben und keine Ausgaben machen
        
    }else{
           return 
    true;
       }

    Preg_match ist meist schneller.

    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


    • #3
      Anfänger-Problem - ist aber spezifisch

      => Nachts ist es kälter als draußen

      Kommentar


      • #4
        Kann eigentlich nur daran liegen, dass Fehlermeldungen nicht ausgegeben werden.
        Oder die Funktion nicht aufgerufen wird.

        Kommentar


        • #5
          http://pcre.nophia.de/evaluate/index.php Top-Seite zum Testen der Ausdrücke!

          Kommentar


          • #6
            er hat aber ereg gebraucht (right or wrong).

            Kommentar


            • #7
              Original geschrieben von miximaxi
              er hat aber ereg gebraucht (right or wrong).

              ereg ist veraltet, da
              Original geschrieben von jahlives
              Preg_match ist meist schneller.
              Das einzige was preg von ereg sonst unterscheidet, ist das ereg utf8 sicher ist, aber das ist preg mit dem Modifier u auch...

              Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

              bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
              Wie man Fragen richtig stellt

              Kommentar


              • #8
                Was soll das überhaupt für eine if-condition sein? Wenn das sql-statement nicht irgendwelche zeichen enthält, dass soll gestorben werden? wtf?
                [color=black] Important: alt bei <img> ist immer erforderlich · Strings richtig trennen/verbinden · Kiddie-Code hat keine Chance[/color]

                Kommentar


                • #9
                  Original geschrieben von tomstig
                  Was soll das überhaupt für eine if-condition sein? Wenn das sql-statement nicht irgendwelche zeichen enthält, dass soll gestorben werden? wtf?
                  Es wird eine Datei eingebunden, die mySQL-Passwort, mySQL-Benutzername, Datenbanknamen und so weiter enthält. Diese Datei würde vorher dynamisch, als der Benutzer die Daten in ein Form eingegeben hatte. Nun könnte es natürlich sein, dass der Benutzer etwas trottelig ist und die Datei nochmal verändert hat und sich dabei Fehler eingeschlichen haben. Und damit die MySQL-Tabelle nicht zerschossen wird, wird nochmal überprüft ob die Daten noch gültig sind.

                  hsbux

                  P.S.: Ich liege doch richtig damit, dass MySQL-Benutzername, -Passwort sowie Tabellennamen nur alphanumerische Zeichen plus _ enthalten dürfen, oder?
                  Eine Fehlermeldung bedeutet, dass du einen Programmierfehler gemacht hast - keine Fehlermeldung bedeutet jedoch nicht unbedingt, dass dein Script fehlerfrei ist!

                  Kommentar


                  • #10
                    Original geschrieben von jahlives
                    PHP-Code:
                    ...
                        if(
                    preg_match('/^[\\w|\\d|_]*$/',$wert) == 0){
                    ... 
                    Tobi, warum benutzt du denn hier ein "*" und kein "+" ?
                    Wenn der user keine zeichen eingibt (ergo $wert leer ist)
                    würde deine abfrage doch auch true ausgeben. Mit dem "+" könnte man sich doch eine abfrage auf eine leere eingabe ersparen oder hab ich da
                    einen denkfehler?

                    Edit:
                    HSBUX: Auf dieser Seite werden die Grundlagen zu regulären Ausdrücken m.e. für Anfänger einfach verständlich behandelt:www.regenechsen.de
                    Zuletzt geändert von cipolla; 15.04.2006, 12:22.
                    [color=blue]...ich sehe was, was du nicht siehst...und das ist der QUELLTEXT![/color]

                    Kommentar


                    • #11
                      Original geschrieben von hsbux
                      Es wird eine Datei eingebunden, die mySQL-Passwort, mySQL-Benutzername, Datenbanknamen und so weiter enthält. Diese Datei würde vorher dynamisch, als der Benutzer die Daten in ein Form eingegeben hatte. Nun könnte es natürlich sein, dass der Benutzer etwas trottelig ist und die Datei nochmal verändert hat und sich dabei Fehler eingeschlichen haben. Und damit die MySQL-Tabelle nicht zerschossen wird, wird nochmal überprüft ob die Daten noch gültig sind.

                      hsbux

                      P.S.: Ich liege doch richtig damit, dass MySQL-Benutzername, -Passwort sowie Tabellennamen nur alphanumerische Zeichen plus _ enthalten dürfen, oder?
                      Also erstens: im gefragten Code kommt sql überhaupt nicht vor, warum hat einer von sql-statement angefangen?

                      also zweitens: wenn die Daten alphanumerisch sind, so können sie immer noch falsch sein. Ich würde dem mysql jegliche Prüfungen überlassen.

                      und drittens dürfen Datenbank- und Tabellennamen auch exotischer sein sein, das mysql manual kap. 9.2 hat eine Tabelle. Von irgendwelchen Restriktion für usernamen und passworte habe ich in der Schnelle nichts gefunden, und weiss positiv, dass + . und , im Pw gehen, ebenso wie + im Namen .

                      und viertens, sind die preg_ regulären Ausdrücke die echten (PERL-ähnlich), aber im Manual unter P, und ereg usw. (POSIX) vermutlich Fehlleitung, weil sie im Manual unter R sind. Der Frager hat sich einfach verguckt, als er im php Manual reguläre Ausdrücke nachschlagte.

                      und fünften ist die Frage, warum dieser vollkommen richtige Code (wenn auch nicht sinnvoll) die Prüfung nicht macht.

                      Kommentar


                      • #12
                        Original geschrieben von hsbux
                        Es wird eine Datei eingebunden, die mySQL-Passwort, mySQL-Benutzername, Datenbanknamen und so weiter enthält. Diese Datei würde vorher dynamisch, als der Benutzer die Daten in ein Form eingegeben hatte. Nun könnte es natürlich sein, dass der Benutzer etwas trottelig ist und die Datei nochmal verändert hat und sich dabei Fehler eingeschlichen haben. Und damit die MySQL-Tabelle nicht zerschossen wird, wird nochmal überprüft ob die Daten noch gültig sind.

                        hsbux

                        P.S.: Ich liege doch richtig damit, dass MySQL-Benutzername, -Passwort sowie Tabellennamen nur alphanumerische Zeichen plus _ enthalten dürfen, oder?
                        a. bei der eingabe prüfen, ob der eh keine falschen daten eingibt
                        b. schreibst du die mysql-daten in die db? was bringt das? oder wie sonst soll die db zerschossen werden?
                        c. wenn er die datei verändert -> sskm...
                        [color=black] Important: alt bei <img> ist immer erforderlich · Strings richtig trennen/verbinden · Kiddie-Code hat keine Chance[/color]

                        Kommentar


                        • #13
                          Hallo nochmal!

                          @miximaxi: Ich bin der Frager . Und ich habe auch den Text geschrieben, auf den Du geantwortet hast. Und jetzt nochmal lesen

                          @tomstig&miximaxi: okay, ich war etwas ungenau. Zumindest haben wir jetzt das RegEx Problem gelöst.

                          In der Datei, deren Daten überprüft werden, sind die MySQL-Zugangsdaten gespeichert sowie ein Tabellen-Prefix. Wenn dieses ungültige bzw. böse Zeichen enthält, dann kann es die Tabelle zerschießen. Daher möchte ich die Daten nochmal überprüfen.
                          Ich werde mich bezüglich der erlaubten Zeichen in MySQL-Tabellen, Benutzernamen, Passwörtern und andren Daten nochmal schlau machen

                          Was sskm angeht: Hast vielleicht Recht, kann man sich drüber streiten.

                          Edit: Danke für die Links @strauberry und @cipolla
                          Zuletzt geändert von hsbux; 16.04.2006, 03:31.
                          Eine Fehlermeldung bedeutet, dass du einen Programmierfehler gemacht hast - keine Fehlermeldung bedeutet jedoch nicht unbedingt, dass dein Script fehlerfrei ist!

                          Kommentar


                          • #14
                            Im php das du am anfang des thread geschrieben hast ist kein Fehler. Das Problem liegt also anderswo, falls es überhaupt besteht.

                            Kommentar


                            • #15
                              @cipolla
                              Wenn der user keine zeichen eingibt (ergo $wert leer ist)
                              würde deine abfrage doch auch true ausgeben
                              Jop das haste natürlich recht So wäre es dann korrekt
                              PHP-Code:
                              preg_match('/^[\\w|\\d|_]+$/',$string); 
                              Danke für den Tipp

                              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

                              Lädt...
                              X