online 1
gast (50)

/ Forum / Skripte(PHP,ASP,Perl...)

Skripte(PHP,ASP,Perl...)Skripte(PHP,ASP,Perl...)

Fragevon axefg vom 07.07.2022, 22:59 Options

Lösung

Daten via Formular in Tabelle schreiben - ohne Erfolg

Seit mehreren Stunden beschäftige ich mich nun damit - leider ohne Erfolg. Wenn ich gemäss diesem Tutorial http://www.traum-projekt.com/forum/73-workshops-und-tutorials/10327... vorgehe, kann ich keine Daten in die Tabelle schreiben.

Ich gehe folgend vor:

1. Ich erstelle die Tabelle mit

CREATE TABLE `rs_sort` (
`id` INT( 7 ) NOT NULL AUTO_INCREMENT ,
`artikel` VARCHAR( 50 ) NOT NULL ,
`preis` VARCHAR( 20 ) NOT NULL ,
`menge` VARCHAR( 20 ) NOT NULL ,
`einheit` VARCHAR( 20 ) NOT NULL ,
`kategorie` VARCHAR( 20 ) NOT NULL ,
`alter` VARCHAR( 20 ) NOT NULL ,
PRIMARY KEY  (`id`)
) ENGINE = MYISAM


2. passe ich das Formular (folgend) an



<?php
$db_host = "localhost";
$db_user = "web***";
$db_pass = "******";
$db_name = "usr_web***_*";

if (isset( $_POST['eintragen'] ))
{
    // Maskierende Slashes aus POST entfernen
    $_POST = get_magic_quotes_gpc() ? array_map( 'stripslashes', $_POST ) : $_POST;
    
    // Inhalte der Felder aus POST holen
    $artikel = $_POST['artikel'];
    $preis = $_POST['preis'];
    $menge = $_POST['menge'];
    $einheit = $_POST['einheit'];
    $kategorie = $_POST['kategorie'];
    $alter = $_POST['alter'];
    
    /* ************************************************************************************************ */
    /* *** Hier sollten und MUESSEN die Benutzereingaben geprueft werden um Schadcode abzufangen!!! *** */
    /* ************************************************************************************************ */
    
    // Sind alle Eingaben durch die Validierung gekommen werden sie in die DB geschrieben
    // Verbindung oeffnen und Datenbank ausweahlen
    $conID = mysql_connect( $db_host, $db_user, $db_pass ) or die( "Die Datenbank konnte nicht erreicht werden!" );
    if ($conID)
    {
        mysql_select_db( $db_name, $conID );
    }
    
    // Anfrage zusammenstellen der an die DB geschickt werden soll
    $sql = "INSERT INTO `rs_sort`
                (`artikel`, `preis`, `menge`, `einheit`, `kategorie`, `alter`)
            VALUES(
                '" .mysql_real_escape_string( $artikel ). "',
                '" .mysql_real_escape_string( $preis ). "',
                '" .mysql_real_escape_string( $menge ). "',
                '" .mysql_real_escape_string( $einheit ). "',
                '" .mysql_real_escape_string( $kategorie ). "',
                '" .mysql_real_escape_string( $alter ). "',
                  )";
    // Schickt die Anfrage an die DB und schreibt die Daten in die Tabelle
    mysql_query( $sql );
    // Pruefen ob der neue Datensatz tatsaechlich eingefuegt wurde
    if (mysql_affected_rows() == 1)
    {
        echo "<h3>Der Datensatz wurde hinzugefügt!</h3>";
        // Hier kann weiterer Code stehen der ausgefuehrt werden soll
        // wenn ein Eintrag erfolgreich war. z.B. Email an den Admin schicken
        // der ueber den neuen Eintrag informiert
    }
    else
    {
        echo "<h3>Der Datensatz konnte <strong>nicht</strong> hinzugefügt werden!</h3>";
        // Hier koennen Massnahmen ergriffen werden die ueber den Misserfolg informieren
        // wie z.B. den Benutzer darueber zu informieren, dem Admin eine Mail schicken
        // damit er sich um den Fehler kuemmern kann, etc pp
    }
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Formularinhalt in eine Datenbank schreiben</title>
</head>

<body>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" name="formular" id="formular">
Vorname: <input type="text" name="artikel" id="artikel" /><br />
Vorname: <input type="text" name="preis" id="preis" /><br />
Vorname: <input type="text" name="menge" id="menge" /><br />
Vorname: <input type="text" name="einheit" id="einheit" /><br />
Vorname: <input type="text" name="kategorie" id="kategorie" /><br />
Vorname: <input type="text" name="alter" id="alter" /><br />
<input type="submit" name="eintragen" id="eintragen" value="Abschicken" />
</form>
</body>
</html>


Nur geht dies überhaupt nicht. Ich kann keine Daten in die Tabelle schreiben. Hat jemand eine Idee, WOOO ich den Fehler mache?


Antwort schreiben

Antwort 1 von supporter2010 vom 08.07.2022, 02:04 Options

auf jeden Fall würde ich erstmal die Akzent-Zeichen gegen einfache Anführungszeichen austauschen... ` -> '

Antwort 2 von son_quatsch vom 08.07.2022, 09:37 Options

Zitat:
auf jeden Fall würde ich erstmal die Akzent-Zeichen gegen einfache Anführungszeichen austauschen... ` -> '
Das wäre fatal! So wie jetzt ist es nachwievor korrekt.

Zitat:
Nur geht dies überhaupt nicht.
Präziser hätte die Fehlerbeschreibung nicht sein können.

Zunächst mal prüft dein Skript lediglich, ob Datensätze eingefügt wurden oder nicht. Auf etwaige Fehler wird überhaupt nicht geachtet. Ersetze...
mysql_query( $sql );
...mit...
mysql_query( $sql ) or die( "Kommandofehler:\n$sql\n\n". mysql_error() );


Damit sollte sich der erste Fehler offenbahren.

Antwort 3 von supporter2010 vom 08.07.2022, 09:41 Options

sorry für meinen Quatsch :-(

@son_quatsch

Zitat:
auf jeden Fall würde ich erstmal die Akzent-Zeichen gegen einfache Anführungszeichen austauschen... ` -> '

> Das wäre fatal! So wie jetzt ist es nachwievor korrekt.

Kannst Du das vielleicht in 1-3 Sätzen erläutern?

Antwort 4 von son_quatsch vom 08.07.2022, 09:56 Options

http://dev.mysql.com/doc/refman/5.5/en/identifiers.html
Zitat:
An identifier may be quoted or unquoted. ...

The identifier quote character is the backtick (“`”):

http://dev.mysql.com/doc/refman/5.5/en/string-syntax.html
Zitat:
A string is a sequence of bytes or characters, enclosed within either single quote (“'”) or double quote (“"”) characters.


Beides zusammen beißt sich: einen Objektnamen (z.B. Tabelle- oder Spaltenname) kann nicht in Hochkommas stehen - dann wäre es ein Literal. Das hat mittlere bis gravierende Konsequenzen:
SELECT 'spalte' FROM tabelle;
...zeigt nicht etwa den Spalteninhalt an, sondern das Literal spalte selbst.

SELECT spalte FROM 'tabelle';
...führt zu einem Fehler, da an gegebener Stelle kein Text erwartet wird. Und tabelle ist ein Text.

Antwort 5 von supporter2010 vom 08.07.2022, 10:08 Options

okay, danke.
Dass der Bezeichner nicht im Hochkomma stehen sollte leuchtet mir ein (im nachhinein), aber da ich Bezeichner auch bisher immer unquoted benutzt habe war mir das mit dem backtick neu... oder ich habe es verwechselt mit doppelten Anführungszeichen für den Fall, dass der SQL-Server im ANSI-Modus läuft.

Danke nochmal.

Antwort 6 von axefg vom 08.07.2022, 10:29 Options

UI - soviele Antworten. Ich danke euch schon einmal im Voraus.

Ich bekomme nun, nachdem ich
SELECT 'spalte' FROM tabelle;
in
mysql_query( $sql ) or die( "Kommandofehler:\n$sql\n\n". mysql_error() );
geändert habe, folgenden Kommandofehler:

INSERT INTO `rs_sort` (`artikel`, `preis`, `menge`, `einheit`, `kategorie`, `alter`) VALUES( 'Cola', '5', '3', 'dl', 'Kalte Getränke', 'Keine', ) 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 ')' at line 10


Wo liegt nun das Problem? Beim googlen finde ich mehrere Ansätze; einerseits der CHMOD, welcher nicht richtig gestellt sein soll (was ich mir nicht vorstellen kann), andererseits ein falsch gesetztes Default beim SQL-Ausführen (habe ich gar nicht gesetzt).

Antwort 7 von son_quatsch vom 08.07.2022, 10:53 OptionsLösung

Lösung
Zitat:
check the ... syntax to use near ')'
...sagt dir, dass ab oder vor Klammer zu ein Fehler auftrat im Kommando. Und das ist das letzte Komma in deinem Kommando.

Folgerichtig müsste
    $sql = "INSERT INTO `rs_sort`
                (`artikel`, `preis`, `menge`, `einheit`, `kategorie`, `alter`)
            VALUES(
                '" .mysql_real_escape_string( $artikel ). "',
                '" .mysql_real_escape_string( $preis ). "',
                '" .mysql_real_escape_string( $menge ). "',
                '" .mysql_real_escape_string( $einheit ). "',
                '" .mysql_real_escape_string( $kategorie ). "',
                '" .mysql_real_escape_string( $alter ). "',
                  )";
...abgeändert werden, wobei ich eine alternative Schreibweise vorschlage, bei der Zeichen am Anfang der Zeile verwendet werden um exakt solche Flüchtigkeitsfehler zu vermeiden:
  $sql= "INSERT 
           INTO `rs_sort`( `artikel`, `preis`, `menge`, `einheit`, `kategorie`, `alter` )
         VALUES( '" .mysql_real_escape_string( $artikel ). "'
               , '" .mysql_real_escape_string( $preis ). "'
               , '" .mysql_real_escape_string( $menge ). "'
               , '" .mysql_real_escape_string( $einheit ). "'
               , '" .mysql_real_escape_string( $kategorie ). "'
               , '" .mysql_real_escape_string( $alter ). "'
               )";

Antwort 8 von axefg vom 08.07.2022, 11:13 Options

Und alles "nur", wegen einem kleinen, schwarzen Strichen, welches sich auf meinem Bildschirm befindet.

Aber ich danke dir viel mals. Nicht nur für die Lösung, sondern auch für den durchaus guten Tipp i.S. Schreibweise.
Ich werde mir dies merken.

Liebe Grüsse aus der Schweiz
axefg

Ähnliche Themen

batch schreiben
Tekker  10.03.2009 - 238 Hits - 1 Antwort

html datei mit php schreiben
Distroyer  25.09.2009 - 197 Hits - 2 Antworten

VBA in Ini-Datei schreiben
Gast2345  12.10.2009 - 356 Hits - 7 Antworten

PHP parameter in txt schreiben
UnrealMonkey  15.10.2009 - 278 Hits - 5 Antworten

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Thu Jan 8 21:07:44 2026