Ir para conteúdo

Arquivado

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

LucasouzaRJ

Questao de iniciante

Recommended Posts

Pessoal,

 

estou tendo muita dificuldade em montar um codigo para uma situação que precisa de formulário. Tenho inclusive postado muitas dúvidas aqui no forum, e estou achando que não estou no caminho certo.

 

Quero explicar o que eu enho que fazer para saber se realmente eu posso fazer e qual seria a melhor forma.

 

se trata de uma solicitação de lanches para a ripulação em uma viagem, de acordo com o destino.

A tela teria de ser dividida em 4 etapas:

 

a primeira) o usuário informa diversos campos usando camps select, text e radio e inclui este pedido,

 

a segunda) para incluir o nome dos tripulantes (seria uma linha que se repetiria x vezes a quantidade de tripulantes informada na parte 1, gravando nome a nome.

 

a terceira) apresentação dos itens do lanche que é escolhido de acordo com o destino informado na 1 parte (só visualização).

 

a quarta) se for necessário modificações (inclusões) campos com os itens do cardapio e a quantidade, que devera tb ser gravado para liberação posterior.

 

isso é tudo numa tela só e a primeira parte e a terceira tem que aparecer nas outras partes de acordo com a mvimentação.

 

 

agradeço antecipadamente as opiniões.

Lucasouza

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom... qual a dificuldade??? Os formulários já foram criados? Para fazer sem reload da página, só com Ajax. Mas no teu caso, tem como fazer sem Ajax.

 

Vou dar algumas dicas.

- Use muitos ifs e !empty para exibir os campos vazios ou preenchidos.

- Os botões para envio podem ser atribuidos valores, que podem ser resgatados como qualquer campo input, o que permite que você saiba qual ação foi executada.

- Use readonly para os campos que já foram enviados e não devem ser alterados.

 

O que você quer não é difícil... é trabalhoso... Mas não é difícil.

 

Te dei mais ou menos uma lógica para iniciar... Pensa nisto e vai tentando fazer...

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso é possível fazer sim.

 

Basta você armazenar os campos anteriores em sessões, no final você faz a leitura de todas as sessões de acordo com a sua necessidade.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vou dar algumas dicas.

- Use muitos ifs e !empty para exibir os campos vazios ou preenchidos.

- Os botões para envio podem ser atribuidos valores, que podem ser resgatados como qualquer campo input, o que permite que você saiba qual ação foi executada.

- Use readonly para os campos que já foram enviados e não devem ser alterados.

duas perguntas:

 

em relação ao botão, ao invés de fazer o submit, eu atribuiria um valor e depois por if faria ppor exemplo o insert da parte 1?

quanto ao readyonly, como eu posso mudar o atributo do campo na propria execucao, ou seja quando ele mandasse incluir?

 

Lucas

Compartilhar este post


Link para o post
Compartilhar em outros sites

em relação ao botão, ao invés de fazer o submit, eu atribuiria um valor e depois por if faria ppor exemplo o insert da parte 1?

Pode ser assim, mas não foi assim que eu sugeri... Por exemplo, você coloca tudo em uma página... Daí você faz algo assim...

 

if ($_POST['Enviar'] == 'Primeira Parte') $value = 'Segunda Parte';
else $value = 'Primeira Parte';

<input type="submit" name="Enviar" id="Enviar" value="<?php echo $value?>" />
Antes de enviar a primeira parte do formulário, ele vai ter valor = Primeira Parte. Depois vai ser segunda parte.

 

quanto ao readyonly, como eu posso mudar o atributo do campo na propria execucao, ou seja quando ele mandasse incluir?

Para fazer em tempo de execução, com Javascript... Mas não é a idéia... Vou dar um exemplo...

<input type="text" name="campo" id="campo" value="<?php echo (!empty($_POST['campo']))? $_POST['campo'].'" readonly="readonly" ' : ''; ?>"/>

O que vai acontecer... Antes de enviar a primeira parte, vai estar vazio... Se for enviado valor no POST['campo'], ele imprime o valor e coloca readonly.

 

Veja que esta é UMA das possibilidades... No teu caso, acho que é mais fácil fazer assim.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

sei que estou abusando da sua paciencia, mas ta tudo dando errado!

 

quanto ao botão, ele está aparecendo sem nada escrito dentro e mesmo que eu click nele nao assume o nome.

 

<input type="submit" name="Enviar" id="Enviar" value="<?php echo $value ?>" />
	
	<?
	  if ($_POST['Enviar'] == 'Incluir Requisicao') {
		  $result = incluireq($ano_req,$num_req,$data,$destino,$dia,$pax,$nanv,$ori,$missao,$dep,$radiobt,$local);
		  $value = 'Incluir Tripulacao';
	  } else {
		  $value = 'Incluir Requisicao';
			  
	 }
	?>

a parte que deixa o campo readonly, se eu uso em um campo funciona, mas se for em dois o segundo some da tela.

 

e como fazer isso quando for um select?

Compartilhar este post


Link para o post
Compartilhar em outros sites

você tem que setar o valor ANTES de usar.

 

Assim...

	<?
	  if ($_POST['Enviar'] == 'Incluir Requisicao') {
		  $result = incluireq($ano_req,$num_req,$data,$destino,$dia,$pax,$nanv,$ori,$missao,$dep,$radiobt,$local);
		  $value = 'Incluir Tripulacao';
	  } else {
		  $value = 'Incluir Requisicao';
			  
	 }
	?>
	<input type="submit" name="Enviar" id="Enviar" value="<?php echo $value ?>" />

Tenta agora pra ver se rola.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu Carlos, estou partindo dai para fazer a 2 parte, so uma coisa, tem alguma coisa errada nessa sintaxe que você passou, o campo fica preenchido com aspas....

<input type="text" name="campo" id="campo" value="<?php echo (!empty($_POST['campo']))? $_POST['campo'].'" readonly="readonly" ' : ''; ?>"/>

e com pso fazer isso num select????

 

brigadao!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

tem alguma coisa errada nessa sintaxe que você passou, o campo fica preenchido com aspas

Testei aqui e não ficou com aspas... Funcionou exatamente como previsto...

 

e com pso fazer isso num select????

No select não tem readonly, Então o que você pode fazer é um IF. Se foi postado algum dado daquele select você transforma em um input e usa readonly.

 

Mais ou menos isto... Pelo jeito tá ficando pronto... Viu que não é tão difícil assim?

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

É, estou tentando e vou conseguir, ainda mais sabendo que quando aparecerem as dúvidas sei que tem os feras aqui do forum para ajudar a tira-las.

 

poxa! então onde estou errando? aparece os campos na 1a e depois de enviar o segundo some e aparece a linha do html na tela.

<label class='form_field'>Duração:</label>
	<input type="text" name="dia" size="3" maxlength="3" value="<?php echo (!empty($_POST['dia']))? $_POST['dia'].'" readonly="readonly" ' : ''; ?>" />  
	<label class="form_field">Dias</label>   
	<label class='form_field'>Num. Tripulantes:</label>
	<input type="text" name="pax" size="3" maxlength="3" value="<?php echo (!empty($_POST['pax']))? $_POST['pax'].'" readonly="readonly" ' : ''; ?>" />  

Lucas

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha... copiei seu código, colei em um documento e funcionou exatamente como deveria funcionar... To achando que o problema não está nesta parte do código...

 

Está hospedado em algum lugar? Tem como ver?

 

Posta o restante do código...

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha... está quase lá...

 

Vou te sugerir uma leitura, para deixar o form mais bonito.

 

Link

 

A outra coisa, seria assim... você tem partes do form. Tipo etapas. Na primeira exibição, mostre somente o que é para preencher na primeira vez. Depois de preenchidos os primeiros dados, mostre o restante do formulário... Mais ou menos assim..

if(!empty($_POST['valor do primeiro campo'])){// ou seja, após enviar a primeira etapa

coloque aqui a segunda parte do formulário


}

Se tiver terceira parte, faça a mesma coisa... E reveja a lógica no botão... Não está aparecendo na segunda vez. Uma sugestão, para debug...

echo '<pre>';
print_r($_POST);
echo '</pre>';

Vai imprimir os dados do formulário... é legal para você ver os valores que estão indo.

 

Continua que tá melhorando

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

so uma dica, no lugar de verificar se algum campo especifico foi enviado voce pode simplesmente testar se o tipo de requisicao foi um post, é uma forma mais correta, voce pode fazer isso da seguinte maneira:

 

if ($_SERVER['REQUEST_METHOD'] == "POST") {
  //codigo aqui
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Carlos, gostei da dica e ja apliquei.

Nao entendi bem o que o Wilker explicou, talvez seja ate a solucao.

 

Mas estou com problema na segunda parte,

queria que aparecesse uma unica linha com um botao de incluir e a cada inclusao ela voltasse vazia, tantas vezes quanto for a informacao do campo tripulantes, ou seja, se ele digitar 3, esta linha apareceria 3 vezes uma a cada inclusao. tentei fazer isso com if, while sem sucesso.

A cada vez que incluo, ele resubmete tudo, apagando as informacoes que eu ja tinha incluido da primeira parte.

tem como enviar apenas uma parte do formulario?

o codigo da parte a que me refiro esta ai: (o campo trip tem a quantidade de vezes que a linha tem que aparecer).

 

function incluitrip($ano_req,$num_req,$nm_trip) {

$sql = "INSERT INTO tripulacao (ano_req, num_req, nm_tripulacao) 
						VALUES ('$ano_req', '$num_req', '$nm_trip')";

$result = mysql_query($sql);
if($result){
  echo '';
} else {
  echo 'Ops.. ocorreu algum erro: ('.mysql_errno().') -'.mysql_error();
  }
}
?>

<?
   if ($_POST['Enviar'] == 'Incluir Tripulacao') {
	  if ($trip != 0) {
		  $trip = $trip - 1;
		  echo "
	<fieldset>
	<legend>Tripulação</legend>
   	<label>
	<span>Tripulação: </span>
	<input type='text' name='nm_trip' size='80' maxlength='80' value=''/>
	    
	<input type='submit' name='Incluir' id='Incluir' value='Incluir Tripulacao' class='btn1'
		  onclick='incluitrip($ano_req,$num_req,$nm_trip)' />
	</label>
				</fieldset> ";
	$value = 'Mostrar';				
	   }  
 }
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

A dica do Wilker é sobre segurança, algo que você tem que ver... Leia sobre SQL Injection. Tem um tópico muito bom nos desafios em que o pessoal debate sobre o tema.

http://forum.imasters.com.br/index.php?showtopic=276729

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sobre a tua dúvida, teve estes dias um tópico sobre o assunto. Vou ver se acho. Mas a lógica deve ser assim...

 

O mais fácil no teu caso é colocar assim. 1 campo na primeira parte do formulário perguntando a quantidade de tripulantes. Daí, com esta informação, você joga isto em um for e cria quantos campo tiver... Por exemplo, foi colocado 3 então cria 3 input como array (name="nome_do_campo[]") e coloca o nome de cada um deles...

 

Mais ou menos isto..

 

Qualquer coisa posta de novo

 

Carlos Eduardo

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.