pfcneves 0 Denunciar post Postado Maio 13, 2015 Boas pessoal, Estou aqui com um problema que não estou a ver como resolver... Num trabalho da faculdade (onde só agora começamos a usar o php) foi colocado a seguinte questão que eu acho mal formulada, mas os tutores não dão resposta ao questionamento e assim continuo sem saber se a questão está bem elaborada mas eu não a estou a entender. Enfim, a questão é a seguinte: Escreva uma página HTML contendo um formulário com 10 checkboxes contendo uma lista de 10 itens e seus respectivos preços (a lista e os respectivos preços devem estar em um array, e serem lidos em tempo de execução e exibidos em uma tabela HTML). Escreva um programa PHP que receba essas informações e exiba uma listagem de todos os itens escolhidos pelo usuário, em ordem alfabética, assim como o preço total destes produtos selecionados. Neste mesmo formulário, mostre em um combo ou com radio, 2 formas de pagamento: “A vista” e “Cartão de Crédito”. Dependendo da escolha do usuário, ao clicar em um botão “Finalizar Compra” o usuário recebe uma mensagem: a. Se a escolha for “A vista” -> “Pagamento a vista no valor de XXXX” b. Se a escolha for “Cartão de Crédito” -> listar uma tabela com os valores das parcelas A vista, 2x, 3x, 4x e 8x. Fazer um formulário HTML e enviar por $_POST ou $_GET para ser recebido num arquivo PHP e aí processar o resto das solicitações, ficava tranquilo, mas construir a tabela de produtos com valores adquiridos num ARRAY, já vasculhei tudo e não consegui entender como fazer. Então resolvi fazer mesmo um formulário HTML dentro do PHP e montar a lista de produtos da seguinte forma: <?php $produtos=array('Arroz' => 5.00, 'Feijao' => 2.80, 'Batata' => 3.50, 'Farinha' => 5.50, 'Ovos' => 2.50, 'Tomate' => 1.90, 'Laranja' => 1.65, 'Banana' => 1.85, 'Leite' => 1.80, 'Maça' => 2.30); echo "<h2>Tabela de Preços</h2>"; echo "<h3>Escolha os seus produtos</h3>"; echo "<table border='1'>\n"; echo '<tr> <th>Nome</th> <th> Preço</th> <th>Escolha</th></tr>', "\n"; foreach ($produtos as $key => $value) { echo "<td>$key</td><td>$value</td><td><input type='checkbox' name='checkbox[]' value='produto'></td></tr>\n"; } echo '</table>'; echo "<input type='submit' name='botao_confirma' value='Confirmar'>"; ?> Até aqui tranquilo, ele monta a tabela perfeitamente com os valores do ARRAY. Agora vou necessitar de outro aquivo PHP (confirma.php) onde irei colocar algo como: <?php $chgeckboxes = $_POST['checkbox']; ?> Para receber os valores enviados através do formulário do arquivo PHP anterior... o meu problema é como faço nesse arquivo para dar a instrução de envio $_POST para o arquivo CONFIRMA.PHP ??? Se o formulário fosse feito normalmente num arquivo HTML, colocaria : <form name="pedido" method="POST" action=”confirma.php”>; Mas neste caso, como fazer para enviar os dados do formulário e receber num ARRAY os dados selecionados no formulário de origem? Se alguém poder dar uma luz... agradeço !! Entretanto estudei um pouco melhor as possibilidades e alterei o primeiro código e já estou a conseguir enviar os valores <?php $produtos=array('Arroz' => 5.00, 'Feijao' => 2.80, 'Batata' => 3.50, 'Farinha' => 5.50, 'Ovos' => 2.50, 'Tomate' => 1.90, 'Laranja' => 1.65, 'Banana' => 1.85, 'Leite' => 1.80, 'Maça' => 2.30); echo "<h2>Tabela de Preços</h2>"; echo "<h3>Escolha os seus produtos</h3>"; echo "<table border='1'>\n"; echo '<tr> <th>Nome</th> <th> Preço</th> <th>Escolha</th></tr>', "\n"; foreach ($produtos as $key => $value) { echo "<form name='checkbox' method='POST' action='confirma.php'><td>$key</td><td>$value</td><td> <input type='checkbox' name='checkbox[]' value='$key $value'></td></tr>\n"; } echo '</table>'; echo "<input type='submit' name='botao_confirma' value='Confirmar'></form>"; ?> No arquivo PHP que recebe, tenho o seguinte: <?php echo "<pre>"; print_r($_POST); echo "</pre>"; $chgeckboxes = $_POST['checkbox']; echo "<table border='1'>\n"; echo '<tr> <th>Nome</th> <th> Preço</th> </tr>', "\n"; foreach ($chgeckboxes as $key => $value) { echo "<td>$key</td><td>$value</td></tr>\n"; } echo '</table>'; ?> Estou a receber tudo, o problema é que só consegui enviar o nome do produto e o valor juntos, ficando ambos como value... o problema agora está a ser separar esses valores... Compartilhar este post Link para o post Compartilhar em outros sites
Williams Duarte 431 Denunciar post Postado Maio 13, 2015 Passe somente o índice <input type='checkbox' name='checkbox[]' value='". $key ."'> Após isso é só percorrer a matriz em busca do indice $produtos=array('Arroz' => 5.00, 'Feijao' => 2.80, 'Batata' => 3.50, 'Farinha' => 5.50, 'Ovos' => 2.50, 'Tomate' => 1.90, 'Laranja' => 1.65, 'Banana' => 1.85, 'Leite' => 1.80, 'Maça' => 2.30); if ($_POST) { foreach ($produtos as $key => $value) { foreach($_POST['checkbox'] as $arr) { if($key == $arr){ echo $arr . '--'. $value .'<br />'; } } } } Compartilhar este post Link para o post Compartilhar em outros sites
pfcneves 0 Denunciar post Postado Maio 13, 2015 Obrigado Williams, Entendi a ideia, mas essa solução iria obrigar-me a copiar o array para o arquivo de confirmação para buscar os índices, certo? E, nesse caso, cada vez que fossem alterados os valores do array original (que montam a checkbox) teria que fazer a alteração também no outro arquivo... Compartilhar este post Link para o post Compartilhar em outros sites
Williams Duarte 431 Denunciar post Postado Maio 13, 2015 Entendi a ideia, mas essa solução iria obrigar-me a copiar o array para o arquivo de confirmação para buscar os índices, certo? Não necessariamente, basta separar o array em outro arquivo, e chamar via um include, nas paginas onde vai usar. pois ele passa a ser seu Banco. A partir dai, você pode guardar os índices dos produtos selecionados em um array na session ou cookie $_SESSION['carrinho'] = array(); Dai em diante, você faz o que quiser, já que os dados não serão perdidos em um reload da pagina. Compartilhar este post Link para o post Compartilhar em outros sites
pfcneves 0 Denunciar post Postado Maio 13, 2015 Obrigado... Vou tentar isso, embora só na próxima semana vamos começar a trabalhar com essas funcões... Compartilhar este post Link para o post Compartilhar em outros sites
Williams Duarte 431 Denunciar post Postado Maio 13, 2015 Valeu!!! Mas não tem segredo, qualquer dúvida, volte a postar que a galera te orienta. :thumbsup: Compartilhar este post Link para o post Compartilhar em outros sites
pfcneves 0 Denunciar post Postado Maio 13, 2015 Viva, Consegui resolver grande parte das questões e minimamente o que era solicitado está a funcionar... Mas há aqui um detalhe que não estou a conseguir resolver e que provavelmente deve ser bastante simples. Isto recebe o nome dos produtos, faz a aquisição dos valores (como o Williams sugeriu) e depois monta uma tabela com todos eles... é criada então um form com radio para escolher um tipo de pagamento e envia por $_POST para um arquivo onde haverá a confirmação e que esse está a funcionar direitinho. <?php // echo "<pre>"; // print_r($_POST); // echo "</pre>"; $produtos=array('Arroz' => 5.00, 'Feijao' => 2.80, 'Batata' => 3.50, 'Farinha' => 5.50, 'Ovos' => 2.50, 'Tomate' => 1.90, 'Laranja' => 1.65, 'Banana' => 1.85, 'Leite' => 1.80, 'Maça' => 2.30); $chgeckboxes = $_POST['checkbox']; echo "<h3>Lista de produtos escolhidos</h3>"; echo "<table border='1'>\n"; echo '<tr> <th>Nome</th> <th> Preço</th> </tr>', "\n"; if ($_POST) { foreach ($produtos as $key => $value) { foreach($_POST['checkbox'] as $nome) { if($key == $nome){ echo "<td>$nome</td><td>$value</td></tr>\n"; } } } } echo "<td><B>TOTAL</B></td><td><b>valor total</b></td></tr>"; echo '</table>'; echo "<br>"; echo "<table border='1'>\n"; echo '<tr> <th>Forma de Pagamento</th> </tr>', "\n"; echo "<form name='pagamento' method='POST' action='comprovante.php'><td> <input type=radio name=pag value='vista'> A Vista <input type=radio name=pag value='credito'> Cartão Crédito</td></tr> <input type=hidden name=tot value='20'"; // coloquei aqui o valor 20 só para enviar um valor, mas aqui ficará a string com a soma de todos os produtos echo '</table>'; echo "<input type='submit' name='botao_confirma' value='Escolher'></form>"; ?> A minha grande dúvida é como coletar todos os valores que são gerados na listagem e os somar? Se eles viessem via $_POST do arquivo com as chekboxs, estava tranquilo, mas assim, como faço para conseguir esses valores listados e os somar numa string??? Valeu desde já pela ajuda!! Compartilhar este post Link para o post Compartilhar em outros sites
Williams Duarte 431 Denunciar post Postado Maio 13, 2015 Só iniciar um a variável com o valor zero e ir somando if ($_POST) { $preco = 0;//New foreach ($produtos as $key => $value) { foreach($_POST['checkbox'] as $nome) { if($key == $nome){ echo "<td>$nome</td><td>$value</td></tr>\n"; $preco = $preco + $value; //New } } } } echo $preco //output Compartilhar este post Link para o post Compartilhar em outros sites
pfcneves 0 Denunciar post Postado Maio 14, 2015 Realmente muito simples mesmo... Tu acreditas que consigo aprender mais aqui no fórum que nos materiais da disciplina... Valeu Williams, com essa ajuda consegui fechar todas as demandas. Obrigado!!! Vou dar uma limpa no código e depois posto aqui como ficou... Compartilhar este post Link para o post Compartilhar em outros sites
Williams Duarte 431 Denunciar post Postado Maio 14, 2015 Tu acreditas que consigo aprender mais aqui no fórum que nos materiais da disciplina... Assim como eu, você pegara a base teórica, mas é nos fóruns, manual, blogs, e sites de perguntas e respostas, que você encontrará as soluções de seus verdadeiros problemas do dia a dia, e claro, material mais atualizado. E dependendo da disciplina você não vera muita coisa do PHP Moderno. Só um detalhe, faça a concatenação dos html, assim você evita essa quantidade enorme de echo $html = "<h3>Lista de produtos escolhidos</h3>"; //Concatena a partir da segunda linha $html .= "<table border='1'>\n"; $html .= '<tr> <th>Nome</th> <th> Preço</th> </tr>', "\n"; if ($_POST) { foreach ($produtos as $key => $value) { foreach($_POST['checkbox'] as $nome) { if($key == $nome){ $html .= "<td>$nome</td><td>$value</td></tr>\n"; } } } } $html .= "<td><B>TOTAL</B></td><td><b>valor total</b></td></tr>"; $html .= '</table>'; $html .= "<br>"; $html .= "<table border='1'>\n"; $html .= '<tr> <th>Forma de Pagamento</th> </tr>', "\n"; $html .= "<form name='pagamento' method='POST' action='comprovante.php'><td> <input type=radio name=pag value='vista'> A Vista <input type=radio name=pag value='credito'> Cartão Crédito</td></tr> <input type=hidden name=tot value='20'"; // coloquei aqui o valor 20 só para enviar um valor, mas aqui ficará a string com a soma de todos os produtos $html .= '</table>'; $html .= "<input type='submit' name='botao_confirma' value='Escolher'></form>"; echo $html; Compartilhar este post Link para o post Compartilhar em outros sites
pfcneves 0 Denunciar post Postado Maio 14, 2015 Já agora o porque de trocar os echo pela concatenação dos HTML? É por uma questão funcional ou porque assim o código fica mais limpo? Compartilhar este post Link para o post Compartilhar em outros sites
Williams Duarte 431 Denunciar post Postado Maio 14, 2015 Além de deixar mais limpo, você evita chamar o construtor a cada linha. E já vai se familiarizando, quando partir para OPP Compartilhar este post Link para o post Compartilhar em outros sites