Ankündigung

Einklappen
Keine Ankündigung bisher.

HTML-Formular, CGI, MySQL - Wo ist der Fehler?

Einklappen

Google Responsive Ad

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • HTML-Formular, CGI, MySQL - Wo ist der Fehler?

    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:

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

  • #2
    AW: HTML-Formular, CGI, MySQL - Wo ist der Fehler?

    Code:
    $sqlData = $dbh->prepare("INSERT INTO adressen (vorname, name, strasse, plz, ort,".
       ".telefon) VALUES
    müsste es heißen ."telefon) ?

    ansonsten speicher dein query einfach in einer Variable und lass dir das ganze einmal anzeigen dann sieht man solche Fehler einfacher
    Forenbeitrag zum Spendemawat 2015 zur Seite Spendemawat2015

    Kommentar


    • #3
      AW: HTML-Formular, CGI, MySQL - Wo ist der Fehler?

      Den Punkt bei Telefon einfach weglassen (ist einer zuviel):
      Code:
      $sqlData = $dbh->prepare("INSERT INTO adressen (vorname, name, strasse, plz, ort, "."telefon) VALUES
      +phpbb_eek
      Zitat von notepad executable
      Die Holländer sind direkt "hoch", andere Länder folgten. Nur wir mal wieder nicht.

      Kommentar


      • #4
        AW: HTML-Formular, CGI, MySQL - Wo ist der Fehler?

        Zitat von CPCoder Beitrag anzeigen
        Den Punkt bei Telefon einfach weglassen [/CODE]
        jupp müßte jetzt funzen

        Kommentar

        Lädt...
        X