FormParser

    • Hallo Community,

      momentan bin ich grad am schreiben eines kleinen PHP Frameworks für meine zukünftigen Projekte. Eine Sache die mich immer gestört hat, war das auswerten von Formularen.

      Für jedes Formular musste eine extra-Auswertung erfolgen was tierisch genervt hat. Deshalb habe ich mir überlegt eine kleine Klasse zu basteln die mir automatisch Formulare parst.

      Dem Formular übergibt man durch den {formparser}-Tag Parameter, welche dann später über PHP ausgewertet werden. Da ich ein Templatesystem geschrieben habe, wird vor der Ausgabe des parses, die Formparser Klasse aufgerufen, welche die Formulare noch einmal extra parst.

      Kleines Beispiel:
      {formparser=name: formular; maxlen: 12; numeric: no}<input type="text" name="formular" />{/formparser}

      Besagt, dass dieses Feld maximal 12 Zeichen haben darf, sowie nicht numerisch sein darf.

      Da ich Regex erst lernen musste habe ich für den Formparse erst ein paar Tests gemacht, welche ich mit der Öffentlichkeit teilen werde, da sie Webdevs möglicherweise zu ähnlichen Ideen anregt.

      Der Code bisher is crappy und kann fehlerhaft sein. Der Schwerpunkt liegt bisher eben nur darin die Parameter auszulesen und die entsprechenden Formularfelder zu überprüfen.

      PHP-Quellcode

      1. <form action="" method="POST">
      2. {formparser=name:shice; dynname: XY; maxlen: 12; numeric: no;}<input type="text" name="shice" />{/formparser} <br />
      3. <input type="submit" name="sub" />
      4. </form>
      5. <br />
      6. <br />
      7. <?php
      8. $regex = '#\{formparser=(.*)\}(.*)\{/formparser\}#';
      9. $string = preg_match_all($regex, file_get_contents(__FILE__), $result);
      10. $params = explode(";", $result[1][0]);
      11. $parseaguments = array();
      12. foreach($params AS $key => $value){
      13. if($value){
      14. $explstring = explode(":",$value);
      15. $parsearguments[trim($explstring[0])] = trim($explstring[1]);
      16. }
      17. }
      18. $erray = array();
      19. foreach($parsearguments AS $key => $value){
      20. switch($key){
      21. case 'maxlen':
      22. if(strlen($_POST[$parsearguments['name']]) > $value){
      23. $erray[] = "Die Maximale Zeichenlänge von ".$parsearguments['dynname']." beträgt ".$value." Zeichen";
      24. }
      25. break;
      26. case 'numeric':
      27. if($value=='no' && is_numeric($_POST[$parsearguments['name']])){
      28. $erray[] = $parsearguments['dynname']." darf keine Zahlen enthalten";
      29. }
      30. else if($value=='yes' && !is_numeric($_POST[$parsearguments['name']])){
      31. $erray[] = $parsearguments['dynname']." muss numerisch sein";
      32. }
      33. break;
      34. }
      35. }
      36. if(count($erray) > 0){
      37. foreach($erray AS $key => $value){
      38. echo $value."<br />";
      39. }
      40. }
      41. else{
      42. echo "Eingabe korrekt";
      43. }
      44. ?>
      Alles anzeigen


      Schlagt mich nicht für den Code, der wird so auch keine Anwendung in der späteren Klasse finden.
      Dieses Snippet sollte wie es oben steht, nicht verwendet werden. Da keine Sicherheitsvorkehrungen bei Usereingaben getroffen worden sind.

      Genaueres ist in meinem Blog nachzulesen:
      Lunatic Stories

      ~Lunatic
    • Werbung zur Unterstützung des Forums ( Bitte AddBlocker deaktivieren )