Php Checkbox - check machen und deaktivieren
ich versuche, ein problem zu lösen.
und das ist mein code.
<?php
require 'connectDB.php';
print<<<_A_
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
_A_;
$mysql = new mysql();
$mysql->connect();
$dbResult = mysql_query("select * from profiles");
echo "<form action='#' method='post'>";
$dbResult = mysql_query("select * from profiles");
while ($info = mysql_fetch_array($dbResult)) {
if ($info['isPremium'] == 0)
echo "<input type=checkbox name='check2[]' id='check2' value=".$info['id'].">";
else
echo "<input type=checkbox name='check1[]' id='check1' value=".$info['id']." checked>";
echo $info['profileName'] . "<br />";
}
echo "<p><input type='submit' name='btnPremium' /></p>";
echo "</form>";
Wenn Benutzer klicken Sie auf ein Markierungsfeld, ich sende db eine Abfrage, um es 1.Wenn ein Nutzer jedoch deaktivieren Sie ein Kontrollkästchen, nehme ich diese Fehlermeldung: Undefined index: check2 in C:\xampp\htdocs\googleAnalytics\GAPI\choosePremium.php auf der Linie 43 ich versuche immer, deaktiviert in arrPremium2 :S
if (isset($_POST['btnPremium'])) {
$arrPremium = $_POST['check1'];
foreach($arrPremium as $result)
{
mysql_query("UPDATE profiles set isPremium=1 where id=".$result."");
}
$arrPremium2 = $_POST['check2'];
print_r($arrPremium2);
}
?>
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre Fehler aussieht kommt es aus:
Da, wenn es keine checkbox 'checked' mit den Namen 'check2', es wird kein element von $_POST gibt (also undefined index). Überprüfen Sie existiert, indem er etwas wie:
Einige schlechte Praktiken sollten Sie aus der Gewohnheit:
z.B.
checked="checked"
ist der richtige Weg, um daneben eine checkbox als checked.Und Sie sollten wirklich haben:
statt.
Tun Sie dies nicht, machen Sie sich anfällig für MySQL-injection. Escape $result vor der Aktualisierung der Datenbank mit, oder verwenden Sie vorbereitete Anweisungen.
Das Kontrollkästchen nur geben Sie einen Wert ein, wenn Sie aktiviert sind. Ansonsten gibt es keine Wert-gesendet aus der form. Sie können entweder einige Vorgaben einrichten oder verwenden Sie den versteckten Eingang trick.
Die dafaults sind einfach:
Diese Weise erhalten Sie alle Ihre Werte. Die Sache, die Sie müssen Sie wissen, welche Checkboxen vorhanden sind.
Ich würde empfehlen, gehen für die verdeckte Eingabe. Ihrem HTML-Code für jede checkbox, wird wie folgt Aussehen:
Diese Weise, wenn Sie das Markierungsfeld aktivieren, die browser senden
foo=1
überschreiben des versteckten Felds Wert. Sonst wird das Kontrollkästchen senden keinen Wert, fällt zurück, um den versteckten Eingang istfoo=0
.Bitte zuerst bereinigen Sie Ihre Datenbank Abfragen, Ihren aktuellen code kann leicht ausgenutzt werden. Setzen Sie mysql_real_escape_string() um die $result-variable in mysql_query () - Aufruf.
Zweitens, wenn Benutzer deaktiviert der Wert wird nicht gesendet, als POST-Variablen. Stattdessen müssen Sie überprüfen, ob es existiert mit isset().
Immer prüfen, ob checkbox gesetzt mit isset().