PHP SQL übertragung

Hallo zusammen,

ich habe da ein kleinen Denkfehler und ich weiss nicht wo…

Daten verarbeiten <?php $host = "localhost"; $user = "root"; $password = "9Springe"; $dbname = "TPM01"; $tabelle ="testdb"; $dbverbindung = mysql_connect ($host, $user, $password); HIER DENKE ICH IST DER FEHLER $dbanfrage = "INSERT into testdb values ('0', '$Array[header]', '$Array[artikel]', '$Array[date]')"; if (mysql_db_query ($dbname, $dbanfrage, $dbverbindung)) { print ("Datenbankeintrag erfolgreich."); } else { print ("Es traten Probleme auf."); } mysql_close ($dbverbindung); ?>

Die daten werden einfach nicht in die DB geschrieben…
Es werden nur leere Datensätze geschrieben.

Was mache ich da falsch?

Kann mir jemand bitte helfen!

ich danke für eure Unterstützung.

MFG Andreas

Hier ist der Fehler:

$dbanfrage = "INSERT into testdb values ('0',  '$Array[header]', '$Array[artikel]', '$Array[date]')";

Variablen zwischen einfachen Hochkommata werden nicht ersetzt!
Richtig:

extract $Array;
$dbanfrage = "INSERT into testdb values (0, '".$header."','".$artikel."','".$date."')";

Bemerkung:
extract macht aus den Array-Inhalten einzelne Variablen.
Ich nehme an, der erste Wert (0) ist numerisch.
‚„.$header.“‘ : Einfaches Hochkomma - doppeltes Hochkomma - Verkettungsoperator(.) - $header - Verkettung - doppeltes Hochkomma -
einfaches Hochkomma
usw.

Guten Morgen,

ich danke dir für deine schnelle Antwort!

Nun kommt aber leider ein Fehler beim Ausführen…

Parse error: syntax error, unexpected T_VARIABLE in C:\xampp\htdocs\teste\work.php on line 17

Zeile 17 ist:
extract $Array;

Muss ich nicht $Array erst deklarieren?

mfg

Doch, natürlich. Aber woher die Werte in $Array kommen sollen, können wir schlecht erraten.

[php]<?php

$Array = array(
‚header‘ => ‚a‘,
‚artikel‘ => ‚b‘,
‚date‘ => ‚c‘
);

$dbanfrage = „INSERT INTO testdb VALUES (0, '“ . implode(„', '“, $Array) . „')“;

echo $dbanfrage;[/php]

Sauberer ist es, die Felder, in die du Daten eintragen möchtest, explizit anzugeben, da sonst schnell die Reihenfolge der Werte vertauscht werden kann.

INSERT INTO tbl_name (col1, col2) VALUES (15, 23)

Beachte auch SQL-Injections.

PS: In kratzbaums Beispiel müsste es extract($Array); lauten, also mit Klammern.

wo wir es gerade von SQL Injektion haben.
angenommen ich will eine variable INSERT funktion schreiben, das heisst die tabelle ist variable, die werte die in die tabelle eingetragen werden (natuerlich mittels prepared statement umd sql injection zu verhindern) und die spalten in die die werte eingetragen werden.

wenn ich dieses statement habe:

$sql = 'INSERT INTO '.$tabelle.' ('.$spalte[0].') VALUES (?,?,?,?,?)';

und nur die werte mittels prepared statement einlese, ist das ganze dann sql injektion sicher?
die werte fuer tabelle und spalte werden an die funktion uebergeben.

Danke euch

Das mit dem Code klappt super… nur habe ich nun noch eine Checkbox die ich mit abfragen möchte…
Geht doch dann bestimmt auch so nur mit 1 und 0 als SQL eingabewert in die DB.

mfg
Andreas

@Mad Dog: Ja, das ist sicher. Spezielle Funktionen zum Zusammenbau von Queries übernehmen in der Regel das Escaping.

@Bundi737: Ja. Bei Checkboxen ist der entsprechende Eintrag in $_POST allerdings nur dann vorhanden, wenn die Checkbox markiert wurde.

[php]<?php

if (isset($_POST[‚action‘]) && $_POST[‚action‘] == ‚demo_form‘) {
$test = 0;

if (isset($_POST['test'])) {
    $test = 1;
}

echo 'Wert von test: ' . $test;
exit;

}

?>

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>New</title>
</head>

<body>
    <form method="post" action="">

        <p><input type="checkbox" name="test" value="" /> test</p>
        <p><input type="hidden" name="action" value="demo_form" /><input type="submit" /></p>

    </form>

</body>
[/php]

@Mad Dog: Ja, das ist sicher. Spezielle Funktionen zum Zusammenbau von Queries übernehmen in der Regel das Escaping.

gute danke :slight_smile:
dann bau ich mir da mal was zusammen.