[Thread Prev][Thread Next]   >Date Index >Thread Index

Re: HTML-Formular CGI/DBI in MySQL DB schreiben - Kopfschmerzen

Stephen Riehm - Sun Aug 26 13:36:43 2007


Hi Stefan,

'use strict' is the key here. By specifying use strict, you are asking perl to prevent common stupid mistakes, like using variables that haven't been explicitly defined.

$user = "dbi" is using an undefined variable.

To define the variables, you need to use my, our or local, depending on the situation. ('my' is the right choice 99% of the time because it restricts the variable to the smallest possible lexicographical scope (ie: the smallest enclosing block))
ie:

my $user = "dbi";

You're already doing this for most of you variables, you just forgot the user, password etc.

Steve

On 26.08.2007, at 13:06, Stefan Bauer wrote:


Hallo Liste,

nach langer Zeit, wollte ich mal wieder etwas mit Perl
experimentieren. Hab mir hierzu einschlägige Infos von Renée Bäcker zu
Herzen genommen und versuche gerade die übergebenen Werte aus meiner
HTML-Seite in eine DB zu schreiben.

Die HTML-Datei enthällt Felder wie:

  <td style="width: 143px;">Vorname:</td>
      <td style="width: 280px;"><input size="30" maxlength="15"
name="Vorname"></td>
    </tr>
    <tr>
      <td style="width: 143px;">Nachname:</td>
      <td style="width: 280px;"><input size="30" maxlength="15"
name="Nachname"></td>
    </tr>

Die HTML-Datei ruft über einen <form action="comments.pl"
method="post"> Aufruf das CGI-Skript auf:


#!/usr/bin/perl -w

use strict;
use CGI;
my $cgi = new CGI;
use CGI::Carp qw(fatalsToBrowser);

my @Feldnamen = $cgi->param();

use DBI;

$user = "dbi";
$passwort = "dbi";
$datenbank = "dbi";
$treiber = "dbi:mysql:" . $datenbank;

#oeffnen der datenbankverbindung

        my $dbh = DBI->connect($treiber, $user, $passwort)
                or die "Kann nicht zur DB verbinden: " . DBI->errstr;


# eintragung durchfuehren

      foreach my $Feld (@Feldnamen) {


my $sth = $dbh->prepare('INSERT INTO spieler ($Feld)
VALUES('$cgi->param($Feld)')
                or die "Kann Daten nicht eintragen: " . $dbh->errstr;

$sth->execute;

}
        $dbh->disconnect;


Leider klappt das nicht sonderlich gut und ich bekomme nur:

Global symbol "$user" requires explicit package name sowie einen
Syntax-Fehler in dem SQL-Statement.

Ich hatte hierzu schon die cpan CGI und DBI Page besucht, mir fehlt
aber scheinbar noch etwas das Verständnis.

Für jeden Hinweis dankbar.

Gruß

--

stefan.bauer@plzk.de			Josef-Führer-Str. 30
Phone  +49 89 26 216 964		80997 München	
Mobile +49 179 11 94 767		http://www.plzk.de

Bitte senden Sie mir keine Word- oder PowerPoint-Anhänge.
Siehe http://www.gnu.org/philosophy/no-word-attachments.de.html

Steve



Next: