Wie kann man lesen, ob ein Kontrollkästchen in PHP aktiviert ist?

266

Wie kann man lesen, ob ein Kontrollkästchen in PHP aktiviert ist?

Thew
quelle
8
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:

<input type="checkbox" name="test" value="value1">

Nach dem Absenden des Formulars können Sie es überprüfen mit:

isset($_POST['test'])

oder

if ($_POST['test'] == 'value1') ...
m_vitaly
quelle
57
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'

<input type="hidden" name="foo" value="0" />
<input type="checkbox" name="foo" value="1"> 
Regilero
quelle
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.
Regilero
53

Bei Verwendung von Kontrollkästchen als Array:

<input type="checkbox" name="food[]" value="Orange">
<input type="checkbox" name="food[]" value="Apple">

Sie sollten verwenden in_array():

if(in_array('Orange', $_POST['food'])){
  echo 'Orange was checked!';
}

Denken Sie daran, zuerst zu überprüfen, ob das Array eingestellt ist, z.

if(isset($_POST['food']) && in_array(...
rybo111
quelle
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

<input type="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
} 
Gautam3164
quelle
15
$check_value = isset($_POST['my_checkbox_name']) ? 1 : 0;
Hammad Khan
quelle
sehr schnell und sehr klug
Tarek Kalaji
beste Lösung, die ich gesehen habe
Debbie Kurth
6

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)

<input name="status" type="checkbox" value="1" checked>

Hinweis: Entfernen Sie das Kontrollkästchen, wenn Sie es standardmäßig als deaktiviert anzeigen möchten

HTML-Code: (zum Bearbeiten der Seite)

<input name="status" type="checkbox" value="1" 
<?php if ($row['status'] == 1) { echo "checked='checked'"; } ?>>

PHP-Code: (zum Hinzufügen / Bearbeiten von Seiten)

$status = $_POST['status'];
if ($status == 1) {
$status = 1;
} else {
$status = 0;
}

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.

ZEESHAN ARSHAD
quelle
1
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
}
Andy
quelle
3
Wenn das Kontrollkästchen deaktiviert ist, wird es nicht veröffentlicht, sodass es JETZT IMMER gesetzt wird.
Wessam El Mahdy
^ NICHT * immer eingestellt sein
The Codesee
3

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:

if(isset($_POST['test']) {
   // The checkbox was enabled...

}
John Parker
quelle
2

Erfahren Sie, issetwelche "Funktion" in if-Anweisungen verwendet werden kann, um festzustellen, ob eine Variable verwendet oder festgelegt wurde

Beispiel:

    if(isset($_POST["testvariabel"]))
     {
       echo "testvariabel has been set!";
     }
user2451511
quelle
2

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();}

        }
}
<input type="checkbox" value="menu_news" name="check_menus[]" />
<input type="checkbox" value="menu_gallery" name="check_menus[]" />

....

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ß :)

Hiram
quelle
2

Sie können es mit dem Kurzfilm machen, wenn:

$check_value = isset($_POST['my_checkbox_name']) ? 1 : 0;

oder mit dem neuen PHP7 Null coalescing operator

$check_value = $_POST['my_checkbox_name'] ?? 0;
Mazz
quelle
1
$is_checked = isset($_POST['your_checkbox_name']) &&
              $_POST['your_checkbox_name'] == 'on';

Die Kurzschlussbewertung sorgt dafür, dass Sie nicht darauf zugreifen können, your_checkbox_namewenn sie nicht übermittelt wurde.

Martin Thoma
quelle
1

Eine minimalistische boolesche Prüfung mit Beibehaltung der Schalterposition

<?php

$checked = ($_POST['foo'] == ' checked');

?>

<input type="checkbox" name="foo" value=" checked"<?=$_POST['foo']?>>
Rembo
quelle
1
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.
Vern Jensen
1
<?php

  if (isset($_POST['add'])) {

    $nama      = $_POST['name'];
    $subscribe = isset($_POST['subscribe']) ? $_POST['subscribe'] : "Not Checked";

    echo "Name: {$nama} <br />";
    echo "Subscribe: {$subscribe}";

    echo "<hr />";   

  }

?>

<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="POST" >

  <input type="text" name="name" /> <br />
  <input type="checkbox" name="subscribe" value="news" /> News <br />

  <input type="submit" name="add" value="Save" />

</form>
Anteliebe
quelle
Kannst du hier dein Ziel erklären?
Elvis Technologies
0

in BS3 können Sie setzen

  <?php
                  $checked="hola";
                  $exenta = $datosOrdenCompra[0]['exenta'];
                  var_dump($datosOrdenCompra[0]['exenta']);
                  if(isset($datosOrdenCompra[0]['exenta']) and $datosOrdenCompra[0]['exenta'] == 1){

                      $checked="on";

                  }else{
                    $checked="off";
                  }

              ?>
              <input type="checkbox" id="exenta" name="exenta" <?php echo $checked;?> > <span class="label-text"> Exenta</span>

Bitte beachten Sie die Verwendung vonisset($datosOrdenCompra[0]['exenta'])

Elvis Technologies
quelle
0

filter_input (INPUT_POST, 'checkbox_name', FILTER_DEFAULT, FILTER_FORCE_ARRAY)

Thowfeek
quelle
0

WordPress hat die checked()Funktion. Referenz: https://developer.wordpress.org/reference/functions/checked/

checked( mixed $checked, mixed $current = true, bool $echo = true )

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

Aliqua
quelle
-3
<?php

if(isset($_POST['nameCheckbox'])){
    $_SESSION['fr_nameCheckbox'] = true;
}

?>

<input type="checkbox" name="nameCheckbox" 

<?php 

if(isset($_SESSION['fr_nameCheckbox'])){
    echo 'checked'; 
    unset($_SESSION['fr_nameCheckbox']);
} 

?>
Grzegorz
quelle
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!
Scott Weldon