Come leggere se una casella di controllo è selezionata in PHP?


266

Come leggere se una casella di controllo è selezionata in PHP?


8
Questa domanda in realtà significa "è stato verificato" (quando è stato inviato il modulo). PHP che determina se una casella di controllo è selezionata richiederebbe una chiamata Ajax una volta che l'elemento è stato attivato.
Rybo111,

Risposte:


342

Se la tua pagina HTML è simile a questa:

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

Dopo aver inviato il modulo è possibile verificarlo con:

isset($_POST['test'])

o

if ($_POST['test'] == 'value1') ...

57
Le caselle di controllo possono anche avere valore on, quando sono selezionate. Pertanto per compatibilità è più semplice da usare isset($_POST['checkboxName']).
Damiqib,

13
Il valore "on" può essere supportato da alcuni browser quando l'attributo value non è impostato, ma in generale è meglio impostare l'attributo value e verificarlo al momento dell'invio.
m_vitaly,

3
Il "Valore1" cambia se la casella è selezionata?
MoralCode

10
@Developer_ACE A meno che non ti fraintenda, il valore in questo esempio sarebbe value1se la casella fosse selezionata. Se non è selezionato, $_POST['test']semplicemente non esisterebbe.
Rybo111,

104

Zend Framework usa un bel trucco sulle caselle di controllo, che puoi anche fare da solo:

Ogni casella di controllo generata è associata a un campo nascosto con lo stesso nome, posizionato appena prima della casella di controllo e con un valore "0". Quindi se la tua casella di controllo come valore "1", otterrai sempre il valore "0" o "1" nel GET o POST risultante

<input type="hidden" name="foo" value="0" />
<input type="checkbox" name="foo" value="1"> 

Ne ho anche notato, ma mi sento sicuro di usarlo: anche Zend Framework lo fa!
hpaknia,

Questo è interessante. Ma c'è una piccola possibilità che l'agente utente possa inviare il primo valore anziché l'ultimo, supponendo che la casella di controllo sia selezionata?
Rybo111,

@ rybo111, per il programma utente non credo, ma per un parser di moduli javascript personalizzato dovresti prenderti cura.
regilero,

Scusa, qualcuno potrebbe spiegarmi come funziona? Non ho capito Perché quel campo nascosto se viene sempre inviato solo l'ultimo valore ( input[type="checkbox"]quello)?
tonix,

6
quando la casella di controllo è deselezionata, non viene trasmessa nel post (quindi viene trasmesso solo il nascosto). Quando è selezionato, viene trasmesso e sovrascriverà il valore nascosto.
regilero,

53

Quando si utilizzano le caselle di controllo come un array:

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

Dovresti usare in_array():

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

Ricordarsi di verificare prima che l'array sia impostato, ad esempio:

if(isset($_POST['food']) && in_array(...

caselle di controllo come array e foreach ($_POST['food'] as $selected_food)per lavorare su quello selezionato è bello, grazie
bcag2

42

Lascia che il tuo html per la tua casella di controllo sia simile

<input type="checkbox" name="check1">

Quindi dopo aver inviato il modulo è necessario verificare come

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

    // Checkbox is selected
} else {

   // Alternate code
}

Supponendo che check1dovrebbe essere il nome della casella di controllo e se il metodo di invio del modulo è GETquindi è necessario verificare con $_GETvariabili come

if (isset($_GET['check1'])) {

   // Checkbox is selected
} 


6

Sto usando questo trucco da diversi anni e funziona perfettamente senza alcun problema per lo stato della casella di controllo selezionata / non selezionata durante l'utilizzo con PHP e Database.

Codice HTML: (per Aggiungi pagina)

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

Suggerimento: rimuovere "checkbox" se si desidera mostrarlo come non selezionato per impostazione predefinita

Codice HTML: (per Modifica pagina)

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

Codice PHP: (utilizzare per Aggiungi / Modifica pagine)

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

Suggerimento: sarà sempre presente un valore vuoto a meno che l'utente non lo abbia verificato. Quindi, abbiamo già il codice PHP per catturarlo altrimenti mantieni il valore su 0. Quindi, usa semplicemente la variabile $ status per il database.


1
questa è la forma davvero buona per farlo in puro php semplice. ma devi notare che il valore di una casella di controllo è stringa quando è attivato un valore inesistente se è selezionato.
Elvis Technologies,

4

Per verificare se una casella è selezionata, usa empty ()

Quando il modulo viene inviato, la casella di controllo verrà SEMPRE impostata, poiché TUTTE le variabili POST verranno inviate con il modulo.

Controlla se la casella è selezionata con vuoto come segue:

//Check if checkbox is checked    
if(!empty($_POST['checkbox'])){
 #Checkbox selected code
} else {
 #Checkbox not selected code
}

3
Se la casella di controllo è deselezionata, non verrà pubblicata, quindi sarà SEMPRE impostata.
Wessam El Mahdy,

^ NOT * sempre impostato
The Codesee

3

È possibile controllare il valore corrispondente come impostato e non vuoto nell'array $ _POST o $ _GET a seconda dell'azione del modulo.

vale a dire: con un modulo POST che utilizza un name"test" (ovvero <input type="checkbox" name="test">:, useresti:

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

}

2

Scopri issetquale è una "funzione" incorporata che può essere utilizzata in istruzioni if ​​per dire se una variabile è stata utilizzata o impostata

Esempio:

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

2

Bene, gli esempi sopra funzionano solo quando vuoi INSERIRE un valore, non utile per AGGIORNARE valori diversi su colonne diverse, quindi ecco il mio piccolo trucco per aggiornare:


//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[]" />

....

Il segreto è aggiornare prima tutti i VALORI (in questo caso a 0), e poiché invierà solo i valori controllati, ciò significa che tutto ciò che ottieni dovrebbe essere impostato su 1, quindi tutto ciò che viene impostato su 1.

L'esempio è PHP ma vale per tutto.

Divertiti :)


2

Puoi farlo con il corto se:

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

o con il nuovo PHP7 Null coalescing operator

$check_value = $_POST['my_checkbox_name'] ?? 0;


1

Un controllo booleano minimalista con mantenimento della posizione dell'interruttore

<?php

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

?>

<input type="checkbox" name="foo" value=" checked"<?=$_POST['foo']?>>

1
Quando si dà una risposta è preferibile dare una spiegazione del perché la tua risposta è quella. Ciò è particolarmente vero quando si risponde a un post MOLTO vecchio 11 altre risposte.
Stephen Rauch,

È bene riconoscere la necessità che la casella di controllo mantenga il suo stato. Tuttavia, il codice per farlo non è corretto.
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>

puoi spiegare il tuo obiettivo qui?
Elvis Technologies,

0

in BS3 puoi mettere

  <?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>

Si prega di notare l'uso diisset($datosOrdenCompra[0]['exenta'])


0

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


0

Wordpress ha la checked()funzione. Riferimento: https://developer.wordpress.org/reference/functions/checked/

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

Descrizione Confronta i primi due argomenti e, se identici, i segni di spunta

Parametri $ controllato (misto) (Obbligatorio) Uno dei valori da confrontare

$ current (misto) (Facoltativo) (true) L'altro valore da confrontare se non solo true Valore predefinito: true

$ echo (bool) (Facoltativo) Indica se eseguire l'eco o semplicemente restituire la stringa Valore predefinito: true

Restituisce # Restituisce (stringa) l'attributo html o la stringa vuota


-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']);
} 

?>

Benvenuto in Stack Overflow! Sebbene questo frammento di codice possa risolvere il problema, non spiega perché o come risponde alla domanda. Includi una spiegazione per il tuo codice , in quanto ciò aiuta davvero a migliorare la qualità del tuo post. Ricorda che stai rispondendo alla domanda per i lettori in futuro e quelle persone potrebbero non conoscere i motivi del tuo suggerimento sul codice. Flaggers / recensori: per le risposte di solo codice come questo, downvote, non eliminare!
Scott Weldon,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.