Diese Frage bedeutet tatsächlich " wurde überprüft" (als das Formular gesendet wurde). PHP, das bestimmt, ob ein Kontrollkästchen aktiviert ist , würde einen Ajax-Aufruf erfordern, sobald das Element umgeschaltet wurde.
Rybo111
Antworten:
342
Wenn Ihre HTML-Seite so aussieht:
<inputtype="checkbox"name="test"value="value1">
Nach dem Absenden des Formulars können Sie es überprüfen mit:
Kontrollkästchen können auch einen Wert haben on, wenn sie aktiviert sind. Aus Kompatibilitätsgründen ist es daher einfacher, nur zu verwenden isset($_POST['checkboxName']).
Damiqib
13
Der Wert "Ein" wird möglicherweise von einigen Browsern unterstützt, wenn das Wertattribut nicht festgelegt ist. Im Allgemeinen ist es jedoch besser, das Wertattribut festzulegen und beim Senden darauf zu prüfen.
m_vitaly
3
Ändert sich der Wert 'Wert1', wenn das Kontrollkästchen aktiviert ist?
MoralCode
10
@Developer_ACE Sofern ich Sie nicht missverstehe, lautet der Wert in diesem Beispiel, value1wenn das Kontrollkästchen aktiviert ist. Wenn es nicht markiert ist, $_POST['test']würde es einfach nicht existieren.
Rybo111
104
Zend Framework verwendet einen netten Hack für Kontrollkästchen, den Sie auch selbst ausführen können:
Jedes generierte Kontrollkästchen ist einem ausgeblendeten Feld mit demselben Namen zugeordnet, das direkt vor dem Kontrollkästchen platziert ist und den Wert "0" hat. Wenn Ihr Kontrollkästchen dann den Wert "1" hat, erhalten Sie im resultierenden GET oder POST immer den Wert '0' oder '1'
Das ist mir auch aufgefallen, aber ich fühle mich sicher, es zu benutzen: Zend Framework macht es auch!
Hpaknia
Das ist interessant. Aber gibt es eine winzige Möglichkeit, dass der Benutzeragent den ersten Wert anstelle des letzten übergibt, vorausgesetzt, das Kontrollkästchen ist aktiviert?
Rybo111
@ rybo111, für den Benutzeragenten glaube ich nicht, aber für einen benutzerdefinierten Javascript-Formularparser sollten Sie vorsichtig sein.
Regilero
Entschuldigung, könnte mir jemand erklären, wie es funktioniert? Ich habe es nicht verstanden Warum dieses versteckte Feld, wenn immer nur der letzte Wert übermittelt wird (der input[type="checkbox"]eine)?
Tonix
6
Wenn das Kontrollkästchen deaktiviert ist, wird es nicht in der Post übertragen (daher wird nur das Verborgene übertragen). Wenn es aktiviert ist, wird es übertragen und überschreibt den versteckten Wert.
Kontrollkästchen als Array und foreach ($_POST['food'] as $selected_food)das
Aktivieren
42
Lassen Sie Ihr HTML für Ihr Kontrollkästchen wie sein
<inputtype="checkbox"name="check1">
Dann, nachdem Sie Ihr Formular gesendet haben, müssen Sie überprüfen, wie
if(isset($_POST['check1'])){// Checkbox is selected}else{// Alternate code}
Angenommen, dies check1sollte der Name Ihres Kontrollkästchens sein. Und wenn Ihre Methode zum Senden von Formularen lautet GET, müssen Sie dies mit $_GETVariablen wie überprüfen
if(isset($_GET['check1'])){// Checkbox is selected}
Ich verwende diesen Trick seit mehreren Jahren und er funktioniert problemlos, wenn der Status des Kontrollkästchens bei Verwendung mit PHP und Datenbank aktiviert / deaktiviert ist.
Hinweis: Es wird immer ein leerer Wert angezeigt, es sei denn, der Benutzer hat ihn überprüft. Wir haben also bereits PHP-Code, um ihn abzufangen. Andernfalls behalten Sie den Wert auf 0. Verwenden Sie dann einfach die Variable $ status für die Datenbank.
Dies ist die wirklich gute Form, um dies in rein einfachem PHP zu tun. Beachten Sie jedoch, dass der Wert eines Kontrollkästchens aktiviert ist, wenn es aktiviert ist, und ein nicht vorhandener Wert, wenn es aktiviert ist.
Elvis Technologies
4
Um zu überprüfen, ob ein Kontrollkästchen aktiviert ist, verwenden Sie empty ()
Wenn das Formular gesendet wird, wird das Kontrollkästchen IMMER aktiviert , da ALL POST gesendet Variablen mit dem Formular gesendet werden.
Überprüfen Sie, ob das Kontrollkästchen wie folgt mit leer aktiviert ist:
//Check if checkbox is checked if(!empty($_POST['checkbox'])){#Checkbox selected code}else{#Checkbox not selected code}
Nun, die obigen Beispiele funktionieren nur, wenn Sie einen Wert EINFÜGEN möchten, der nicht nützlich ist, um verschiedene Werte in verschiedene Spalten zu aktualisieren. Hier ist mein kleiner Trick zum Aktualisieren:
//EMPTY ALL VALUES TO 0
$queryMU ='UPDATE '.$db->dbprefix().'settings SET menu_news = 0, menu_gallery = 0, menu_events = 0, menu_contact = 0';
$stmtMU = $db->prepare($queryMU);
$stmtMU->execute();if(!empty($_POST['check_menus'])){foreach($_POST['check_menus']as $checkU){try{//UPDATE only the values checked
$queryMU ='UPDATE '.$db->dbprefix().'settings SET '.$checkU.'= 1';
$stmtMU = $db->prepare($queryMU);
$stmtMU->execute();}catch(PDOException $e){
$msg ='Error: '. $e->getMessage();}}}
Das Geheimnis besteht darin, zuerst alle WERTE zu aktualisieren (in diesem Fall auf 0). Da nur die überprüften Werte gesendet werden, bedeutet dies, dass alles, was Sie erhalten, auf 1 gesetzt werden sollte, also alles, was Sie erhalten, auf 1 gesetzt wird.
Wenn Sie eine Antwort geben, ist es vorzuziehen, eine Erklärung zu geben , WARUM Ihre Antwort diejenige ist. Dies gilt insbesondere für die Beantwortung eines SEHR alten Beitrags 11 anderer Antworten.
Stephen Rauch
Es ist gut, dass Sie erkennen, dass das Kontrollkästchen seinen Status beibehalten muss. Ihr Code dafür ist jedoch nicht korrekt.
Willkommen bei Stack Overflow! Dieses Code-Snippet kann das Problem zwar lösen, erklärt jedoch nicht, warum oder wie es die Frage beantwortet. Bitte geben Sie eine Erklärung für Ihren Code an , da dies wirklich zur Verbesserung der Qualität Ihres Beitrags beiträgt. Denken Sie daran, dass Sie die Frage für Leser in Zukunft beantworten und diese Personen möglicherweise die Gründe für Ihren Codevorschlag nicht kennen. Flagger / Rezensenten: Für Nur-Code-Antworten wie diese, Downvote, nicht löschen!
Antworten:
Wenn Ihre HTML-Seite so aussieht:
Nach dem Absenden des Formulars können Sie es überprüfen mit:
oder
quelle
on
, wenn sie aktiviert sind. Aus Kompatibilitätsgründen ist es daher einfacher, nur zu verwendenisset($_POST['checkboxName'])
.value1
wenn das Kontrollkästchen aktiviert ist. Wenn es nicht markiert ist,$_POST['test']
würde es einfach nicht existieren.Zend Framework verwendet einen netten Hack für Kontrollkästchen, den Sie auch selbst ausführen können:
Jedes generierte Kontrollkästchen ist einem ausgeblendeten Feld mit demselben Namen zugeordnet, das direkt vor dem Kontrollkästchen platziert ist und den Wert "0" hat. Wenn Ihr Kontrollkästchen dann den Wert "1" hat, erhalten Sie im resultierenden GET oder POST immer den Wert '0' oder '1'
quelle
input[type="checkbox"]
eine)?Bei Verwendung von Kontrollkästchen als Array:
Sie sollten verwenden
in_array()
:Denken Sie daran, zuerst zu überprüfen, ob das Array eingestellt ist, z.
quelle
foreach ($_POST['food'] as $selected_food)
dasLassen Sie Ihr HTML für Ihr Kontrollkästchen wie sein
Dann, nachdem Sie Ihr Formular gesendet haben, müssen Sie überprüfen, wie
Angenommen, dies
check1
sollte der Name Ihres Kontrollkästchens sein. Und wenn Ihre Methode zum Senden von Formularen lautetGET
, müssen Sie dies mit$_GET
Variablen wie überprüfenquelle
quelle
Ich verwende diesen Trick seit mehreren Jahren und er funktioniert problemlos, wenn der Status des Kontrollkästchens bei Verwendung mit PHP und Datenbank aktiviert / deaktiviert ist.
HTML-Code: (für Seite hinzufügen)
Hinweis: Entfernen Sie das Kontrollkästchen, wenn Sie es standardmäßig als deaktiviert anzeigen möchten
HTML-Code: (zum Bearbeiten der Seite)
PHP-Code: (zum Hinzufügen / Bearbeiten von Seiten)
Hinweis: Es wird immer ein leerer Wert angezeigt, es sei denn, der Benutzer hat ihn überprüft. Wir haben also bereits PHP-Code, um ihn abzufangen. Andernfalls behalten Sie den Wert auf 0. Verwenden Sie dann einfach die Variable $ status für die Datenbank.
quelle
Um zu überprüfen, ob ein Kontrollkästchen aktiviert ist, verwenden Sie empty ()
Wenn das Formular gesendet wird, wird das Kontrollkästchen IMMER aktiviert , da ALL POST gesendet Variablen mit dem Formular gesendet werden.
Überprüfen Sie, ob das Kontrollkästchen wie folgt mit leer aktiviert ist:
quelle
Sie können den entsprechenden Wert abhängig von der Aktion Ihres Formulars im Array $ _POST oder $ _GET als festgelegt und nicht leer überprüfen.
dh: Mit einem POST-Formular unter Verwendung eines
name
"Tests" (dh: würden<input type="checkbox" name="test">
Sie verwenden:quelle
Erfahren Sie,
isset
welche "Funktion" in if-Anweisungen verwendet werden kann, um festzustellen, ob eine Variable verwendet oder festgelegt wurdeBeispiel:
quelle
Nun, die obigen Beispiele funktionieren nur, wenn Sie einen Wert EINFÜGEN möchten, der nicht nützlich ist, um verschiedene Werte in verschiedene Spalten zu aktualisieren. Hier ist mein kleiner Trick zum Aktualisieren:
....
Das Geheimnis besteht darin, zuerst alle WERTE zu aktualisieren (in diesem Fall auf 0). Da nur die überprüften Werte gesendet werden, bedeutet dies, dass alles, was Sie erhalten, auf 1 gesetzt werden sollte, also alles, was Sie erhalten, auf 1 gesetzt wird.
Beispiel ist PHP, gilt aber für alles.
Habe Spaß :)
quelle
Sie können es mit dem Kurzfilm machen, wenn:
oder mit dem neuen PHP7
Null coalescing operator
quelle
Die Kurzschlussbewertung sorgt dafür, dass Sie nicht darauf zugreifen können,
your_checkbox_name
wenn sie nicht übermittelt wurde.quelle
Eine minimalistische boolesche Prüfung mit Beibehaltung der Schalterposition
quelle
quelle
in BS3 können Sie setzen
Bitte beachten Sie die Verwendung von
isset($datosOrdenCompra[0]['exenta'])
quelle
filter_input (INPUT_POST, 'checkbox_name', FILTER_DEFAULT, FILTER_FORCE_ARRAY)
quelle
WordPress hat die
checked()
Funktion. Referenz: https://developer.wordpress.org/reference/functions/checked/Beschreibung Vergleicht die ersten beiden Argumente und wenn sie identisch sind, wie markiert
Parameter $ geprüft (gemischt) (Erforderlich) Einer der zu vergleichenden Werte
$ current (gemischt) (Optional) (true) Der andere zu vergleichende Wert, wenn nicht nur true. Standardwert: true
$ echo (bool) (Optional) Gibt an, ob die Zeichenfolge wiedergegeben oder nur zurückgegeben werden soll. Standardwert: true
Rückgabe des HTML-Attributs #Return (Zeichenfolge) oder einer leeren Zeichenfolge
quelle
quelle