2012-03-30 4 views
-3

Ich habe ein HTML-Formular erstellt, in dem Benutzer ihren Namen, ihre E-Mail-Adresse und ihre Sprachkenntnisse angeben. Da ein Benutzer mehr als eine Sprache sprechen kann, kann der Benutzer zusätzliche Zeilen generieren, indem er auf "Hinzufügen" klickt.Verwenden Sie MySQLi Prepared Statement, um dynamische, mehrere Zeilen in die Datenbank einzugeben?

Das Formular wird dann übermittelt und in eine MySQL-Datenbank eingegeben. Ich bin mit zwei Tabellen, die empfangenen Daten zu halten, während der Benutzer-ID in der ersten Tabelle wird auto_incremented wird:

| (user-id) | name | email| 
| user-id | language | proficiency| 

Jetzt versuche ich den PHP-Code zu schreiben, die etwa wie folgt aussieht:

$name = $_POST['name']; 
$email = $_POST['email']; 

$add_table1 = $mysqli->prepare("INSERT INTO table1 (name, email) VALUES (?, ?)"); 
$add_table2 = $mysqli->prepare("INSERT INTO table2 (user_id, language, proficiency) VALUES (?, ?, ?)"); 

$add_table1->bind_param("ss", $name, $email); 
$add_table1->execute(); 
$user-id = $mysqli->insert_id; 

foreach($_POST['language'] as $index => $language) { 
    $index = intval($index); 
    $language = mysql_real_escape_string($language); 
    $proficiency = mysql_real_escape_string($_POST['proficiency'][$index]); 
    $add_table2->bind_param("iss", $user-id, $language, $proficiency); 
    $add_table2->execute(); 
} 
$add_table1->close(); 
$add_table2->close(); 
$mysqli->close(); 

Die Tabelle wie diese

| 1 | Mark | [email protected] | 
| 2 | Sue | [email protected] | 

|1 | English | perfect | 
|1 | Spanish | awesome | 
|2 | English | great | 
|2 | French | ok | 
|2 | Korean | fluent | 

jedoch mit meiner Code-Tabelle aussehen soll 1 sieht gut aus, aber Tabelle 2 sieht aus wie diese

012.
| 1 | | | 
| 2 | | | 

Kann jemand helfen? Vielen Dank!

+1

Warum verwenden Sie mysql_real_escape_string hier? –

+1

Abstimmung zu schließen, als keine echte Frage. Leute um Hilfe mit dem Code zu bitten, der aufgrund von Syntaxfehlern nie funktioniert, macht absolut keinen Sinn. –

Antwort

2

Eine Sache, die ich hervorheben sollte ist, dass Sie nicht mysql_real_escape_string mit vorbereiteten Aussagen verwenden.

Eine andere Sache ist, dass $user-id kein gültiger Variablenname ist. Sie können keinen Bindestrich verwenden.

Edit:

Es ist eine gute Sache, auf die Fehlerberichterstattung zu drehen und die Ausgabe mysqli/mysqli_stmt::$error wenn etwas ausfällt. Die meisten Probleme können damit gelöst werden.

+0

-1 für was genau? – MichaelRushton

+0

Glaubst du, das Problem liegt in mysql_real_escape_string? Ich werde es herausnehmen und sehen, ob es funktioniert. Ja, $ user-id ist eigentlich nur $ userid; Ich habe einen Bindestrich hineingeschoben, um es lesbarer zu machen (was dumm ist :() – nubicurio

+1

@nubicurio Also downvote war, weil du eine Variable mit ungültigem Namen gepostet hast, die du "geklärt" hast, ohne es zu sagen und weil du nicht mysql_real_escape_string mit benutzt hast MySQLi kombiniert mit vorbereiteten Anweisungen? Sie haben wirklich einen guten Ratschlag mit dieser Antwort erhalten, ich schlage vor, Sie hören es. –

1

Ihr PHP-Code sieht ziemlich gut aus. Sind Sie sicher, dass Sie die POST-Werte korrekt abrufen? In der Foreach-Schleife print $ Sprache und $ Kompetenz vor der Ausführung der Abfragen

+0

Ich werde sehen, was ich mir vorstellen kann ... – nubicurio

Verwandte Themen