Jump to content

[Resolvido] Validação de Formulário


JoaoVM
 Share

Recommended Posts

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?

formacao.png

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

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 by JoaoVM
Link to comment
Share on other sites

Depois de Selecionados os critérios e não coloquei todos e coloquei alguns como não aplicável,

criterios.png

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>";

			}

selecionado.png

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 by JoaoVM
Link to comment
Share on other sites

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 by HappyHippyHippo
IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

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>";

}

verificacao.png

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 by JoaoVM
Link to comment
Share on other sites

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
Link to comment
Share on other sites

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

- 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

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 by JoaoVM
Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.