Frage

Im stecken, versucht, dies jetzt für 2 Stunden, um herauszufinden. Ich habe die foreach-Schleife herausgefunden, aber kann nicht herausfinden, wie die Daten nun eingefügt werden soll.

Hier ist mein php, was mache ich falsch?

    $query = "INSERT INTO images (thumb_path, image_path, main_image, project_id) VALUES ";  
foreach($_POST as $key => $value) {
    $query .= "$thumb_path,$image_path,$main_image,$_POST[project_id])";
    $result = mysql_query($query, $connection);
}

Danke!

Soll ich es liege wie dies aus, sorry noch ein Neuling auf foreach und wie es funktioniert.

foreach($_POST as $key => $value) {
    $query = "INSERT INTO images VALUES (thumb_path, image_path, main_image, project_id),";  
    $query .= "$value[thumb_path], $value[$image_path], $value[$main_image], '$_POST[project_id'])";
}

$result = mysql_query($query, $connection);
War es hilfreich?

Lösung

Mehrere Dinge falsch hier:

  1. Sie fehlt eine öffnende Klammer auf der Liste der Werte (nach VALUES)
  2. Sie führen mysql_query bei jeder Iteration des foreach. Stattdessen möchten Sie wahrscheinlich zuerst die Zeichenfolge bauen (mehrere Wertelisten verwenden), und mysql_query außerhalb der Schleife ausgeführt werden.
  3. Sie können nicht die $_POST['project_id'] Variable in einen String auf diese Weise interpolieren
  4. Sie müssen die $_POST Daten zu entkommen, bevor sie in die Datenbank setzen!
  5. Sie sind nicht wirklich mit dem $key oder $value von Ihrem foreach in Ihrer Anfrage, sie ist nur zu verwerfen es.
  6. Die Variablen innerhalb der Schleife ($thumb_path etc.) wird das gleiche für jede Iteration der sein schlaufen so wirst du die gleichen Daten jedes Mal einzufügen.
  7. Die Logik der Schleife macht einfach keinen Sinn machen. Sie wissen nicht, wie lange $_POST ist, oder was es sein könnte, also warum sind Looping Sie über $_POST?

Einige Hinweise, um Ihnen all dies zu beheben:

  1. Überprüfen Sie die Fehlerprotokoll.
  2. die Zeichenfolge von SQL var_dump, bevor Sie die Abfrage ausführen, um zu überprüfen, ob es syntaktisch und logisch korrekt ist.

Wenn Sie weitere Hilfe benötigen, würde ich vorschlagen, dass Sie var_dump was in $_POST ist, versuchen zu schreiben, was Sie denken, die Abfrage aussehen sollte, und dann beide hier posten. Dann vielleicht jemand helfen Ihnen, von einem zum anderen gehen.

Andere Tipps

Ich finde so etwas wie dies viel einfacher ist eine wiederholte String-Verkettung zu halten, als wie Sie tun:

$values = array();
foreach ($_POST as $key => $value) {
    $qvalue = mysql_real_escape_string($value);
    $values[] = "($field1, $field2, $field3, $qvalue)"; // quoted value, not the raw value
}

$query_values = implode(',', $values);

$query = "INSERT INTO images (field1, field2, field3, field4) VALUES $query_values";
$result = mysql_query($query, $connection);

Denken Sie daran, dass, wenn eine Abfrage wie diese bauen, ist es durchaus möglich ist, eine Abfrage groß genug, um beim Aufbau der max_packet Länge auszunehmen, in dem Fall, dass Sie würde den Einsatz in mehrere kleinere Abfragen aufzuteilen.

Zuerst entkommen $ _POST [project_id] mit mysql_real_esape_string.

Dann wird die Syntax in Tabelle VALUES INSERT (...) (...)

// escape your input
$_POST = array_map('addslashes', $_POST);

// rather than recursively calling mysql_query, you can insert all your rows with one query
// INSERT INTO table (columns) VALUES (data), (data), (data), ...
$values = array();
foreach($_POST as $key => $value) {
    $values[] = "('{$_POST['thumb_path']}', '{$_POST['image_path']}', '{$_POST['main_image']}', '{$_POST['project_id']}')";
}
if(sizeof($values)) {
    $query = "INSERT INTO images (thumb_path, image_path, main_image, project_id) VALUES ".implode(',', $values);
    $result = mysql_query($query, $connection);
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top