dgr243 Geschrieben 18. Oktober 2004 Geschrieben 18. Oktober 2004 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 !
dgr243 Geschrieben 18. Oktober 2004 Autor Geschrieben 18. Oktober 2004 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...
alligator Geschrieben 18. Oktober 2004 Geschrieben 18. Oktober 2004 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
dgr243 Geschrieben 18. Oktober 2004 Autor Geschrieben 18. Oktober 2004 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*
alligator Geschrieben 18. Oktober 2004 Geschrieben 18. Oktober 2004 Hi, naja du musst es auch um alle Sonderzeichen erweitern usw. Ich würde das anderstrum machen. cya alligator
DevilDawn Geschrieben 18. Oktober 2004 Geschrieben 18. Oktober 2004 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
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden