2016-10-14 4 views
0

Ich speicherte die Daten in einem angeblich ein Array, aber was passiert ist, dass nur das letzte Kontrollkästchen aktiviert ist das einzige, das in den IDSkills registriert ist. Dies ist der Teil des Codes, wobei die Fähigkeiten durch eine Abfrage in der Datenbank angezeigt werdenPHP- ist nicht in der Lage, das andere Kontrollkästchen checked

<?php 
    $i=0; 
    while ($row = mysqli_fetch_assoc($result)) { 
     $id=$row['id']; 
     $skillName=$row['skillName']; 
?> 
     <input type="checkbox" name="skills[]" value="<?php echo $id; ?>"><?php echo $skillName; ?><br> 
<?php 
     $i++; 
    } 
?> 

Hier ist der Teil, wo die Schleife alle ausgewählten Checkbox enthüllen

//QUERY TO INSERT 
$conn = new mysqli($config['servername'], $config['username'], $config['password'], $config['database']);  

$idSkills = $_GET['skills']; 
if(empty($idSkills)) 
{ 
    echo("You didn't select any buildings."); 
} 
else 
{ 
    $N = count($idSkills); 

    echo("You selected $N door(s): "); 
    echo("$idSkills[1] "); 
    for($i=0; $i < $N; $i++) { 
     echo "Skill ID: " 
     $sql = "INSERT INTO volunteer_skills (idskill,idVolunteer) 
       VALUES ('$idSkills[$i]','$idVolunteer')"; 
     $result = $conn->query($sql); 
    } 
} 
$conn->close(); 
+0

echo '$ sql' und Sie werden Ihre Fehler sehen. es könnte "Array [0] ..." sagen. Wenn Sie in Ihrer Abfrage einen GET-Parameter verwenden, geben Sie Benutzern Zugriff auf Ihre gesamte Datenbank. Du musst den Werten entkommen. Siehe SQL Injection – Ibu

+1

Was gibt 'var_dump ($ idSkills);' zurück, wenn mehrere Kontrollkästchen ausgewählt werden? @IBU OP sollte vorbereitete Anweisungen verwenden, nicht imho entkommen – DarkBee

+0

Warum nicht einfach eine 'foreach' Schleife anstelle von' for' verwenden? – Barmar

Antwort

0

Es wäre am besten zu Verwenden Sie eine vorbereitete Anweisung, anstatt eine Variable in SQL zu ersetzen. Aber wenn du gehst, es auf diese Art und Weise zu tun, müssen Sie die richtige Syntax verwenden:

$sql = "INSERT INTO volunteer_skills (idskill,idVolunteer) 
      VALUES ('{$idSkills[$i]}','$idVolunteer')"; 

Sie benötigen {} um eine Array-Referenz zu setzen, um die Variable in den Klammern zu bekommen ausgewertet werden. Siehe den Abschnitt Komplex (lockig) Syntax in der PHP Strings Dokumentation.

+0

Scheint hier falsch zu sein, [Beispiel] (http://ideone.com/b4gRAP) – DarkBee

+0

Wow, du hast Recht. Ich dachte immer, dass es den Index überhaupt nicht in einfacher Syntax auswertet, weil Sie dort keine Ausdrücke einfügen können und wenn Sie auf ein assoziatives Array-Element zugreifen wollen, müssen Sie die Anführungszeichen weglassen. Aber anscheinend erlaubt es eine einzelne Variable im Index. Die Dokumentation ist zu diesem Detail absolut geräuschlos. – Barmar

Verwandte Themen