[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:
(184328 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.
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:
(184228 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

Veranstaltungskalender

Hier können Sie Ihre Anlässe eintragen, welche einen Zusammenhang mit den Angeboten von HilfDirSelbst.ch wie z.B. Adobe InDesign, Photoshop, Illustrator, PDF, Pitstop, Affinity, Marketing, SEO, Büro- und Rechtsthemen etc. haben. Die Einträge werden moderiert freigeschaltet. Dies wird werktags üblicherweise innert 24 Stunden erfolgen.

pdf-icon Hier eine kleine Anleitung hinsichtlich Bedeutung der auszufüllenden Formularfelder.

Veranstaltungen
14.08.2020 - 18.09.2020

Digicomp Academy AG, Zürich oder virtuell
Freitag, 14. Aug. 2020, 13.00 Uhr - Freitag, 18. Sept. 2020, 15.00 Uhr

Lehrgang

Im berufsbegleitenden Web Publisher Lehrgang vertiefen Sie Ihr Wissen rund um das Thema Screendesign und die Umsetzung von Websites. Wir befähigen Sie dazu selbständig und professionell Ihren Webauftritt zu planen und in die Realität umzusetzen. Erlangen Sie das Digicomp-Zertifikat zum Web Publisher. Mit dem Zertifikat bestätigen Sie Ihre Praxiserfahrungen und Qualifizierung in den genannten Themengebieten gegenüber Ihrem Arbeitgeber sowie Ihren Kunden.

Preis: CHF 3'250.-
Dauer: 8.5 Tage (ca. 56 Lektionen) – Unterricht findet jeweils am Freitag von 13 - 19 Uhr und Samstag von 09 - 17 Uhr statt

Nein

Organisator: Digicomp Academy AG

Kontaktinformation: Isil Günalp, E-Mailisil.guenalp AT digicomp DOT ch

https://www.digicomp.ch/zertifizierung/software-anwendungs-zertifikate/publishing-zertifizierung/lehrgang-web-publisher

Veranstaltungen
19.08.2020 - 20.08.2020

Digicomp Academy AG, Zürich oder virtuell
Mittwoch, 19. Aug. 2020, 08.30 Uhr - Donnerstag, 20. Aug. 2020, 17.00 Uhr

Kurs

Mit After Effects können Sie visuelle Effekte und Animationen für Video, Web, DVD und Blu-Ray erzeugen. In diesem Kurs lernen Sie die Grundlagen kennen und sehen inspirierende Anwendungsbeispiele, die Ihnen helfen, Ihre eigenen Ideen umzusetzen.

Preis: CHF 1'700.-
Dauer: 2 Tage

Nein

Organisator: Digicomp Academy AG

Kontaktinformation: Isil Günalp, E-Mailisil.guenalp AT digicomp DOT ch

https://www.digicomp.ch/weiterbildung/software-anwendungs-trainings/adobe-trainings/video-und-audio-publishing/adobe-after-effects-cc/kurs-adobe-after-effects-basic

Neuste Foreneinträge


Adobe Acrobat Pro 2017: ICC-Farbprofile einrichten / Konvertierungs-/Preflight-Profile

(beschränkter) vertikaler Keil

Anker eines verankerten Objekts verschieben

Kann man mit dem Epson SC P5000 und InDesign CC proofen?

TextStyle2charStyle uppercase (WIN10, CC2020)

Dateien verpacken – Fonts sind versteckt

Horizontal zerschnittene Pfade

Coole Mukke

Legalen In-App Purchase manuell wiederherstellen, wenn Programm diese Funktion verwehrt?

Photo, Designer, Publisher
medienjobs