[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:
(156665 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:
(156565 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

Diverses

| 14.02.2020

die-einstellungen_300

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
07.02.2020 - 11.09.2020

Digicomp Academy AG, 8005 Zürich
Freitag, 07. Feb. 2020, 13.00 Uhr - Freitag, 11. Sept. 2020, 12.00 Uhr

Lehrgang

Bilden Sie sich zum zertifizierten Publishing-Multimedia-Profi aus. Neben Fotografie und Video befassen Sie sich mit der Medienproduktion, digitalen Publikationen und dem Webdesign für Desktop- und mobile Endgeräte. Mit dem Abschluss «Publisher Professional – Profil «Multimedia» verliehen durch die Digicomp Academy AG, bestätigen Sie Ihre Praxiserfahrungen und Qualifizierung in den genannten Themengebieten gegenüber Ihrem Arbeitgeber sowie Ihren Kunden.

Preis: CHF 10'500.-
Dauer: 30 Tage (ca. 210 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/weiterbildung/software-anwendungs-trainings/adobe-trainings/publishing-lehrgaenge/lehrgang-publisher-professional-profil-multimedia

Veranstaltungen
22.02.2020 - 04.07.2020

Lehrgang zielgerichtet auf die Zertifizierung zum Publisher Basic

Schulungsraum PubliCollege, Kronenhalde 9d, 3400 Burgdorf
Samstag, 22. Feb. 2020, 13.14 Uhr - Samstag, 04. Juli 2020, 13.15 Uhr

Projektseminar/Lehrgang

Ziele In der Medienproduktion unter Einbezug der aktuellen Publishing-Programme mitarbeiten. Voraussetzungen Sie möchten gestalterisch tätig sein und eigene grafische Ideen kompetent entwickeln sowie umsetzen; Medienproduktionen professionell planen und ausführen. Kompetenzen Nach Abschluss dieses Lehrgangs können Sie Printpublikationen aller Art von der Gestaltung über die Umsetzung bis zu druckfertige PDFs erstellen. Sie sind fähig, CI/CD-Vorgaben umzusetzen. Sie lernen die Grundlagen der grafischen Gestaltung kennen und setzen diese mit Adobe Photoshop, InDesign und Illustrator effizient um.

15 Halbtage, jeweils am Samstag von 08.30 bis 14 Uhr im Kursraum des PubliCollege, 3400 Burgdorf


Daten
Samstag, 22.2., 29.2., 14.3., 21.3., 28.3., 4.4., 25.4., 2.5., 9.5., 16.5., 6.6., 13.6., 20.6., 27.6., 4.7. 2020
Reservedatum am 23.5. 2020

Ja

Organisator: PubliCollege GmbH, 3400 Burgdorf

Kontaktinformation: Beat Kipfer, E-Mailinfo AT publicollege DOT ch

https://www.publicollege.ch/kursangebote/20-publisher-basic

Neuste Foreneinträge


zweite Einstellebene

"Bildabmessungen beim erneuten Verknüpfen erhalten" über Skript an- und ausschalten??

Unterschiedliche Darstellung einer PDF auf Win und MacOs

Back reference in RegexAndStuffLib

Schwarzer Text nach Export in allen 4 Farben

Frage an euch Drucker/Druckvorlagenhersteller bezüglich platzierten Bildern und Auflösung.

Kennt jemand diese Druckplatte: Wifac Star Premium UPC Plus

Monitor für Photoshop

Zusätzliche Funktion in TextEdit verfügbar machen

Letzter Absatz ohne Inital und Platzieren aus Word
medienjobs