Como validar uma input de checkbox de seleção usando o PHP?

Eu tenho duas checkboxs de seleção na minha forma:

I need Airport pick-up
Yes No
<?php if(isset($errors['pick_up_no'])) { echo ''.$errors['pick_up_no'].''; } ?>

Variável que economiza o valor das checkboxs de seleção acima: $pickup = $_POST['pick_up'];

Validação:

 //Check the airport pickup and make sure that it isn't a blank/empty string. if ($pickup == ""){ //Blank string, add error to $errors array. $errors['pick_up_no'] = "Please let us know your airport pick up requirement!"; } if (($pick_up = Yes) && ($pick_up = No)) { //if both selected, add error to $errors array. $errors['pick_up_no'] = "Can not select Yes and No together!"; } 

Mas a validação acima apenas de impressão Can not select Yes and No together! se ambos NÃO estiverem selecionados, ou se apenas um selecionado ou mesmo ambos estiverem selecionados. Ele dá a mesma mensagem de erro para todas as seleções. Por quê?

Eu não sei por que você precisa de uma checkbox de seleção para isso (é o que o radio button deve fazer), mas você pode fazer algo como:

 if(!isset($_POST['pick_up']) || count($_POST['pick_up']) > 1) { echo 'please select at least 1 choice'; } else { echo $_POST['pick_up'][0]; } 

Em seguida, faça os nomes da sua checkbox de seleção:

 name="pick_up[]" 

Ou se você realmente precisa ter mensagens de erro separadas. Faça algo como isto:

 $errors['pick_up_no'] = ''; if(!isset($_POST['pick_up'])) { $errors['pick_up_no'] = "Please let us know your airport pick up requirement!"; } elseif(count($_POST['pick_up']) > 1) { $errors['pick_up_no'] = "Can not select Yes and No together!"; // weird UX, should have prevented this with a radio button } if($errors['pick_up_no'] != '') { echo $errors['pick_up_no']; } else { echo $_POST['pick_up'][0]; } 

Atualmente, você está atribuindo com um único sinal = vez de comparar == com

 if (($pick_up = Yes) && ($pick_up = No)) 

você precisa mudar para

 if (($pick_up == "Yes") && ($pick_up == "No")){...} 

enquanto envolve Yes e No dentro de aspas para ser tratado como uma string.


Editar:

Sua melhor opção é usar botões de rádio, IMHO.

Usando checkboxs de seleção ao dar ao usuário, as opções Sim e Não devem ser usadas; é confuso.

Deve ser Yes OU No e não e .

 Yes No 

Essa é a solução mais viável.

É impossível que $ _POST [‘pick_up’] seja sim e não ao mesmo tempo, pois o nome é pick_up e não pick_up [] < - apontando para múltiplas variáveis. Então, será sim ou não, porque um parâmetro substituirá o outro. Você precisaria usar o javascript para verificar se um só foi verificado antes de enviar nesse caso.

Use matriz de elementos do campo checkbox de seleção;

 Yes No 

então no seu script PHP:

 < ?php $pick_ups=$_POST['pick_up']; $first=isset($pick_ups[0]); //true/false of first checkbox status $second=isset($pick_ups[1]); //true/false of second checkbox status ?> 

Novamente, como já foi dito, você deve usar botões de rádio para este fim! Tenha em consideração que $ _POST não envia checkbox de seleção se não estiver configurado (verifique com isset ($ _ POST [‘name’])