Ein array übergeben, per POST in PHP eingefügt werden, in MySQL
Ich habe ein Formular, das ermöglicht Benutzern die Eingabe von Klassen und Aktivitäten in mehrere Felder, diese Felder sind erklärt wie diese :
label for ="classact">Classes and Activities</label>
<input type = "text" name = "classact[0]" value ="" id ="classact[0]">
<input type = "text" name = "classact[1]" value ="" id ="classact[1]">
<input type = "text" name = "classact[2]" value ="" id ="classact[2]">
Wenn das Formular übergeben wird, dies ist der code, Griffe in der insert:
$maininsert = "INSERT INTO `camptest`
(`name`, `city`, `phone`, `photo`)
VALUES
('$_POST[name]', '$_POST[city]', '$_POST[phone]', '$photoinfo')
SET @lid = LAST_INSERT_ID()
";
$classactinsert = "INSERT INTO `class_act`
(`cid`";
for($i = 0; $i < 3; $i++)
{
if(isset($_POST['classact'][$i]))
{
$temp = $i+1;
$classactinsert = $classactinsert . ",`act$temp`";
}
}
$classactinsert = $classactinsert . ")
VALUES
('@lid'";
for($i = 0; $i < 3; $i++)
{
if(isset($_POST['classact'][$i]))
{
$classactinsert = $classactinsert . ",'$_POST[classact][$i]";
}
}
$classactinsert = $classactinsert . ")";
$indata = $maininsert . $classactinsert;
$result = mysql_query($indata);
Merke ich, das ist eine Menge code, aber nach dem ausfüllen des Formulars und dem Absenden dieser Abfrage, die generiert wird:
INSERT INTO `camptest` (`name`, `city`, `phone`, `photo`) VALUES ('Multiple Activities', 'Nowhere', '555-555-1111', 'images/51127f6b06d1e.jpg') SET @lid = LAST_INSERT_ID() INSERT INTO `class_act` (`cid`,`act1`,`act2`,`act3`) VALUES ('@lid','Array[0],'Array[1],'Array[2])
Wird die Abfrage nicht einfügen, aber es ist nicht, Sie werfen zurück, alle Fehler, obwohl ich Sie eingeschaltet.
Meine wichtigste Frage ist, was mache ich falsch, dass die Ursache der Werte zu act1, act2 und act3 zu zeigen, wie Array[0], Array[1] und Array[2]?
Meine sekundäre Frage ist, bin ich noch über das der richtige Weg? Ich bin ein wenig neu in php und ich fürchte, ich könnte dies zu tun die harte Weise?
Jede Hilfe würde geschätzt werden, lassen Sie mich wissen, wenn Sie zusätzliche Informationen benötigen.
- Könnte der code anfällig für sql-injection. Versuchen Sie mysqli - api.
- Einfach der Wechsel zu mysqli wird nicht verhindern, dass SQL-injection; in der Tat, es könnte die Sicherheitsanfälligkeit noch schlimmer, da
mysql_query
nicht erlaubt, mehrere Anweisungen in einer SQL-Abfrage (in der Erwägung, dass mysqli kann). Sie wollen wechseln, aber die alte mysql-Kram ist veraltet...aber für die Sicherheit Willen, werden Sie auch lernen wollen, verwenden Sie vorbereitete Anweisungen, die tun einiges, um zu verhindern, dass SQL-injection, wenn richtig eingesetzt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es nicht legen Sie etwas, weil (unter anderem) Ihre query-string ist nicht korrekt gebaut.
Die Apostrophe sind Durcheinander. Ich würde gern vorschlagen, eine (meiner Meinung nach) sauberer und strukturierter zu führen Ihre Aufgabe:
Hinweis: Sie sind offensichtlich in der Arbeit mit den mysql_*-stack, also mein Beispiel ist auch die auf ihm basieren. Aber bewusst sein, dass dies veraltet ist. Nutzen Sie bitte mysqli oder noch besser: PDO statt.
Bitte beachten Sie auch, dass dieser code ist sehr anfällig in Bezug SQL-Injection und sollte absolut nicht in der Produktion verwendet werden!!! Stellen Sie sicher, dass entweder die Verwendung von vorbereiteten Anweisungen (wie mit PDO) oder/und zu desinfizieren Ihre Eingabe richtig.
Auch diese Lösung ist nur mein Vorschlag und eine von vielen Möglichkeiten, es zu tun. Aber hey, Sie nach Ihrer Meinung gefragt 🙂 PHP-ist sehr flexible Sprache, so ist es einfach, Sachen erledigen, aber es gibt viele Möglichkeiten, um es getan, so gibt es immer Chancen zu Holen ein hart ein häßliches. Andere, vor allem stark typisierte Sprachen können verhindern, dass durch das design. Aber PHP ist wirklich einfach zu lernen und ich bin sicher, Ihr code wird allmählich verbessern 🙂
Andere Sache, die ich bemerkt habe: Sie müssen nicht angeben, die array-keys in den HTML-Code, die Sie gerade brauchen, um klar zu machen, dass es ein array mit
[]
hinter dem Namen. Auch bin ich mir nicht sicher, ob dieid
-Attribute, die Sie verwenden, sind gültig, aber möchten Sie vielleicht etwas einfacher:Im nächsten Schritt, möchten Sie vielleicht umgestalten von code ein wenig, um es noch besser zu strukturieren und lesbar. Da Sie der Durchführung einer Aufgabe, die 'einfügen etwas in eine Tabelle', zweimal, könnten wir auch eine resusable Funktion aus:
Es ist sicher genug Raum für Verbesserungen und Optimierung - wollte nur, um Ihnen zu zeigen, wie toll kann PHP sein 😛