Wolfgang: CGI/DBI - Problem

Hi,
ich habe folgendes Problem und komme einfach nicht auf den Fehler!

Ich habe ein Formular, welches mit folgenden Komponenten (nr,ip,host,datum,name,email,url,portfolio,country,text,kommentar) an ein Skript weitergibt. Nun wandle ich diese Formulardaten in Perlvariablen um und möchte nun diese Daten in die Datenbank schreiben.
Das Problem ist allerdings, dass da offensichtlich irgendetwas bei der Übergabe nicht hinhaut.

Wenn Ihr Euch ein Bild machen wollt, dann schaut auf
http://miss.wu-wien.ac.at:81/USERCGI/j9952795/gbook.pl

Bei Fehlschlag des Eintrags wird das QUERY ausgegeben..

hier ein Auszug aus dem Erfassungsskript

Findet Ihr hier einen Fehler oder wo kann ich noch suchen??

use CGI;

$gen_cgi=new CGI;

$ip = $gen_cgi->param('ip');
$host = $gen_cgi->param('host');
$datum = $gen_cgi->param('datum');
$name = $gen_cgi->param('name');
$wohnort = $gen_cgi->param('wohnort');
$email = $gen_cgi->param('email');
$url = $gen_cgi->param('url');
$portfolio = $gen_cgi->param('portfolio');
$country = $gen_cgi->param('country');
$text = $gen_cgi->param('text');
$kommentar = $gen_cgi->param('kommentar');

use DBI;

require "/usr/logins/usercgi/oracle_setup.pl";

$gen_dbh = DBI->connect('DBI:Oracle:','j9952795','j9952795');

$gen_sth = $gen_dbh->prepare
($query="insert into gbook(nr,ip,host,datum,name,wohnort,email,url,portfolio,country,text,kommentar) values
($nr,'$ip','$host','$datum','$name','$wohnort','$email','$url','$portfolio','$country','$text','$kommentar')");

Ich hoffe, dass Ihr mir bei diesem eigentlich lächerlichen Problem helfen könnt. *schonetwasgenervtbin*

lG
Wolfgang

  1. OK, dann will ich mal helfen ...

    Ich arbeite zwar selber erst seit kurzen mit DBI etc. aber vielleicht finden wir ja nen Fehler :)

    (kenne die Fehlermedungen nämlich mitlerweile alle auswendig *g*)

    insert into gbook(nr,ip,host,datum,name,wohnort,email,url,portfolio,country,text,kommentar) values (6,'','','','231 datum=Dienstag, den 16.Juli 2002, um 04:29:32 email=123@dde.ee url=123 wohnort=123 country=afghanistan_fl_d1.gif portfolio=super ip=217.83.46.88 host=pd9532e58.dip.t-dialin.net text=1232132131 kommentar= ','','','','','','','')

    So, das hat er mir entgegengeworfen. Und da sieht man doch schon haufenweise komische Sachen drin :)

    1.) Die Kommas sind Quer beet ... irgendwie fängt es bei $host an, das der keine Kommas mehr macht. Ich verstehe eh nicht, was du mit den ganzen ' bezwecken willst. Also, mir ist klar, Strings müssen in "" stehen, damit die von der DBI bearbeitet werden können. Aber darf man das so machen wie du? Ich denke mal nicht, weil der Fehler zumindest darauf deutet.

    Also, mach mal anstelle von '$ip' "'".$ip"'" ... ist zwar etwas kompliziert, aber ich arbeite damit und sogar mit erfolg :)

    Wenn es das nicht ist, schau nochmal genau nach deinen Kommas. Achja, es könnte auch an deiner Datenbank selber lieben, das ein int erwartet wird und du ihm was anderes zuwirfst (sollte man immer drauf achten *g* ich spreche aus erfahrung *g*)

    1. OK, dann will ich mal helfen ...

      Danke für die Mühe :-)

      insert into gbook(nr,ip,host,datum,name,wohnort,email,url,portfolio,country,text,kommentar) values (6,'','','','231 datum=Dienstag, den 16.Juli 2002, um 04:29:32 email=123@dde.ee url=123 wohnort=123 country=afghanistan_fl_d1.gif portfolio=super ip=217.83.46.88 host=pd9532e58.dip.t-dialin.net text=1232132131 kommentar= ','','','','','','','')

      So, das hat er mir entgegengeworfen. Und da sieht man doch schon haufenweise komische Sachen drin :)

      1.) Die Kommas sind Quer beet ... irgendwie fängt es bei $host an, das der keine Kommas mehr macht. Ich verstehe eh nicht, was du mit den ganzen ' bezwecken willst. Also, mir ist klar, Strings müssen in "" stehen, damit die von der DBI bearbeitet werden können. Aber darf man das so machen wie du? Ich denke mal nicht, weil der Fehler zumindest darauf deutet.

      Also, mach mal anstelle von '$ip' "'".$ip"'" ... ist zwar etwas kompliziert, aber ich arbeite damit und sogar mit erfolg :)

      Das ' steht deshalb, damit SQL das Hochkomma annimmt...zumindest hat uns das der Typ auf der Uni erklärt ;-)) ich glaub an dem liegts nicht, da ich das schon des öfteren genauso verwendet hab..

      Wenn es das nicht ist, schau nochmal genau nach deinen Kommas. Achja, es könnte auch an deiner Datenbank selber lieben, das ein int erwartet wird und du ihm was anderes zuwirfst (sollte man immer drauf achten *g* ich spreche aus erfahrung *g*)

      Ja, ich glaub mittlerweile genau zu wissen wo es liegt, weil datum=12.xxxxxx sollte eigentlich nicht in dieser Form im Query stehen...sprich bei der Übergabe von Formular auf Perl haut irgendwas nicht hin...

      Naja, vielleicht hauts mit dem sauberen Arbeiten hin...welches ich auch nicht glaube....

      noch Vorschläge???

      lG
      Wolfgang

      1. Nochmal, schau dir GENAU die Kommas an!

        Du hast zwischen Datum und eMail kein Komma, geschweige den nen Hochkomma. Zwischen eMail und URL steht auch nix ... --> den Fehler meinte ich. Da wird was nicht so aufgelöst wie du es gerne hättest *g*

        1. Nochmal, schau dir GENAU die Kommas an!

          Du hast zwischen Datum und eMail kein Komma, geschweige den nen Hochkomma. Zwischen eMail und URL steht auch nix ... --> den Fehler meinte ich. Da wird was nicht so aufgelöst wie du es gerne hättest *g*

          Jop, hab ich mittlerweile registriert....ich weiss jetzt auch schon wo genau der Fehler liegt (wie ich es auch vermutet hatte)in der CGI Übergabe vom Formular..aber leider hilft mir das auch nichts weiter....hab einen neuen Thread eröffnet...

          Danke Dir ;-))

          1. Aloha!

            Jop, hab ich mittlerweile registriert....ich weiss jetzt auch schon wo genau der Fehler liegt (wie ich es auch vermutet hatte)in der CGI Übergabe vom Formular..aber leider hilft mir das auch nichts weiter....

            Wie sieht dein Formular aus? enctype="text/plain" drin? Das wäre böse.

            - Sven Rautenberg

            1. Aloha!

              Jop, hab ich mittlerweile registriert....ich weiss jetzt auch schon wo genau der Fehler liegt (wie ich es auch vermutet hatte)in der CGI Übergabe vom Formular..aber leider hilft mir das auch nichts weiter....

              Wie sieht dein Formular aus? enctype="text/plain" drin? Das wäre böse.

              • Sven Rautenberg

              Du bist mein Held !!! Wenn Du mir kurz erklärst, was das eigentlich heißt, dann versteh ich das Problem vielleicht auch....

              D A N K E !!!! :-)))

              1. Aloha!

                Du bist mein Held !!! Wenn Du mir kurz erklärst, was das eigentlich heißt, dann versteh ich das Problem vielleicht auch....

                enctype - Encoding Type. Damit wird festgelegt, welches Datenformat zur Übermittlung an den Server verwendet wird.

                Du mußt den enctype eigentlich nur bei zwei Fällen angeben:

                1. Wenn du per action="mailto:..." das Formular als Mail senden willst, ist enctype="text/plain" ganz gut, weil dadurch menschenlesbare Zeichen gesendet werden. Server kommen mit diesem Format aber in der Regel nicht zurecht.

                2. Wenn du eine Datei hochladen willst, benötigst du zwingend enctype="multipart/form-data".

                In allen anderen Fällen kannst du die enctype-Angabe weglassen (mir fällt jetzt gerade nicht ein, wie der Standardwert heißt), und alles wird funktionieren.

                - Sven Rautenberg

                1. Hoi,

                  In allen anderen Fällen kannst du die enctype-Angabe weglassen (mir
                  fällt jetzt gerade nicht ein, wie der Standardwert heißt), und alles
                  wird funktionieren.

                  Der Standard-Wert ist 'x-form/www-url-encoded'.

                  Gruesse,
                   CK

  2. Hallo,

    sauberer arbeiten:

    use strict;

    use CGI;
    use DBI;

    require "/usr/logins/usercgi/oracle_setup.pl";

    my $cgi = new CGI;
    my $dbh = DBI->connect('DBI:Oracle:','j9952795','j9952795');
    my $qh  = $dbh->prepare('INSERT INTO gbook (nr, ip, host, datum, name, wohnort, email, url, portfolio, country, text, kommentar) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)');

    $dq->execute(
      $cgi->param('ip'),
      $cgi->param('host'),
      $cgi->param('datum'),
      $cgi->param('wohnort'),
      $cgi->param('email'),
      $cgi->param('url'),
      $cgi->param('portfolio'),
      $cgi->param('country'),
      $cgi->param('text'),
      $cgi->param('kommentar')
    ) or die dbq->errstr;

    Gruesse,
     CK