[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:
(45727 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:
(45627 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
12.11.2018 - 14.11.2018

Schulungen und Präsentationen, praktische Trainings zu den Themen Druck, Publishing und Verpackung.

Golden Tulip, Berlin
Montag, 12. Nov. 2018, 09.00 Uhr - Mittwoch, 14. Nov. 2018, 17.00 Uhr

Informationsveranstaltung

Das VIP Event ist eine von axaio software, callas software und Four Pees organisierte Informationsveranstaltung. Als offenes Event ist es eine großartige Gelegenheit für alle, die sich vertiefende Kenntnisse und praktische Erfahrungen mit callas pdfToolbox, pdfaPilot oder pdfChip, axaio MadeToPrint oder MadeToTag, Insoft Imp, Aleyant tFLOW oder Pressero, Creative Edge iC3D, Laidback FileTrain oder einem der anderen Produkte, die Four Pees vertreibt, aneignen möchten. Die Veranstaltung findet vom 12. bis 14. November 2018 in Berlin statt. Während der ersten beiden Tage wird es parallele Tracks mit technischen Schulungen und Präsentationen zu den Themen Druck, Publishing und Verpackung geben. Der dritte Tag steht im Zeichen maßgeschneiderten Trainings. Sie haben die einmalige Chance, ein praktisches Training zu einem beliebigen unserer Produkte zu erhalten. Lassen Sie uns einfach wissen, woran Sie interessiert sind und wir sorgen dafür, dass es auf der Tagesordnung steht!

Wenn Sie sich jetzt anmelden, profitieren Sie von der Frühbucherrabatt. Nutzen Sie die Gelegenheit und sichern Sie sich Ihr Frühbucherticket mit einem Rabatt von € 100 bis zum 2. Juli 2018!

Frühbucherticket bis 2. Juli 2018:
€ 275 pro Teilnehmer (exklusive 19% Ust., exklusive Hotelzimmer)

Reguläres Ticket bis 10. September 2018:
€ 375 pro Teilnehmer (exklusive 19% Ust., exklusive Hotelzimmer)

Spätbucherticket bis 1. November 2018:
€ 449 pro Teilnehmer (exklusive 19% Ust., exklusive Hotelzimmer)

Inbegriffene Leistungen:

- Abendessen am 11. November 2018
- Zugang zu allen Sessions des Seminars, in denen Sie direkten Kontakt zu Entwicklern, Produktmanagement & Management haben
- Kaffeepausen, Mittagessen, Abendaktivitäten und Abendessen am 12. November 2018
- Kaffeepausen und Mittagessen am 13. November 2018
- Training mit Entwicklern und Produktmanagement am 14. November 2018
- Kaffeepausen und Mittagessen am 14. November 2018

Wenn Sie Ihren Partner nach Berlin mitnehmen möchten, beträgt die Gebühr € 199 (exklusive 19% Ust). Das Abendessen am 11. November sowie die Abendveranstaltung und das Abendessen am 12. November sind in dieser Gebühr enthalten.

Ja

Organisator: callas software GmbH, Berlin

https://www.callassoftware.com/de/events/2018/11/vip-event

 VIP Event
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