Datenübergabe aus Fromular an DB geht nicht richtig

Ich würde gern Daten über ein Formular an die DB versenden.

Habe mich zu diesem Zwecke nun schon seit mehreren Tagen mit allen Seiten beschäftigt die kompletten Code oder Codeschnipsel anbieten die ich als Anfänger verwenden und verstehen konnte.

Nun zu meinem Problem:

Bei Übergabe der Formulardaten an die Tabelle wird nur der ID Wert erzeugt, die beiden Felder die ich noch übergebe werden nicht in der Tabelle eingetragen.

Aufbau dere Tabelle ist:
ID - Auto Inkrement
Header - varchar
Artikel - varchar

db_eingabe.html

[code]

Dateneingabe Überschrift


Artikel

[/code]

work.php

[code]

Daten verarbeiten <?php error_reporting(E_ALL); ?> <?php $host = "localhost"; $user = "dbuser"; $password = "passwort"; $dbname = "dbname"; $tabelle ="dbtabelle"; $dbverbindung = mysql_connect ($host, $user, $password); $dbanfrage = "INSERT into $tabelle values ('0', '$varchar[header]', '$varchar[artikel]')"; if (mysql_db_query ($dbname, $dbanfrage, $dbverbindung)) { print ("Datenbankeintrag erfolgreich."); } else { print ("Es traten Probleme auf."); } mysql_close ($dbverbindung); ?> [/code]

Ich bin, was PHP angeht ein mehr wie blutiger Anfänger und bin für jeden Hinweis dankbar der mich der Lösung meines Problems näher bringt.

Gruss
Chris

Weshalb machst du es dir eigentlich schwieriger als nötig?
varchar[header],varchar[artikel]
Vergib einfach den namen header und artikel ohne daraus ein Array zu erzeugen.

Die Abfrage der Variablen erfolgt dann mittels $_POST[‘header’] und $_POST[‘artikel’].

In deinem Beispiel müsstest du $_POST[‘varchar’] abfragen, einer Variablen zuweisen (z.B. $varchar, welche wiederum ein Array ist, in dem du auf die einzelnen Werte mit $varchar[‘header’] zugreifst.

Im Prinzip ganz gut, dein Stichwort zum Lernen ist noch POST. Ich weiß nicht ob du da jetzt mit register-globals auf on gerechnet hast, es ist jedenfalls auf off. Und den Textfeldern würde ich nicht so komplizierte Namen geben (Ich glaube, da hast du eben ein bisschen was mit POST verwechselt.)

db_eingabe.html

[code]

Dateneingabe Überschrift


Artikel

[/code]

Geändert: Namen der Inputs

work.php

[code]

Daten verarbeiten <?php error_reporting(E_ALL); ?> <?php $host = "localhost"; $user = "dbuser"; $password = "passwort"; $dbname = "dbname"; $tabelle ="dbtabelle"; $header = $_POST['header']; $secureheader = mysql_real_escape_string($header); $artikel = $_POST['artikel']; $secureartikel = mysql_real_escape_string($artikel); $dbverbindung = mysql_connect ($host, $user, $password); $dbanfrage = "INSERT into $tabelle values ('0', '" . $secureheader . "', '" . $secureartikel . "')"; if (mysql_db_query ($dbname, $dbanfrage, $dbverbindung)) { print ("Datenbankeintrag erfolgreich."); } else { print ("Es traten Probleme auf."); } mysql_close ($dbverbindung); ?> [/code] [b]Geändert: POST - Auffassung der Variablen Anmerkung: mysql_real_escape_string() dient zur "Entschärfung" von Anführungszeichen und diverse anderen gefährlichen Objekten, bitte dementsprechend nachlesen![/b]

Mfg
Mgier :wink2:

Vielen Dank für die schnelle Hilfe und den zur Verfügung gestellten Code.

Ich habe in nun soweit umgewandelt:

[code]

Daten verarbeiten <?php error_reporting(E_ALL); ?> <?php $host = "localhost"; $user = "dbuser"; $password = "dbpassl"; $dbname = "dbname"; $tabelle ="tabelle"; $header = $_POST['header']; $artikel = $_POST['artikel']; $dbverbindung = mysql_connect ($host, $user, $password); $dbanfrage = "INSERT into $tabelle values ('0', '$artikel', '$header')"; if (mysql_db_query ($dbname, $dbanfrage, $dbverbindung)) { print ("Datenbankeintrag erfolgreich."); } else { print ("Es traten Probleme auf."); } mysql_close ($dbverbindung); ?> [/code]

das er läuft.

Ich verstehe das mit dem secure in der theorie, habe es aber damit es überhaupt mal ans laufen kommt jetzt rausgenommen und werde mich damit beschäftigen wenn ich denke das ich es auch in allen Belangen umsetzen kann.

Auf jeden Fall nochmals vielen Dank!

Gruß
Chris

Ah Oh Stimmt - Sry…Da müsstest du natürlich vor dieser Funktion eine Datenbankverbindung aufbauaen, hab ich übersehen, a la:

mysql_connect();

mysql_real_escape_string($alle_eingaben);

mysql_query($sql);

mysql_close();

Habe mich ein wenig eingelesen und versucht das Ganze mit real_escap_string zu verfeinern aber irgendwie hänge ich da ein bisschen…

Folgenden Code habe ich mir aus meinem funktionierenden PHP Script zusammengebaut:

[code]//Variablendeklaration für registerglobals_off
$nname = $_POST[‘nname’];
$vname = $_POST[‘vname’];
$eMail = $_POST[‘eMail’];
$typ = $_POST[‘typ’];
$ez = $_POST[‘ez’];
$gruppe = $_POST[‘gruppe’];
$fehlerbeschreibung = $_POST[‘fehlerbeschreibung’];
//$Loesung = $_POST[‘Lösung’];
$Forum = $_POST[‘Forum’];

//Verbindung zur DB aufbauen
$dbverbindung = mysql_connect ($host, $user, $password);

//Datenvariablen füllen
$dbanfrage = sprintf(“INSERT into $tabelle values (‘0’, ‘$nname’, ‘$vname’, ‘$eMail’, ‘$typ’, ‘$ez’, ‘$gruppe’, ‘$fehlerbeschreibung’, ‘’, ‘$Forum’”,
mysql_real_escape_string($nname),
mysql_real_escape_string($vname),
mysql_real_escape_string($eMail),
mysql_real_escape_string($typ),
mysql_real_escape_string($ez),
mysql_real_escape_string($gruppe),
mysql_real_escape_string($fehlerbeschreibung),
mysql_real_escape_string($Forum));

//Prüfung auf Erfolg der Eintragung
if (mysql_db_query ($dbname, $dbanfrage, $dbverbindung)) {
print (“Datenbankeintrag erfolgreich.”);
} else {
print (“Es traten Probleme auf.”);
}

//Verbindung zur Datenbank schliessen
mysql_close ($dbverbindung);[/code]

Jedesmal wenn ich mein Formular aber nun absende bekomme ich die Meldung des Scripts das Fehler aufgetreten sind.

Ist es ein syntaktischer Fehler in meiner Notation oder eher einer der technischen Umsetzung die ich gewählt habe?

Mit bestem Dank
Chris

sprintf(…) sieht falsch aus.
Siehe us.php.net/manual/de/function.sprintf.php

“Es traten Probleme auf.” heist ja, das die abfrage nicht funktioniert hat. Wenn das auftritt, kannst du dir doch einfach vorher den SQL-String ausgeben lassen. Dann siehst du ja, was falsch ist (und kannst ihn zB auch ma in PHPMyAdmin testen)