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ä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.