[GastForen Archiv Perl und CGI Html-Formular, CGI, MySQL - Wo liegt der Fehler?

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Archiv - Archivierte Foren
Themen
Beiträge
Moderatoren
Letzter Beitrag

Html-Formular, CGI, MySQL - Wo liegt der Fehler?

Adrifu
Beiträge gesamt: 1

1. Apr 2014, 20:52
Beitrag # 1 von 2
Bewertung:
(45782 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Leute,

vielleicht kann mir ein Profi bei meinem Problem helfen:

Ich habe eine Datenbank in MySQL erstellt:

Code
USE test; 
DROP TABLE if exists adressen;
CREATE TABLE adressen (
id int(5) NOT NULL auto_increment,
vorname varchar(30),
name varchar(30),
strasse varchar(30),
plz varchar(30),
ort varchar(30),
telefon varchar(30),
PRIMARY KEY (id),
UNIQUE KEY id (id)
);
INSERT INTO adressen VALUES("1", "Hans", "Muster", "Mustergasse 99",
"9999", "Mustershausen", "099 999 99 99");
INSERT INTO adressen VALUES("2", "Fritz", "Müller", "Hauptstrasse 90",
"8888", "Testeshausen", "088 888 88 88");


und ein HTML-Formular:

Code
<html> 
<body>
<form action="/cgi-bin/sqlinsert.cgi" method="post">
Vorname <input type="text" name="vorname"/><br/>
Name <input type="text" name="name"/><br/>
Strasse <input type="text" name="strasse"/><br/>
PLZ/Ort <input type="text" name="plz"/> <input type="text" name="ort"/><br/>
Telefon <input type="text" name="telefon"/><br/>
<input type="submit" value="absenden"/>
</form>
Oder:
<form action="/cgi-bin/sqlselect.cgi" method="post">
<input type="submit" value="Eintr&auml;ge ansehen"/>
</form>
</body>
</html>


und die dazugehörigen CGI-Scripte:

Code
#!"C:\perl64\bin\perl.exe" -w 
print "Content-type: text/html\n\n";
print "<html><body>";
use DBI;
my ($dbh, $sqlData, $sqlResult, $rowsAffected, $errorCode, %FORM);
$dbh = DBI->connect("DBI:mysql:test:localhost", "root", "1234") or
die("Verbindungsfehler: ".DBI->errstr);

&readForm; # Formulardaten einlesen
foreach (keys(%FORM)) { # Werte backquoten
$FORM{$_} =~ s/([\'\"\`\\])/\\$1/g;
}

# Werte einfügen
$sqlData = $dbh->prepare("INSERT INTO adressen (vorname, name, strasse, plz, ort,".
".telefon) VALUES ('".$FORM{"vorname"}."','".$FORM{"name"}."','".$FORM{"strasse"}.
"','".$FORM{"plz"}."','".$FORM{"ort"}."','".
$FORM{"telefon"}."');");
$rowsAffected=$sqlData->execute;

if ($rowsAffected > 0) { # 1 oder mehr Datensätze betroffen: alles OK
print "Abfrage erfolgreich: $rowsAffected Datensätze betroffen.";
print "ID des Datensatzes: ".$dbh->{'mysql_insertid'}.".";
} else { # Fehler
print "Es ist ein Fehler aufgetreten: ".$dbh->errstr;
}

$sqlData->finish;
$dbh->disconnect;

print "</html></body>";

sub readForm { # Parameter in %FORM einlesen
my ($buffer,@pairs,@pair,$i);
if ($ENV{'REQUEST_METHOD'} eq "GET") {
$buffer = $ENV{'QUERY_STRING'};
} else {
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
}
@pairs = split(/&/, $buffer);
foreach (@pairs) {
@pair = split(/=/, $_, 2);
for ($i=0;$i<2;$i++) {
$pair[$i] =~ tr/+/ /;
$pair[$i] =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
}
$FORM{$pair[0]} = $pair[1];
}
}


und zum auslesen:

Code
#!"C:\perl64\bin\perl.exe" -w 
print "Content-type: text/html\n\n";
print "<html><body>";
print "<table border=\"0\" width=\"100%\">";
use DBI;
my ($dbh, $sqlData, $sqlResult);
$dbh = DBI->connect("DBI:mysql:test:localhost", "root", "1234") or
die("Verbindungsfehler: ".DBI->errstr);

$sqlData = $dbh->prepare("SELECT * FROM adressen;");
$sqlData->execute;
while ($sqlResult = $sqlData->fetchrow_hashref) {
print "<tr valign=\"top\">";
print "<td>".$sqlResult->{"vorname"}." ".$sqlResult->{"name"}."</td>".
"<td>".$sqlResult->{"strasse"}.
"</td><td>".$sqlResult->{"plz"}." ".$sqlResult->{"ort"}."</td>".
"<td>".$sqlResult->{"telefon"}."</td>";
print "</tr>";
}
$sqlData->finish;
$dbh->disconnect;

print "</table></html></body>";


Das auslesen der Datenbank funktioniert einwandfrei nur das Einfügen der Daten macht mir noch Kopfzerbrechen! Ich bekomme folgende Fehlermeldungen:

Code
Es ist ein Fehler aufgetreten: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') VALUES ('Alfons','Alabama','hausstrasse','77777','poltern','0691562')' at line 1 


und die Apache-Error-Log:

Code
[Tue Apr 01 20:27:27 2014] [error] [client 127.0.0.1] DBD::mysql::st execute failed: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') VALUES ('Alfons','Alabama','hausstrasse','77777','poltern','0691562')' at line 1 at C:/Apache/cgi-bin/sqlinsert.cgi line 19.\r, referer: http://localhost/sqlform.html 
[Tue Apr 01 20:27:27 2014] [error] [client 127.0.0.1] Use of uninitialized value $rowsAffected in numeric gt (>) at C:/Apache/cgi-bin/sqlinsert.cgi line 21.\r, referer: http://localhost/sqlform.html


Könnt ihr mir vielleicht helfen das ganze zum laufen zu bringen.
Vielen Dank Vorab.
Hier Klicken X

Html-Formular, CGI, MySQL - Wo liegt der Fehler?

oesi50
  
Beiträge gesamt: 2315

7. Apr 2014, 20:53
Beitrag # 2 von 2
Beitrag ID: #525931
Bewertung:
(45682 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Das soll hoffentlich kein Aprilscherz sein ;-)


1. prepare wird so nicht verwendet.

richtig ist


Code
$sqlData = $dbh->prepare("INSERT INTO adressen (vorname, name, strasse, plz, ort,telefon) VALUES (?,?,?,?,?,?)"); 
$sqlData->execute($FORM{"vorname"}, $FORM{"name"}, $FORM{"strasse"}, $FORM{"plz"}, $FORM{"ort"}, $FORM{"telefon"});


damit wird automatisch auch zuverlässig eine SQL-Injection verhindert. http://de.wikipedia.org/wiki/SQL-Injection

möglicherweise kommt dein Fehler sogar davon.


2. der zweite Fehler ist ein Folgefehler des Ersten.


Grüße Oesi
Ich weiß, dass ich nicht weiß... (Sokrates)


als Antwort auf: [#525779]

Aktuell

Veranstaltungen

Hier können Sie Ihre Anlässe eintragen, welche einen Zusammenhang mit den Angeboten von HilfDirSelbst.ch haben. Die Einträge werden moderiert freigeschaltet. Dies wird werktags üblicherweise innert 24 Stunden erfolgen. pdf-icon Hier eine kleine Anleitung.

Veranstaltungen
16.11.2018

München
Freitag, 16. Nov. 2018, 09.30 - 17.00 Uhr

Workshop

Hochwertig umsetzen, sicher beurteilen: Im Fokus dieses Vertiefungs-Workshops steht Ihre eigene Design-Leistung. Der Praxis-Workshop bietet Profis wertvolle Tipps zu Detail- und Lesetypografie im Kommunikationsdesign. Vom Arbeiten mit halben Leerzeilen im Grundlinienraster über lückenlosen Blocksatz bis zur stilistisch richtigen Schriftmischung: Sie kennen das Handwerk, dieser Workshop macht Sie zum Meister.

Ein-Tages-Workshop von 9:30 bis 17 Uhr
Während des Workshops stehen jedem Teilnehmer ein iMac + Adobe CC zur Verfügung.
Max. 8 Teilnehmer
Normalpreis: € 281,51 netto (€ 335,– brutto)
Ermäßigung: € 239,50 netto (€ 285,– brutto),

Ja

Organisator: TypeSCHOOL

Kontaktinformation: Uwe Steinacker, E-Mailsteinacker AT typeschool DOT de

www.typeschool.de

Detail-Typografie und Layout im Kommunikationsdesign zur Vertiefung
Veranstaltungen
22.11.2018

In dieser Veranstaltung kombinieren wir Emotion und Ratio, Gestaltung und Rechtschreibung.

Hochschule der Medien, Stuttgart
Donnerstag, 22. Nov. 2018, 18.00 - 20.00 Uhr

Vortrag

Sven Tillack und Steffen Knöll vom mehrfach ausgezeichneten "Studio Tillack Knoell", Stuttgart, (studiotillackknoell.com) geben einen Einblick in die Arbeit in der visuellen Kommunikation. Ihr Arbeitsfeld ist digitales und analoges, von visuellen Erscheinungsbildern bis hin zu kommunizierender Grafik im Raum. Besondere Erfahrungen hat Sven bei der Arbeit mit Risographie gemacht, Steffen setzt sich seit längerem mit Grafik im Raum auseinander. Auch über diese Projekte werden sie berichten. Lasst euch von ihnen, ihrem Vortrag und ihrer Arbeit inspirieren. Etienne Roth ist Computerlinguist. Er hat die Duden-Korrekturlösungen bereits als Projektleiter und Produktmanager beim Dudenverlag mitentwickelt. Bei EPC betreut er das Lexikon und die Grammatik(fehler)analyse der Korrekturengine. Außerdem ist er Produktmanager für die Duden-Integration in Adobe InDesign. Bei EPC werden die professionellen Duden-Korrekturlösungen weiterentwickelt, vertrieben und gewartet. Dazu gehören Rechtschreib- und Grammatikkorrektur, Stilprüfung und Thesaurus sowie Werkzeuge zur Wörterbuchpflege, lokal und in Netzwerkumgebungen. Die Duden-Rechtschreibprüfung und Silbentrennung sind seit Version 13 (CC 2018) ein integraler Teil von Adobe InDesign. Viele Kunden vermissen aber die bewährte Grammatikprüfung. Der Duden Korrektor CC bringt die beste Grammatikprüfung für die deutsche Sprache zurück nach InDesign und InCopy. Er enthält außerdem die Stilprüfung und den Thesaurus von Duden. Verlosung: Wir verlosen wieder Software, Bücher und Fachzeitschriften im Wert von über 1000 Euro. Neben dem bekannten "CC-Abo für ein Jahr" nun auch ein "Foto-Abo für ein Jahr mit 1 TB Speicher" und brandneu "10 Bilder pro Monat von Adobe Stock für ein Jahr". Die Firma EPC verlost eine Lizenz "Duden Korrektor CC"! Mach Werbung und bring gerne Freunde und Kollegen mit! Wir freuen uns auf Dich. Katharina Frerichs und Christoph Steffens

Nein

Organisator: IDUG Stuttgart

Kontaktinformation: Christoph Steffens, E-Mailchristoph.steffens AT gmail DOT com

idugs51.eventbrite.com