Ir para conteúdo

POWERED BY:

Arquivado

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

@ls_leandro

Validando Radio com name dinâmico

Recommended Posts

Boa tarde pessoal,

 

Estou desenvolvendo uma "Avaliação" onde o usuário deve classificar cada conteúdo com as opções:

 

Ótimo | Bom | Regular | Fraco | Não sei.

 

Porém a pergunta vem do banco de dados e o name do radio button foi estabelecido pelo id da pergunta.

 

Meu problema é o seguinte:

 

Ele é obrigado à avaliar com pelo menos uma das opções, só que não consigo fazer essa função pelo fato do name do rádio ser dinâmico.

 

Alguém consegue resolver isso?

 

<input type="radio" name="resp?cod_pergunta='.$id.'" value="5" />

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

claro que da !!! tu recupera isso com id de curso em algum get ou post ou junto na sessao do usuario mas enfim ... to pensando em um modo de ler ele dentro de um for !!



$nome = $_POST['resp?cod_pergunta='].$id;
for($i=0;count($nome);$i++){

   if($nome[$i] == NULL){

      echo 'preencha o campo'; 

    }
}

 

 

acho que alguma coisa do tipo assim ...

Compartilhar este post


Link para o post
Compartilhar em outros sites

claro que da !!! tu recupera isso com id de curso em algum get ou post ou junto na sessao do usuario mas enfim ... to pensando em um modo de ler ele dentro de um for !!

 

$nome = $_POST['resp?cod_pergunta='].$id;
for($i=0;count($nome);$i++){

   if($nome[$i] == NULL){

      echo 'preencha o campo'; 

    }
}

 

 

acho que alguma coisa do tipo assim ...

 

Cara sou iniciante em PHP, não entendi muito bem o seu exemplo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

claro que da !!! tu recupera isso com id de curso em algum get ou post ou junto na sessao do usuario mas enfim ... to pensando em um modo de ler ele dentro de um for !!

 

$nome = $_POST['resp?cod_pergunta='].$id;
for($i=0;count($nome);$i++){

   if($nome[$i] == NULL){

      echo 'preencha o campo'; 

    }
}

 

 

acho que alguma coisa do tipo assim ...

 

Fiz assim:

 

$teste=$_POST['resp?cod_pergunta='.$id.''];
	
	$valida = "SELECT count(id_perguntas_respostas) from av_perguntas_respostas where perguntas_respostas_cod_pai = $idpai and perguntas_respostas_id_perfil = $av_perfil_id";
	list($conta_valida) = mysql_fetch_array(mysql_query($valida));
	
	for($i=1;$i <=($conta_valida); $i++)
    {
    	if($teste[$i]=="")
		{
     		echo'<script type="text/JavaScript">alert("Voce deve avaliar todas as questoes")</script>';
		}
	
	}

Porém sem exito :(

Compartilhar este post


Link para o post
Compartilhar em outros sites

claro que da !!! tu recupera isso com id de curso em algum get ou post ou junto na sessao do usuario mas enfim ... to pensando em um modo de ler ele dentro de um for !!

 

$nome = $_POST['resp?cod_pergunta='].$id;
for($i=0;count($nome);$i++){

   if($nome[$i] == NULL){

      echo 'preencha o campo'; 

    }
}

 

 

acho que alguma coisa do tipo assim ...

 

tentei assim tbm

 

if(@$_POST['submit'])
{
	$valida = "SELECT count(id_perguntas_respostas) from av_perguntas_respostas where perguntas_respostas_cod_pai = $idpai and perguntas_respostas_id_perfil = $av_perfil_id";
	list($conta_valida) = mysql_fetch_array(mysql_query($valida));
	
	for($i=1;$i<=$conta_valida;$i++)
	{
		if($resp[$i]=="")
		{
			$erro='<script type="text/JavaScript">alert("Voce deve avaliar todas as questoes")</script>';
		}

		else
                { 
                        cadastra 
                }
        }

 

Ele impede de continuar quando não marcado, e quando todos marcados também :/

Compartilhar este post


Link para o post
Compartilhar em outros sites

é velho tem que para para tira uma logica boa para validar isto !!! kk

 

você poderia ter feito assim ou passado em get ou post o id do curso ai os campos garanto que nao teria problema para validar e la no php tu validada no where com get ou post passado .. mas enfim como é radio ,ele tem varios radios provavelmente né ? se sim é só no for() para validar isso ...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Coloquei o name por id, pelo fato de que tenho vários subtítulos de um mesmo tópico...

 

chamei de pai, filho e questão... cada página mostra todas as questões associadas à um pai.

 

Não conseguir fazer de um jeito que se eu padronizasse o name, ele me daria opção de selecionar "Ótimo" para mais de um filho.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma coisa que poucos sabem, é que o valor de name é apenas uma variável (isso para o servidor). Assim como uma variável em PHP, você pode criar arrays utilizando o name. Já que você utiliza o id para validar, pode utilizar o ID como chave do array. Deste jeito:

 

<input name='nome[1]' />
<input name='nome[2]' />
<input name='nome[3]' />
<input name='nome[4]' />
<input name='nome[5]' />

 

E no PHP:

foreach($_POST['nome'] AS $id => $valor) {
   printf('ID: %d -> valor: %s' , $id , $valor);
}

Utilize foreach ao invés de for ou while, visto que você não pode prever a sequencia de índices do vetor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma coisa que poucos sabem, é que o valor de name é apenas uma variável (isso para o servidor). Assim como uma variável em PHP, você pode criar arrays utilizando o name. Já que você utiliza o id para validar, pode utilizar o ID como chave do array. Deste jeito:

 

<input name='nome[1]' />
<input name='nome[2]' />
<input name='nome[3]' />
<input name='nome[4]' />
<input name='nome[5]' />

 

E no PHP:

foreach($_POST['nome'] AS $id => $valor) {
   printf('ID: %d -> valor: %s' , $id , $valor);
}

Utilize foreach ao invés de for ou while, visto que você não pode prever a sequencia de índices do vetor.

 

Você poderia explicar como o foreach está funcionado por favor? Pois sou novo, e não entendi essa função.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Foreach é uma estrutura similar ao for e while. Entretante, é designada só, e somente só, para percorrer arrays, diferente de for e while que são "laços de repetição". Basicamente é açucar sintático.

 

Você vai encontrar uma explicaçao mais detalhada no link abaixo, visto que não preciso reescrever/transcrever tudo ou apenas copiar e colar:

http://forum.imasters.com.br/topic/511222-funcionamento-do-iterator-poo/#entry2024724

Compartilhar este post


Link para o post
Compartilhar em outros sites

Foreach é uma estrutura similar ao for e while. Entretante, é designada só, e somente só, para percorrer arrays, diferente de for e while que são "laços de repetição". Basicamente é açucar sintático.

 

Você vai encontrar uma explicaçao mais detalhada no link abaixo, visto que não preciso reescrever/transcrever tudo ou apenas copiar e colar:

http://forum.imasters.com.br/topic/511222-funcionamento-do-iterator-poo/#entry2024724

 

 

De que modo poderia aplicar no meu exemplo?

 

 

echo'<table width="900" border="0" align="center" cellpadding="0" cellspacing="0">
    <tr>
      <td width="650" height="30" class="stryle_av">'.$widpai.'.'.$wifilho.'.'.$widquestao.' - '.$pergunta.'</td>
      <td width="50" height="30" align="center"><input type="radio" name="resp?cod_pergunta='.$id.'" value="5" /></td>
      <td width="50" height="30" align="center"><input type="radio" name="resp?cod_pergunta='.$id.'" value="4" /></td>
      <td width="50" height="30" align="center"><input type="radio" name="resp?cod_pergunta='.$id.'" value="3" /></td>
      <td width="50" height="30" align="center"><input type="radio" name="resp?cod_pergunta='.$id.'" value="2" /></td>
      <td width="50" height="30" align="center"><input type="radio" name="resp?cod_pergunta='.$id.'" value="1" /></td>
  </tr>'; 
  
@$resp	=$_POST['resp?cod_pergunta='.$id.''];
		
if(@$_POST['submit'])
{
		
	$prev = $idpai - 1;
	$next = $idpai + 1;
	
	$insert = mysql_query("insert into av_resposta (av_resposta_id_questao, av_resposta_id_pai, av_resposta_id_filho, av_resposta_cod_resp, av_resposta_cod_perfil)
										 values('$cod_pergunta', '$widpai', '$wifilho', '$resp', '$perguntas_respostas_id_perfil')");

	echo"<script>window.location='$_SERVER[PHP_SELF]?av_perfil_id=".$av_perfil_id."&idpai=".$next."&ra=".$ra."'</script>";
}		

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu removeria o quase tudo que tu colocou ai no name:

echo '<input type="radio" name="resposta['.$id.']" value="5" />'
Já no PHP:

foreach($_POST['resposta'] AS $codigo => $valor) {
   /** códigos **/
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Corrigido, tem algum problema entre esse editor e o Opera. Esta se perdendo nas tags e alterando o texto.

Compartilhar este post


Link para o post
Compartilhar em outros sites

No caso ficaria assim?

 

if(@$_POST['submit'])
{
	foreach($_POST['resposta'] AS $codigo => $valor)
	{
		
	$prev = $idpai - 1;
	$next = $idpai + 1;
	
	$insert = mysql_query("insert into av_resposta (av_resposta_id_questao, av_resposta_id_pai, av_resposta_id_filho, av_resposta_cod_resp, av_resposta_cod_perfil)
										 values('$cod_pergunta', '$widpai', '$wifilho', '$valor', '$perguntas_respostas_id_perfil')");

	echo"<script>window.location='$_SERVER[PHP_SELF]?av_perfil_id=".$av_perfil_id."&idpai=".$next."&ra=".$ra."'</script>";
	}
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vejamos, você está usando o foreach do jeito que eu escrevi, entretanto, não está utilizando nenhuma das variáveis exclusivas do foreach ($codigo e $valor).

 

Você precisa ajustar as variáveis.

 

Outros detalhes, não use @ para suprimir erros, teste-os:

if($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['submit'])) {

É sempre interessante validadar o método de requisição, e isset verifica se a variável/índice existe, se não existir, não ocasionará em erro no código.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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