Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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 !

  • 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 :rolleyes:

Thread kann zu...

  • 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 :D *freu*

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.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.