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.