JoaoVM Posted March 6, 2014 Report Share Posted March 6, 2014 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']) Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted March 6, 2014 Report Share Posted March 6, 2014 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 Link to comment Share on other sites More sharing options...
JoaoVM Posted March 6, 2014 Author Report Share Posted March 6, 2014 (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 by JoaoVM Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted March 6, 2014 Report Share Posted March 6, 2014 - 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 Link to comment Share on other sites More sharing options...
JoaoVM Posted March 6, 2014 Author Report Share Posted March 6, 2014 (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 by JoaoVM Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted March 6, 2014 Report Share Posted March 6, 2014 (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 by HappyHippyHippo IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
JoaoVM Posted March 6, 2014 Author Report Share Posted March 6, 2014 (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 by JoaoVM Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted March 6, 2014 Report Share Posted March 6, 2014 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 Link to comment Share on other sites More sharing options...
JoaoVM Posted March 6, 2014 Author Report Share Posted March 6, 2014 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 Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted March 6, 2014 Report Share Posted March 6, 2014 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 Link to comment Share on other sites More sharing options...
JoaoVM Posted March 6, 2014 Author Report Share Posted March 6, 2014 - 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? Link to comment Share on other sites More sharing options...
JoaoVM Posted March 7, 2014 Author Report Share Posted March 7, 2014 (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 by JoaoVM Link to comment Share on other sites More sharing options...
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