Ich habe eine Form, die eine Checkbox-Liste dynamisch generiert: name="cursoID[]"
Jeder Wert entsprechen cursoID ($curso['cursoID']
), die einen Wert von einer mySQL SELECT
Abfrage genommen ist, die mir eine Liste von Elementen IDs zeigt.PHP: Wie ein Array-Kontrollkästchen Wert und dann jedes einzelne Ergebnis in eine Datenbankabfrage einfügen?
Der Benutzer kann N Anzahl der Elemente auswählen, und ich muss jedes davon nehmen (dh. $cursoID = $_POST['cursoID'];
), um sie in eine INSERT
Abfrage zu speichern.
In der Form, ich jedes Element mit einer while-Schleife erzeugen:
<?php
$conectar = mysqli_connect(HOST, USER, PASS, DATABASE);
$query = " SELECT cursoID, nombreCurso, cursoFechaInicio, modalidadCurso, estadoCurso
FROM cursos
WHERE estadoCurso='abierto'";
$buscarCurso = mysqli_query($conectar,$query);
echo '<div class="checkbox">';
while ($curso=mysqli_fetch_assoc($buscarCurso)) {
echo '<input type="checkbox" name="cursoID[]" value="'.$curso['cursoID'].'">'.$curso['nombreCurso'];
}
echo '</div>';
?>
, um meine Datenbank Konsultation dieses Feld einfügen ist eine einfache select:
INSERT INTO cursosUsuarios
(userID, cursoID)
VALUES
('$userID', '$cursoID')
habe ich keine Probleme mit $ userID, wie auch ein einzelner Wert.
Wie kann ich $cursoID = $_POST['cursoID']
verwenden, um es zur Datenbank hinzuzufügen? Ich habe einige andere Fragen gelesen (wie this one, oder this other one), aber konnte nicht, um es auf meinen Fall anzuwenden, da ich nicht weiß, wie würde ich es in die Datenbank einfügen.
Ihr Code ist auch verwundbar, Sie gingen und machten einen weiteren SQL-Injection-Bug. Warum? Du weißt Casting als "Int" ist lächerlich. Du kannst es besser machen. – tadman
Durch Umwandlung in int ist der Code nicht mehr anfällig für SQL-Injection. Beweisen Sie mich falsch: keiner meiner Code, der Benutzereingaben akzeptiert, ist anfällig. Meine Antwort verweist auf den richtigen Weg, nämlich vorbereitete Aussagen. Das ist es, was ich benutze, aber ich erfinde das Rad nicht neu: Ich habe ihnen gesagt, dass ihr Code verwundbar ist, beantwortete ihre Frage mit Code, der nicht verwundbar ist, und verknüpfte sie mit einer ausführlichen Antwort darüber, wie sie ihren Code tatsächlich sichern kann. Wenn es jedoch um deinen Kommentar geht, ich greife Perlen vor das Schwein, denke ich, denn trotz all dem wirst du verrückt genug, um runterzuziehen. Gut gemacht. – Aaa
Casting zu int ist ein sehr spezieller Fall, der für ein ernstes Problem "repariert" wird. Kannst du für andere Situationen string oder date? Nein. Ich weiß, dass Sie mit der Lösung verbunden sind, aber wenn Sie nicht daran interessiert sind, sie in Ihre Antwort aufzunehmen, wie können Sie erwarten, dass die Person, die die Frage stellt, sich bemüht, es zu versuchen? Es sind buchstäblich zwei Codezeilen, die Sie im Schlaf tun können, wenn Sie mysqli regelmäßig benutzen. Die Parametrisierung von Abfragen dauert weniger als eine Minute. Es sollte eine zweite Natur sein. Es tut mir leid, dass ich deine unausgegorene '(int)' Lösung abgelehnt habe, aber das gibt Leuten ein gefährliches falsches Vertrauen. – tadman