dgr243 Geschrieben 18. Oktober 2004 Teilen 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 ! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
dgr243 Geschrieben 18. Oktober 2004 Autor Teilen 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... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
alligator Geschrieben 18. Oktober 2004 Teilen 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
dgr243 Geschrieben 18. Oktober 2004 Autor Teilen 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* Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
alligator Geschrieben 18. Oktober 2004 Teilen Geschrieben 18. Oktober 2004 Hi, naja du musst es auch um alle Sonderzeichen erweitern usw. Ich würde das anderstrum machen. cya alligator Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
DevilDawn Geschrieben 18. Oktober 2004 Teilen 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.