PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Daten aus Array in DB ?



Andislack
22-05-2004, 00:03
Hi,

ich hab ein kleines Problem mit Perl.
Habe ein HTML Formular, welches die Daten an ein Perl-Script übergibt.
Ich benutze CGI.pm und greife auf die Daten per
$p->param("variable");
zu.
Das klappt auch gut soweit.
Jetzt möchte ich diese Daten aber gleich in eine mysql DB speichern.
Setze ich aber $p->param("variable") in ein Feld von dem INSERT Kommando ein, bekomme ich folgende Fehlermeldung:
[Sat May 22 00:07:40 2004] [error] syntax error at /DatenI/Homepage/leckerschmecker/web/cgi-bin/hinzufuegen.pl line 62, near ""INSERT INTO t_rezept (kommentar, rezept_name, autor, email, bild) VALUES ('$q->param('kommentar')', '$q->param("rezept_name"

Also er stört sich an den " (Hochkommas) in der Variable.
Jetzt hab ich versucht erst alle in ein Array zu schaufeln mit
@data = $q->param;
und danach versucht das Array mit $data[0] usw. auszulesen. Das geht auch, nur bekomme ich nur die Feldnamen aus dem Formular, nicht den Inhalt !?

Wie spreche ich das Array korrekt an? bzw. wie kann ich die Daten direkt in die DB speichern?

Vielen Dank Gruss Andi

tomes
22-05-2004, 16:13
Also mal von hinten Anfangen:
Wen du das Ganze in ein Array willst, dann mach doch mal dies:
@data=split(/[\=\&]/,$ENV{'QUERY_STRING'});
Die Ungeraden sind dann die Werte, die Geraden die Feldnamen.
Geht aber nur bei GET !!!

Bei POST nimmst du einfach:
@data=$cgi->Vars;
Hier sind auch die Ungeraden dann die Werte.


Aber warum schreibst du die uebergebenen Werte nicht in ein Scalar
my $variable=$p->param("variable");

tomes

Andislack
23-05-2004, 02:45
Hi tomes,

an das mit dem Scalar hatte ich überhaupt nicht gedacht...damit gehts wunderbar.
Nur zum Verständnis nochmal allgemein:
Ich habe ein Array welches ich durch GET übergebene Werte füllen lasse:
@data = $q->param;

Wie kann ich jetzt die einzelnen Felder im Array ansprechen?
Also Name des Feldes im HTML-Formular und der entsprechende Wert dazu?
Wenn ich so drauf zugreife:
print $data[0].":".$data[1] usw. bekomme ich immer nur die Feldnamen aber nicht die Inhalte :confused:

Danke Gruss Andi

tomes
23-05-2004, 10:39
Ich habe ein Array welches ich durch GET übergebene Werte füllen lasse:
@data = $q->param;

the param() method will return the parameter names as a list.
Deshalb wird es nie so gehen, wie du es versuchst ;)



Wie kann ich jetzt die einzelnen Felder im Array ansprechen?

Also ich benutze wie schon in meinem vorigen Beitrag geschrieben, zwei verschiedene Methoden, um die Werte in ein Array oder ein Hash zu bekommen.
s.o.
Wobei du $cgi->Vars; bestimmt auch bei GET benutzen kannst. Ich benutze dann immer die env-Variablen (Die braucht man ja auch fuer andere Sachen).

Die Werte allein, bekommst du mit keiner??? Methode in ein Array. Ausser du schreibst dir eine selber, was den Aufwand nicht lohnen wuerde ;)

Du hast also immer beide Werte. Entweder speicherst du sie in einem Hash, dann bekommst du:
%data=(name1 => 'wert1', name2 => 'wert2');
Oder du speicherst sie in ein Array, dann bekommst du:
@data=('name1','wert1','name2','wert2');

Wie du sie dann ansprechen kannst, weist du ja.
Aber noch einmal kurz:
Array => $data[$i]
Hash => $data{'name'}

tomes