Veröffentlicht 18. Oktober 200420 j Moin zusammen, bastel grad an nem GUI für eine Datenbank mit Perl / CGI. Ich hab nun das Problem, dass ich gerne für alle Tabellen ein einziges Perl Script verwenden möchte. Dieses Script soll einsimples insert into ausführen. Die Tabellen sind allerdings leider so unterschiedlich, dass ich nicht statisch vorgeben kann, welcher Paramter als String und welcher als Zahl an die Datenbank übergeben wird. Ich brauche also eine "Methode" um einen übergebenen Parameter als String zu quoten (mit ' '), wenn dies ein String ist und eben ungequoted als Zahl zu übergeben, wenn es eine Zahl ist. Das Script sieht bis dato wie folgt aus: #Script zur manuellen (Nach-)pflege der DB Tabellen #Fügt einen Datensatz in eine Tabelle ein #übergebene Parameter: Tabellenname, der zu bearbeitenden Tabelle; Feldnamen dieser Tabelle; use DBI; use CGI; #use diagnostics; use POSIX qw(locale_h); use locale; setlocale(LC_CTYPE, "de_DE.Windows-1252"); # Declare variables my $cgi = new CGI; my $dsn = Team_Db; #System DSN im ODBC my $table = $cgi->param('table'); my @fields= $cgi->param(); my @fieldvalues; my $dbh = DBI->connect("DBI:ODBC:$dsn") or die DBI::errstr; #ODBC Verbindung herstellen my $sql = "insert into $table values("; my $i; print $cgi->header; print $cgi->start_html('Manuelle DB Pflege'); for ($i=0;$i<=$#fields;$i++) { $fieldvalues[$i] = $cgi->param($fields[$i]); $sql .= "$fieldvalues[$i],"; } chop($sql); $sql .= ")"; print "SQL: $sql"; print $cgi->end_html(); [/php] Innerhalb der for schleife wollte ich die Paramter quoten (oder eben auch nicht). Jemand ne Idee? Ich steh grad voll auf dem Schlauch... Mucho Gracias schonmal !
18. Oktober 200420 j Autor Ich doof ich .. .mir ist grad der Reg Ex eingefallen: for ($i=0;$i<=$#fields;$i++) { $fieldvalues[$i] = $cgi->param($fields[$i]); $sql .= "'$fieldvalues[$i]'," if ($fieldvalues[$i] =~ m/[A-Za-z]/); $sql .= "$fieldvalues[$i]," if ($fieldvalues[$i] !~ m/[A-Za-z]/); } [/php] Sorry .. naja ist halt Montag Thread kann zu...
18. Oktober 200420 j Hi, wenn ich dich richtig verstanden habe, dann suchst du nen RegExp für die Überprüfung, ob dein String ne Zahl ist? Idee: if($fieldvalues[$i] =~ /^/d+$/) { bla } else { blub}; cya alligator
18. Oktober 200420 j Autor Naja Prüfung ob Zahl = Prüfung ob nicht Buchstaben, oder Jedenfalls funzt es so wie es oben steht. Alelrdings hab ich die Zeichenklasse grad intelligenterweise noch auf Umlaute erweitert. Die werden nämlich sonst nicht gequotet. Aber nu funzt es *freu*
18. Oktober 200420 j Hi, naja du musst es auch um alle Sonderzeichen erweitern usw. Ich würde das anderstrum machen. cya alligator
18. Oktober 200420 j Korrekt das mit den Sonderzeichen. Eine Telefonnummer ist ein treffendes Beispiel (0555-555555), kein Buchstabe - aber muss als String genommen werden. Ich würde Prüfen auf "Nur Zahlen und keine führende Null" (^[1-9][0-9]*$), eine führende Null weist i.d.R. auf einen String hin. (Etwas) Komplizierter wirds wenn floats im Spiel sind
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.