online 1
gast (50)

/ Forum / Skripte(PHP,ASP,Perl...)

Skripte(PHP,ASP,Perl...)Skripte(PHP,ASP,Perl...)

Fragevon bruche vom 08.10.2021, 14:37 Options

Form-Auswertung vereinfachen, aber wie?

Hallo,

ich möchte zu einer Datenbank mit Nutzerdaten (Anrede, Name, Anschrift, Alter etc...) eine Selektion durchführen. Das heißt entweder, es werden alle Datensätze angezeigt oder je nach Eingaben in einem Formular nur bestimmte. Grundsätzlich ist das kein Problem für mich, allerdings ist die Auswertung des Formulars scheinbar ziemlich aufwendig. Vielleicht könnt ihr mir hier weiterhelfen, wie ich das evtl. besser machen kann.

Im Detail:
Das Formular beinhaltet momentan nur Zwei Input-Felder für das Geburtsjahr (von, bis), zwei für PLZ (von, bis) und noch einige andere die aber unwichtig sind. Mir gehts um diese von-bis-Felder.
Also grundsätzlich habe ich es so gemacht, dass ich abhängig von den Eingaben einen SQL-String zusammenbaue den ich ganz zum Schluss abschicke. Das sollte ja erstmal ok sein oder?
Was mir jtezt genau Kopfschmerzen bereitet ist die Auswertung von-bis.

Bei mir sieht das etwa so aus:


        if ($_POST['zip_from'] AND $_POST['zip_to'] AND ctype_digit($_POST['zip_from']) AND ctype_digit($_POST['zip_to'])) {
            $sql .= " WHERE zip BETWEEN '".$_POST['zip_from']."' AND '".$_POST['zip_to']."'";
        } elseif ($_POST['zip_from'] AND ctype_digit($_POST['zip_from'])) {
            $sql .= " WHERE zip >= '".$_POST['zip_from']."'";
        } elseif ($_POST['zip_to'] AND ctype_digit($_POST['zip_to'])) {
            $sql .= " WHERE zip <= '".$_POST['zip_to']."'";
        }


Geht das wirklich nicht leichter? ich muss dsa ja immerhin für alle entsprechenden von-bis-Felder machen...irgendwie gefällt mir die Lösung nicht...
Vielen Dank schon mal


Antwort schreiben

Antwort 1 von son_quatsch vom 08.10.2021, 15:06 Options

Das könnte man folgendermaßen generalisieren:



  // alle möglichen Parameter einmalig definiert:
  // - name = $POST-Parameter, sprich HTML-Variablenname
  // - type = Datentyp; zeigt uns, wie wir später damit umgehen
  // - coloper = DB-Spaltenname und Operand
  $aParam= array
  ( array( 'name'=> 'zip_from', 'type'=> 'int', 'coloper'=> 'zip>= ' )
  , array( 'name'=> 'zip_to', 'type'=> 'int', 'coloper'=> 'zip<= ' )
  );

  $sWhere= '';
  foreach( $aParam as $v1 ) {  // alle übergebenen Parameter durchlaufen
    if( isset( $_POST[$v1['name']] ) ) {  // kennen wir einen davon?
      if( $v1['type']== 'int' ) {  // Datentyp "integer"
        if( ctype_digit( $_POST[$v1['name']] ) ) {  // ist es auch wirklich eine Zahl? Ansonsten ignorieren
          $sWhere.= ' AND '. $v1['coloper']. (int)$_POST[$v1['name']];  // WHERE-String erweitern
        }
      } else die( 'unbekannter typ: '. $v1['type'] );  // unbekannter Datentyp
    }
  }

  // überhaupt Text zusammengesetzt worden? Dann erste AND durch WHERE ersetzen
  if( $sWhere!= '' ) $sWhere= ' WHERE '. substr( $sWhere, 5 );

Ähnliche Themen

Erscheinende Textbox bei mousover Javascript
Computerfreaki  01.04.2008 - 14 Hits - 3 Antworten

UPDATE in einer javascript abfrage?
kibs  31.03.2008 - 7 Hits - 1 Antwort

eregi_replace mit function ?
Fassy91  29.03.2008 - 27 Hits - 1 Antwort

Hilfe: Codes vereinfachen: Loop?
VBA-Rookie  16.12.2008 - 10 Hits - 5 Antworten

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Thu Jan 8 21:07:44 2026