JoaoVM Posted March 6, 2014 at 10:24 AM Report #547700 Posted March 6, 2014 at 10:24 AM Boas, malta tenho que fazer uns formulários, mas todos os campos devem ser preenchidos, na coluna dos critérios, a não ser que esse critério não se aplique. Alguém tem ideia de como posso fazer isso? Utilizo o empty, mas este campo atri é um array atri[ ] que contem todos os critérios, e devem ser preenchidos todos os campos da coluna critério, como já disse, apenas se ele tiver a preenchido na coluna não aplicável. empty($_POST['atri'])
HappyHippyHippo Posted March 6, 2014 at 10:35 AM Report #547703 Posted March 6, 2014 at 10:35 AM não dá informação suficiente ... apresenta todos os dados (nomes dos campos) que recebes do pedido IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
JoaoVM Posted March 6, 2014 at 10:57 AM Author Report #547707 Posted March 6, 2014 at 10:57 AM (edited) Está e a secção onde tem a seleção das checkboxes.. <?php $id_form_qual=2; $forma_in= mysql_query("Select * from atributos_formacao where tipo_formacao='$id_form_qual' and estado=1;"); while ($atributos = mysql_fetch_array($forma_in)) { echo "<tr class='tabelas'>"; echo "<td>".$atributos['descricao']."</td>"; echo "<td><input type='checkbox' name='atri[]' id='atri[]' value='".$atributos['id_atributos_formacao']."'></td>"; echo "<td><input type='checkbox' name='atri[]' id='atri[]' value='999999'></td>"; echo "</tr>"; }?> Depois deste código tenho a validação normal, se não for vazio envia, caso contrario apresenta a mensagem de inserir todos os campos.. if (isset($_POST['linha'])){ $linha = $_POST['linha']; echo "Linha: ".$linha."<br>"; } if (isset($_POST['posto'])){ $posto = $_POST['posto']; echo "Posto: ".$posto."<br>"; } if (isset($_POST['formador'])){ $formador = $_POST['formador']; echo "Formador: ".$formador."<br>"; } if (isset($_POST['formando'])){ $formando = $_POST['formando']; echo "Formando: ".$formando."<br>"; } if (isset($_POST['duracao'])){ $duracao = $_POST['duracao']; echo "Duração: ".$duracao."<br>"; } if (isset($_POST['form_qual'])) { if(!( empty($_POST['linha']) || empty($_POST['posto']) || empty($_POST['formador']) || empty($_POST['formando']) || empty($_POST['duracao']) || empty($_POST['atri']) )) { Edited March 6, 2014 at 10:59 AM by JoaoVM
HappyHippyHippo Posted March 6, 2014 at 11:45 AM Report #547729 Posted March 6, 2014 at 11:45 AM - não podes ter id's com o mesmo valor - altera o nome dos n/a para "na[]" e verifica na recepção se atri[x] ou na[x] existem IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
JoaoVM Posted March 6, 2014 at 12:33 PM Author Report #547742 Posted March 6, 2014 at 12:33 PM (edited) Depois de Selecionados os critérios e não coloquei todos e coloquei alguns como não aplicável, Depois mandei para fora os valores das caixas que coloquei.. foreach ($_POST['atri'] as $_boxValue) { echo "Atributo: #{$_boxValue} foi Selecionado!<br>"; } echo "<br>"; foreach ($_POST['na'] as $_boxValue2) { echo "Não Aplicavel: #{$_boxValue2} foi Selecionado! <br>"; } Poderia fazer outra coisa, em vez de checkbox fazer em radio e caso fosse sim seria mesmo sim, caso contrario seria não aplicável, assim estaria sempre preenchido...mas continuava com o mesmo problema, como saber se o array[] foi preenchido totalmente...No entanto no radio teria o problema de com o array o name é o mesmo, o que me levaria a poder escolher sempre apenas uma opção, os nomes teriam que ser diferentes para poder ter varias escolhas Edited March 6, 2014 at 12:36 PM by JoaoVM
HappyHippyHippo Posted March 6, 2014 at 01:12 PM Report #547747 Posted March 6, 2014 at 01:12 PM (edited) foreach ($_POST['atri'] as $key => $_boxValue) { echo "Atributo: #{$key} => {$_boxValue} foi Selecionado!<br>"; } echo "<br>"; foreach ($_POST['na'] as $key => $_boxValue2) { echo "Não Aplicavel: #{$key} => {$_boxValue} foi Selecionado! <br>"; } for ($i = 0; $i < 7; ++$i) { if (isset($_POST['atri'][$i]) || isset($_POST['na'][$i])) echo "$i > OK<br />"; else echo "$i > Missing<br />"; } Edited March 6, 2014 at 01:31 PM by HappyHippyHippo IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
JoaoVM Posted March 6, 2014 at 03:15 PM Author Report #547760 Posted March 6, 2014 at 03:15 PM (edited) No segundo foreach onde tens $_boxValue é mesmo assim ou $_boxValue2 como tens declarado? foreach ($_POST['atri'] as $key => $_boxValue) { echo "Atributo: #{$key} => {$_boxValue} foi Selecionado!<br>"; } echo "<br>"; foreach ($_POST['na'] as $key => $_boxValue2) { echo "Não Aplicavel: #{$key} => {$_boxValue} foi Selecionado! <br>"; } echo "<br>"; $conta1 = count($_POST['atri']); $conta2 = count($_POST['na']); $total = ($conta1+$conta2); echo "Total Preenchidos: " .$total."<br>"; echo "<br>"; $conta_atributos = mysql_num_rows($forma_in); //total de atributos no While do form(podem ser acrescentados atributos) echo "Total de Atributos: $conta_atributos <br>"; echo "<br>"; for ($i = 0; $i < $conta_atributos; ++$i) { if (isset($_POST['atri'][$i]) || isset($_POST['na'][$i])) echo "$i > OK<br />"; else echo "$i > EM FALTA<br />"; } echo "<br>"; if ($conta_atributos == $total){ echo "<h1>Tudo Correto</h1>"; }elseif($conta_atributos > $total){ echo "<h1>Preencha Todos os Critérios</h1>"; } elseif($conta_atributos < $total){ echo "<h1>Critério Preenchido mais que uma vez!!</h1>"; } fiz a contagem do numero de box selecionado, o numero que tinhas como 7 é dinâmico porque posso acrescentar critérios por isso fiz a contagem e coloquei a variável, depois tentei fazer uma verificação consoante o numero de registos colocados, mas tenho um problema, posso colocar 2 registos numa linha e nenhuma em outra linha e vou obter o mesmo resultado que não está correto, e assim não consigo fazer a verificação. Edited March 6, 2014 at 03:18 PM by JoaoVM
HappyHippyHippo Posted March 6, 2014 at 03:38 PM Report #547765 Posted March 6, 2014 at 03:38 PM No segundo foreach onde tens $_boxValue é mesmo assim ou $_boxValue2 como tens declarado? problema de copy-paste ... posso colocar 2 registos numa linha e nenhuma em outra linha e vou obter o mesmo resultado que não está correto, e assim não consigo fazer a verificação. que queres dizer com 2 registos na mesma linha ? estás a dizer que podes seleccionar critério e não aplicável ao mesmo tempo ? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
JoaoVM Posted March 6, 2014 at 04:22 PM Author Report #547773 Posted March 6, 2014 at 04:22 PM que queres dizer com 2 registos na mesma linha ? estás a dizer que podes seleccionar critério e não aplicável ao mesmo tempo ? Exatamente, eu faço o contar o número de checks, ha maneira de colocar interdito o que já foi preenchido?ou outra solução
HappyHippyHippo Posted March 6, 2014 at 04:23 PM Report #547775 Posted March 6, 2014 at 04:23 PM Exatamente, eu faço o contar o número de checks, ha maneira de colocar interdito o que já foi preenchido?ou outra solução - usa radio buttons - com javascript podes forçar o uncheck do checkbox irmão IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
JoaoVM Posted March 6, 2014 at 04:29 PM Author Report #547776 Posted March 6, 2014 at 04:29 PM - usa radio buttons - com javascript podes forçar o uncheck do checkbox irmão Penso que os radio buttons tem um problema, quando coloco o array atri[] todos eles vão ter o mesmo nome, o que faz com que só me deixe escolher 1 de todos os atributos certo?
JoaoVM Posted March 7, 2014 at 03:22 PM Author Report #547838 Posted March 7, 2014 at 03:22 PM (edited) Resolvido, fica a solução: Com recurso a radio buttons para facilitar a seleção do espaço não aplicável, e em vez de empty coloquei a comparação entre o numero de critérios/atributos totais e o numero de preenchidos. echo "<tr class='tabelas'>"; echo "<td>".$atributos['descricao']."</td>"; echo "<td><input type='radio' name='atri[".$atributos['id_atributos_formacao']."]' value='".$atributos['id_atributos_formacao']."'> Selecionar | <input type='radio' name='atri[".$atributos['id_atributos_formacao']."]' value='99999'>Não Aplicável</td>"; echo "</tr>"; echo "<br>"; foreach ($_POST['atri'] as $key => $_boxValue) { echo "Atributo: #{$key} => {$_boxValue} foi Selecionado!<br>"; } echo "<br>"; foreach ($_POST['atri'] as $key => $_boxValue2) { echo "Não Aplicavel: #{$key} => {$_boxValue2} foi Selecionado! <br>"; } echo "<br>"; $conta1 = count($_POST['atri']); $conta2 = count($_POST['atri']); $total = ($conta1+$conta2)/2; echo "Total Atributos Preenchidos: " .$total."<br>"; echo "<br>"; $conta_atributos = mysql_num_rows($forma_in); //total de atributos no While do form(podem ser acrescentados atributos) echo "Total de Atributos a Preencher: $conta_atributos <br>"; echo "<br>"; if ($conta_atributos == $total){ echo "<h1>Tudo Correto</h1>"; }elseif($conta_atributos != $total){ echo "<h1>Preencha Todos os Critérios</h1>"; } echo "<br>"; Edited March 7, 2014 at 03:24 PM by JoaoVM
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now