Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Toni Santos

Como enviar múltiplos valores de checkbox via php

Recommended Posts

Olá rapaziada, como vão? Espero que todos estejam melhor que eu.

 

Então, preciso da ajuda de vocês para enviar os valores de 7 checkbox presentes em uma página html através do PHP. A página é minha, quem quiser dar uma olhada para estudar o caso segue o link http://bamboo.16mb.com/vale-do-pati.html.

 

OBS.: Há um script em js que gera o cálculo dos valores contidos nos checkbox e, se quem for conceder a valiosa ajuda puder dar uma luz sem ter que mexer na interação entre esse script e os checkbox eu agradeço mais ainda.

 

Segue a estrutura do formulário:

 

<form action="vp-checkbox.php" id="theForm" method="post">

 

<input id="p1" type="checkbox" name="item[]" value="264" onclick="totalIt()">
<label for="p1" data-text-true="Sim" data-text-false="Não"><i></i></label> Escolha sim para reservar </div>
<input id="p2" type="checkbox" name="item[]" value="194" onclick="totalIt()">
<label for="p2" data-text-true="Sim" data-text-false="Não"><i></i></label> Escolha sim para reservar</div>
<input id="p3" type="checkbox" name="item[]" value="15" onclick="totalIt()">
<label for="p3" data-text-true="Sim" data-text-false="Não"><i></i></label>
<input id="p4" type="checkbox" name="item[]" value="25" onclick="totalIt()">
<label for="p4" data-text-true="Sim" data-text-false="Não"><i></i></label>
<input id="p5" type="checkbox" name="item[]" value="35" onclick="totalIt()">
<label for="p5" data-text-true="Sim" data-text-false="Não"><i></i></label>
<input id="p6" type="checkbox" name="item[]" value="15" onclick="totalIt()">
<label for="p6" data-text-true="Sim" data-text-false="Não"><i></i></label>
<input id="p7" type="checkbox" name="item[]" value="0" onclick="totalIt()">
<label for="p7" data-text-true="Sim" data-text-false="Não"><i></i></label>
<input value="R$ 0.00" type="text" readonly type="text" id="total" class="area-check"/>
<input value="Confirmar Reservas" type="submit" class="submit-check"/>
<input value="Apagar as Reservas" type="reset" class="submit-check"/>
</form>
<script>
function totalIt() {
var input = document.getElementsByName("item[]");
var total = 0;
for (var i = 0; i < input.length; i++) {
if (input.checked) {
total += parseFloat(input.value);
}
}
document.getElementById("total").value = "R$ " + total.toFixed(2);
}
</script>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites


<form action="vp-checkbox.php" id="theForm" method="post">

 

<input id="p1" type="checkbox" name="item0" value="264" onclick="totalIt()">

<label for="p1" data-text-true="Sim" data-text-false="Não"><i></i></label> Escolha sim para reservar </div>

 

 

<input id="p2" type="checkbox" name="item1" value="194" onclick="totalIt()">

<label for="p2" data-text-true="Sim" data-text-false="Não"><i></i></label> Escolha sim para reservar</div>

 

 

<input id="p3" type="checkbox" name="item2" value="15" onclick="totalIt()">

<label for="p3" data-text-true="Sim" data-text-false="Não"><i></i></label>

 

 

<input id="p4" type="checkbox" name="item3" value="25" onclick="totalIt()">

<label for="p4" data-text-true="Sim" data-text-false="Não"><i></i></label>

 

 

<input id="p5" type="checkbox" name="item4" value="35" onclick="totalIt()">

<label for="p5" data-text-true="Sim" data-text-false="Não"><i></i></label>

 

 

<input id="p6" type="checkbox" name="item5" value="15" onclick="totalIt()">

<label for="p6" data-text-true="Sim" data-text-false="Não"><i></i></label>

 

 

<input id="p7" type="checkbox" name="item6" value="0" onclick="totalIt()">

<label for="p7" data-text-true="Sim" data-text-false="Não"><i></i></label>

 

 

<input value="R$ 0.00" type="text" readonly type="text" id="total" class="area-check"/>

<input value="Confirmar Reservas" type="submit" class="submit-check"/>

<input value="Apagar as Reservas" type="reset" class="submit-check"/>

</form>


for($i = 0; $i < 8 ; $i++){

 

$array[$i] = $_POST["item$i"];

 

}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Toni Santos

 

Deixa ver se eu entendi.

Você precisa passar os valores individualmente ou a soma dos valores calculado via javascript?

Algum erro exibido no envio do formulário? Efetuou o debug?

 

Meu conselho é executar o script de calculo do total via server side, visto que client side poderá ser facilmente manipulado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala garotos!

 

Então, o xxbielxd teve a boa vontade de dar ajuda - agradeço muito; mas, os campos name que ele definiu são individuais e pelo fato de cada um ser individual não permitirá para o script js de totalização executar o cálculo - ta sacando? Agora respondendo a pergunta do Lucas, a ideia é:

 

Eu receber no email especificado no php, o que foi selecionado e, se possível junto com os valores - saca da colé?

 

Sobre erros, eu simplesmente não estou recebendo nenhuma valor marcado no checkbox no email.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Toni Santos

Antes de executar o script final de envio, sugiro que efetue um debug do formulário.

var_dump($_POST);

Verifique se os valores do vetor item[] estão sendo passados através do $_POST.

Caso sim, o problema está no seu script de envio do e-mail.

 

Como está tratando o item[] na hora do envio? Lembre-se que trata-se de um array ($_POST['item'][0], $_POST['item'][1], etc), não trate-o como uma string.

 

Caso não consiga resolver, poste aqui o script de envio.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Grande Lucas,

então cara, eu mexi, mexi e o máximo que conseguir com o script abaixo foi enviar os value dos checkbox selecionados, porém, o que eu preciso agora é que esses value sejam enviados junto com seus respectivos id, por exemplo:

 

Selecionaram o checkbox name="item[]", value 264 de id="p1" e o checkbox name="item[]", value="35" de id="p5". Ao ser enviado a mensagem do email precisa chegar tipo: p1 264 e p5 35, sacou? Oh filho amado vê se você consegue em ajudar nisso aí.

 

PHP:

<?php

header('Content-Type: text/html; charset=utf-8');
$email = $_POST['email'];
$vars = $_POST['item'];
$header = 'De: ' . $email . " \r\n";
$header .= "X-Mailer: PHP/" . phpversion() . " \r\n";
$header .= "Mime-Version: 1.0 \r\n";
$headers .= "Content-type: text/html\r\n";
if(is_array($vars))
{
$arr = implode(', ', $vars);
}
else
{
$arr = $vars;
}
$text .= "Reserve: " . $arr . " \r\n";
$text .= "Enviado por: " . $email . " \r\n";
$para = 'bamboo.ecotur@outlook.com';
$assunto = 'RESERVA SOLICITADA';
mail($para, $assunto, $text, $header);
?>
form:
<form action="vp-checkbox.php" id="theForm" method="post">

<input id="p1" type="checkbox" name="item[]" value="264" onclick="totalIt()">
<label for="p1" data-text-true="Sim" data-text-false="Não"><i></i></label> Escolha sim para reservar </div>


<input id="p2" type="checkbox" name="item[]" value="194" onclick="totalIt()">
<label for="p2" data-text-true="Sim" data-text-false="Não"><i></i></label> Escolha sim para reservar</div>


<input id="p3" type="checkbox" name="item[]" value="15" onclick="totalIt()">
<label for="p3" data-text-true="Sim" data-text-false="Não"><i></i></label>


<input id="p4" type="checkbox" name="item[]" value="25" onclick="totalIt()">
<label for="p4" data-text-true="Sim" data-text-false="Não"><i></i></label>


<input id="p5" type="checkbox" name="item[]" value="35" onclick="totalIt()">
<label for="p5" data-text-true="Sim" data-text-false="Não"><i></i></label>


<input id="p6" type="checkbox" name="item[]" value="15" onclick="totalIt()">
<label for="p6" data-text-true="Sim" data-text-false="Não"><i></i></label>


<input id="p7" type="checkbox" name="item[]" value="0" onclick="totalIt()">
<label for="p7" data-text-true="Sim" data-text-false="Não"><i></i></label>


<input value="R$ 0.00" type="text" readonly type="text" id="total" class="area-check"/>
<input value="Confirmar Reservas" type="submit" class="submit-check"/>
<input value="Apagar as Reservas" type="reset" class="submit-check"/>
</form>

Compartilhar este post


Link para o post
Compartilhar em outros sites

O único elemento que você envia é o value, se você deseja receber o id, use ele como índice do array...

<input id="p7" type="checkbox" name="item[p7]" value="0" onclick="totalIt()">

No PHP:

foreach($_POST['item'] as $ind=>$val){
echo $ind.'-'.$val;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

E aí Lucas,

 

colocar os valores do id (p1, p2 e etc) dentro de item[], fez o script que soma os valores contidos em value não funcionar, pois, ele pega a marcação item[] para gerar a soma. Não haveria outra forma de fazer?

 

OBS. O formulário está vinculado ao script abaixo que faz a soma dos valores que se encontram dentro de todos os value dos inputs do formulário.

 

 

<script type="text/javascript">
function totalIt() {
var input = document.getElementsByName("item[]");
var total = 0;
for (var i = 0; i < input.length; i++) {
if (input.checked) {
total += parseFloat(input.value);
}
}
document.getElementById("total").value = "R$ " + total.toFixed(2);
}
</script>

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Toni Santos

 

Como o ESerra falou, utilize os ids como índices, de forma que possa manipulá-los através do PHP e adicione um atributo personalizado ou uma classe p/ capturar os elementos que deseja manipular no javascript.

 

Através de classe:

HTML:
<input id="p7" type="checkbox" name="item[p7]" value="0" onclick="totalIt()" class="total_calc">

Javascript:
var input = $(".total_calc"];

Através de atributo personalizado:

HTML:
<input id="p7" type="checkbox" name="item[p7]" value="0" onclick="totalIt()" data-script="total_calc">

Javascript:
var input = $('[data-script="total_calc"]'];

Fiz umas alterações básicas p/ o funcionamento no seu script php.

<?php

header('Content-Type: text/html; charset=utf-8');

$email = $_POST['email'];

$header = 'De: ' . $email . " \r\n";
$header .= "X-Mailer: PHP/" . phpversion() . " \r\n";
$header .= "Mime-Version: 1.0 \r\n";
$headers .= "Content-type: text/html\r\n";


/*
 * -------------------------------------------------------
 * Alterações a partir daqui
 * -------------------------------------------------------
 */
$itens = array(); // Inicialize um vetor
foreach($_POST['item'] as $key => $value){
  array_push($itens, $key . ' ' . $value); // Preenchi o vetor de acordo com a sua 'lógica' (Ex: p1 222)
}

/* Implode somente no caso do vetor ser maior que 1 */
if(count($itens) > 1){
  $arr = implode(', ', $itens);
}
else{
  $arr = $itens;
}
/*
 * -------------------------------------------------------
 */


$text .= "Reserve: " . $arr . " \r\n";
$text .= "Enviado por: " . $email . " \r\n";

$para = 'bamboo.ecotur@outlook.com';
$assunto = 'RESERVA SOLICITADA';

mail($para, $assunto, $text, $header);

?>

Efetuei o debug e funciona perfeitamente.

Muita coisa pode ser refeito em todo o escopo da sua aplicação, sempre busque melhora, a primeira solução funciona mas nem sempre é a melhor.

 

Espero ter ajudado. Sds.

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por ILR master
      Fala galera.
      Espero que todos estejam bem.
      Seguinte: Tenho um arquivo xml onde alguns campos estão com : (dois pontos), como o exemplo abaixo:
       
      <item>
      <title>
      d sa dsad sad sadasdas
      </title>
      <link>
      dsadas dsa sad asd as dsada
      </link>
      <pubDate>sadasdasdsa as</pubDate>
      <dc:creator>
      d sad sad sa ad as das
      </dc:creator>
      </item>
       
      Meu código:
       
      $link = "noticias.xml"; 
      $xml = simplexml_load_file($link); 
      foreach($xml -> channel as $ite) {     
           $titulo = $ite -> item->title;
           $urltitulo = $ite -> item->link;
           print $urltitulo = $ite -> item->dc:creator;
      } //fim do foreach
      ?>
       
      Esse campo dc:creator eu não consigo ler. Como faço?
       
      Agradeço quem puder me ajudar.
       
      Abs
       
       
    • Por First
      Olá a todos!
       
      Eu estou criando um sistema do zero mas estou encontnrando algumas dificuldades e não estou sabendo resolver, então vim recorrer ajuda de vocês.
      Aqui está todo o meu código: https://github.com/PauloJagata/aprendizado/
       
      Eu fiz um sistema de rotas mas só mostra o conteúdo da '/' não sei porque, quando eu tento acessar o register nada muda.
      E eu também quero que se não estiver liberado na rota mostra o erro de 404, mas quando eu tento acessar um link inválido, nada acontece.
      Alguém pode me ajudar com isso? E se tiver algumas sugestão para melhoria do código também estou aceitando.
       
       
      Desde já, obrigado.
    • Por landerbadi
      Olá pessoal, boa tarde
       
      Tenho uma tabela chamada "produtos" com os seguintes campos (id, produto) e outra tabela chamada "itens" com os seguintes campos (id, prod_01, prod_02, prod_03, prod_04).
       
      Na tabela produtos eu tenho cadastrado os seguintes produtos: laranja, maçã, uva, goiaba, arroz, feijão, macarrão, etc.
       
      Na tabela itens eu tenho cadastrado os itens da seguinte maneira:
       
      1, laranja, uva, arroz, feijão;
      2, maçã, macarrão, goiaba, uva;
      3, arroz, feijão, maçã, azeite
       
      Meu problema é o seguinte: 
      Eu escolho um produto da tabela "produtos", por exemplo "uva".  Preciso fazer uma consulta na tabela "itens" para ser listado todos os registros que contenham o produto "uva" e que todos os demais produtos estejam cadastrados na tabela "produtos".
       
      No exemplo acima seria listado apenas dois registros, pois o terceiro registro não contém o produto "uva". 
       
      Alguém pode me ajudar? Pois estou quebrando a cabeça a vários dias e não consigo achar uma solução.
    • Por landerbadi
      Boa tarde pessoal. Estou tentado fazer uma consulta no banco de dados porém estou tendo dificuldades. Tenho uma tabela chamada "itens" com os seguintes campos: id, item, plural, ativo. Nela tem cadastrado vários itens e seu respectivo plural. No campo ativo eu coloco a letra "S" para informar que esta palavra está ativa no sistema. Por exemplo: 1, casa, casas, S 2, mesa, mesas, S 3, cama, camas, S 4, moto, motos, S 5, rádio, rádios O quinto registro "radio" não está ativo no sistema pois não tem um "S" no campo ativo. E outra tabela chamada "variações" com os seguintes campos (id, item1, item2, item3) com os seguintes registros: 1, casa, camas, moto 2, mesas, casas, radio 3, rádio, cama, mesa Eu preciso fazer uma busca na tabela variações da seguinte maneira: Eu escolho um registro na tabela "itens", por exemplo "casa". Preciso fazer com que o php me liste todos os registros da tabela "variações" que contenham a palavra "casa". Porém se tiver algum registro com a palavra "casas" também tem que ser listado. Neste caso ele irá encontrar dois registros. Agora eu preciso que o php verifique os demais itens e faça a listagem apenas dos item que estão ativos (que contenham um "S" no campo ativo. Neste caso ele irá encontrar apenas um registro, pois o segundo registro contém a palavra "rádio". E "rádio" não está ativo na tabela itens. Como faço isso?
    • Por First
      Olá a todos!
       
      Quando eu tento fazer o login me mostra esse erro "Could not log you in."; Alguém sabe me ajudar a resolver esse problema no meu código?
      <?php require_once("core/init.php"); if (Input::exists()) { if (Token::check(Input::get("token"))) { $validate = new Validate(); $validation = $validate->check($_POST, array( "username" => array("required" => true), "password" => array("required" => true) )); if ($validation->passed()) { $user = new User(); $remember = (Input::get("remember")) === "on" ? true : false; $login = $user->login(Input::get("username"), Input::get("password"), $remember); if ($login) { Session::flash("home", "Welcome back!"); Redirect::to("index.php"); } else { echo "Could not log you in."; } } else { foreach ($validation->errors() as $error) { echo $error."<BR>"; } } } } ?> <form action="" method="POST"> <div class="field"> <label for="username">Username</label> <input type="text" name="username" id="username"> </div> <div class="field"> <label for="password">Password</label> <input type="password" name="password" id="password"> </div> <div class="field"> <label for="remember"> <input type="checkbox" name="remember" id="remember"> Remember me </label> </div> <input type="hidden" name="token" value="<?php echo Token::generate(); ?>"> <input type="submit" value="Log in"> </form>  
       
      Desde já obrigado.
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.