Ir para conteúdo

Arquivado

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

Carcleo

form HTML dentro Variavel php não envia dados

Recommended Posts

Ola a todos!

 

Resolvi em partes meu problema.

 

O que eu fiz:

 

Peguei um formulario e coloquei ele todo dentro de uma variavel $FORMULARIO;

 

Depois dessa variavel, fiz um include para uma pagina (frete.php) que me retornará o resultado do calculo do frete. Eu acho que até não há nehuma novidade né?

 

Acontece, que nessa pagina frete.php, tem uma chamada para a variavel $FORMULARIO pois, caso o resultado do frete.php dê um numero negativo exibe o erro, mas, caso o frete.php retorne valores do frete, dai exibe o formulario que esta na variavel $FORMULARIO;

 

Até ai deu para entender?

 

Bom, até neste ponto, tudo esta correto.

 

Porem, quando submeto os dados do formulario que esta na variavel $FORMULARIO, os $HTTP_POST_VARS simplemente não vão.

 

Eis os códigos:

CarrinhoFinal_Conteudo.php

...
   if ($acao=="RECEBE_CEP_SERVICO") {
				  $busca = mysql_query("SELECT * FROM clientes where id='$SESSAOlogin';") or die("A consulta falhou: " . mysql_error());
                  list($id, $nome, $email, $cidade, $estado, $senha, $cpfcnpj, $tel, $cel, $endereco, $numero, $bairro,$cep) = mysql_fetch_row($busca);
				  $FORM_ENDERECO = "
 	<FORM METHOD='POST' ACTION='CarrinhoFinal.php?acao=gravar_pedido' name='FORM'>
	<INPUT TYPE='hidden' NAME='FORM' VALUE='FORM'>
    <INPUT TYPE='hidden' NAME='peso_medio' VALUE='$peso_medio'>
    <input type='hidden' name='TENVIO' value='$TENVIO; ?>'>
    <input type='hidden' name='TCEP' value='$TCEP; ?>'>    
    <input type='hidden' name='Id_Cliente' value='$SESSAOlogin; ?>'>          
	<TABLE width='400' align='center'>
	<tr><td colspan='2' align='center'><h2><b>Finalizando Compra<br>Por favor. Confira os dados e preencha corretamente o formulário antes de prosseguir!</b></h2></td></tr>
	<TR>
		<TD>PAGAMENTO </TD>
		<TD>
      <!--
        <div id='cartao' style='display:block;'>oi</div>
        onclick='javascript: fecha('cartao');'
        -->
            <INPUT type='radio' NAME='TPGTO' value='MASTERCARD' checked='checked'> MASTERCARD 
            <br>
            <INPUT type='radio' NAME='TPGTO' value='BOLETO'> BOLETO  (À Vista)<br>
            <INPUT type='radio' NAME='TPGTO' value='DEPOSITO'>           
             DEPÓSITO  (À Vista)
      </TD>
	</TR>
	<TR>
		<TD>NOME:/RAZÃO SOCIAL </TD>
		<TD><INPUT TYPE='text' NAME='TNOME' value='$nome' disabled='disabled'></TD>
	</TR>    
	<TR>
		<TD>CPF/CNPJ:</TD>
		<TD><INPUT TYPE='text' NAME='TCPF' value='$cpfcnpj' disabled='disabled'></TD>
	</TR>
    <TR>
		<TD>EMAIL:</TD>
		<TD><INPUT TYPE='text' NAME='TEMAIL' value='$email' disabled='disabled'></TD>
	</TR>	
	<TR>
		<TD>ENDEREÇO: <font color='red'>(de entrega)</font></TD>
		<TD><INPUT TYPE='text' NAME='TENDERECO' value='$endereco'></TD>
	</TR>
	<TR>
		<TD>BAIRRO:</TD>
		<TD><INPUT TYPE='text' NAME='TBAIRRO' value='$bairro'></TD>
	</TR>
	<TR>
		<TD>CIDADE:</TD>
		<TD><INPUT TYPE='text' NAME='TCIDADE' value='$cidade'></TD>
	</TR>
	<TR>
		<TD>ESTADO:</TD>
		<TD><INPUT TYPE='text' NAME='TESTADO' value='$estado'></TD>
	</TR>
   <TR>
		<TD>FONE (Contato):</TD>
		<TD><INPUT TYPE='text' NAME='TFONE' value='$tel'></TD>
	</TR>	
    <input type='hidden' name='valor_final' value='$valor_final; ?>'>      	
   <TR align='center'>
	  <TD colspan='2'><input type='submit' name='Finalizar' value='Finalizar'  WIDTH='78' HEIGHT='20' style='background-color: rgb(0,111,55); color: rgb(255,255,0)' onClick='CriticaFormulario()'></TD>
	</TR>
  </TABLE>
</FORM>

                                    "; 
			include ('frete.php');
			}
			}

frete.php

<?php
#####################################
# Código dos Serviços dos Correios  #
#    FRETE PAC = 41106              #
#    FRETE SEDEX = 40010            #
#    FRETE SEDEX 10 = 40215         #
#    FRETE SEDEX HOJE = 40290       #
#    FRETE E-SEDEX = 81019          #
#    FRETE MALOTE = 44105           #
#    FRETE NORMAL = 41017           #
#    SEDEX A COBRAR = 40045         #
#####################################

        $nCdEmpresa          = "";
        $sDsSenha            = "";
        $nCdServico          = $_POST['TENVIO'];
        $sCepOrigem          = 36855000;
        $sCepDestino         = $_POST['TCEP'];
		$sCepDestino         = eregi_replace("([^0-9])","",$sCepDestino);
        $nVlPeso             = $peso_medio;
        $nCdFormato          = 1;
        $nVlComprimento      = 20;
        $nVlAltura           = 20;
        $nVlLargura          = 20;
        $nVlDiametro         = 0;
        $sCdMaoPropria       = "N";
        $nVlValorDeclarado   = 0;
        $sCdAvisoRecebimento = "S";

// URL de Consulta dos Correios entregue à variavel $correios
$correios ="http://shopping.correios.com.br/wbm/shopping/script/CalcPrecoPrazo.aspx?"
."nCdEmpresa=$nCdEmpresa&"
."sDsSenha=$sDsSenha&"
."sCepOrigem=$sCepOrigem&"
."sCepDestino=$sCepDestino&"
."nVlPeso=$nVlPeso&"
."nCdFormato=$nCdFormato&"
."nVlComprimento=$nVlComprimento&"
."nVlAltura=$nVlAltura&"
."nVlLargura=$nVlLargura&"
."sCdMaoPropria=$sCdMaoPropria&"
."nVlValorDeclarado=$nVlValorDeclarado&"
."sCdAvisoRecebimento=$sCdAvisoRecebimento&"
."nCdServico=$nCdServico&"
."nVlDiametro=$nVlDiametro&"
."StrRetorno=xml";

  
$dados_correios = simplexml_load_file($correios);
//print_r($dados_correios);
print "<p>";

$total = $dados_correios->xpath('cServico/Valor'); 
$total = floatval(str_replace(',', '.', $total[0]));
$PrazoEntrega = $dados_correios->xpath('cServico/PrazoEntrega');   
$erros = $dados_correios->xpath('cServico/Erro');   
$ValorAvisoRecebimento = $dados_correios->xpath('cServico/ValorAvisoRecebimento');   


if ($erros[0] != 0)
   {     
	   // Tratamento dos Erros
	   //CEP de destino inválido
	   if ($erros[0] == -3) {
		            Print "CEP de destino inválido.<br> Cloque <a href='javascript:window.history.go(-1)'>Aqui</a> e tente um novo CEP!";
					echo "<script>document.FORM.Finalizar.disabled=true;</script>";
					         }
	   //Sistema temporariamente fora do ar. Favor tentar mais tarde.
   	   else if ($erros[0] == -33) {
 		            Print "Sistema dos correios temporariamente fora do ar.<br> Por favor navegue um pouco mais pelo site e após alguns segundos, tente novamente!";
					echo "<script>document.FORM.Finalizar.disabled=true;</script>";

		                          }	   	   
	   //Serviço indisponível para o trecho informado.
	   else if ($erros[0] == -6) {
             		echo "<script>alert('Sistema dos correios indisponível para o trecho informado');</script>";
					session_unregister("MeuCarrinho");
             	    echo "<script>document.location='produtos.php?acao=listar'</script>";
                                 }
	  //Para qualquer outro erro
	   else {
		            Print "CEP de destino inválido ou erro no sistema dos correios.<br> Cloque <a href='javascript:window.history.go(-1)'>Aqui</a> e tente um novo CEP!";
					echo "<script>document.FORM.Finalizar.disabled=true;</script>";
            }
	   
   }
else 
   {            
   
   			  print	 $FORM_ENDERECO;
			   switch ($nCdServico) {
				case 41106:
				$nome_servico = " PAC ";
				break;
				case 40010:
				$nome_servico = " SEDEX ";
				break;
			                     	}
									?>
<TABLE width='400' align='center'><tr>
    <TD>VALORES:</TD>
    <TD>
<?
			  print "O valor da sua compra sem o frete R$ ";
			  print number_format($preco_total, 2, ',', '.');
			  print "<p>"; 

      		  print "O valor do envio por ";
			  print $nome_servico;
			  print " será de: R$";
			  print number_format($total, 2, ',', '.');
			  print "<p>";
			  
			  print "O prazo de entrega será de ";
			  print $PrazoEntrega[0];
			  print " dia(s) úteis";
			  print "<p>";
			  
			  $valor_final = $total + $preco_total;
			  print "O valor da tua compra com o frete R$ ";
			  print number_format($valor_final, 2, ',', '.');			   

?>
    </td></tr></table>	
    <?								

   }

// Neste exemplo estou colocando apenas PAC e SEDEX
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

seu formulário contém alguns erros HTML, exemplo

 

<input type='hidden' name='TCEP' value='$TCEP; ?>'>

retorna

<input type='hidden' name='TCEP' value='00000-000; ?>'>

 

algumas sugestões:

 

troque

list($id, $nome, $email, $cidade, $estado, $senha, $cpfcnpj, $tel, $cel, $endereco, $numero, $bairro,$cep) = mysql_fetch_row($busca);

por

extract(mysql_fetch_assoc($busca));

se precisar manipular o nome das variáveis, faça-o na consulta sql

antes

SELECT `tbl_principal_nome`, `tbl_principal_idade`, `tbl_principal_sexo` FROM `tbl_principal`

 

depois

SELECT `tbl_principal_nome` AS `nome`, `tbl_principal_idade` AS `idade`, `tbl_principal_sexo` AS `sexo` FROM `tbl_principal`

 

Crie seu formulário em HTML com a ajuda de algum editor e teste a estrutura no navegador. Se estiver tudo ok, basta enviá-lo com um echo, em formato HEREDOC envolvendo as variáveis em {chaves}

 

echo <<<FORM
<form action="" method="post">
   <input type="text" name="cep" value="{$cep}" />
</form>
FORM;

 

no arquivo CarrinhoFinal.php, adicione

if($_GET['acao'] == 'gravar_pedido') var_dump($_POST);

 

e poste aqui a saída dos valores

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha só

 

Fiz algumas alterações de (falta de atenção) e resolveu.

 

O problema agora é que eu tenho duas variaveis que estão no arquivo frete.php (são elas $valor_final e $total) que não chegam ao form (que por sua vez é chamado de dentro do frete.php)

 

Eu preciso dentro de form, chamalas assim:

 

    <input type='hidden' name='valor_final' value='$valor_final'>    
    <input type='hidden' name='TVALOR_FRETE' value='$total'>    

Para envialas junto com, o form para o MySql.

 

Como saio dessa?

Compartilhar este post


Link para o post
Compartilhar em outros sites

faça a inclusão do frete.php ANTES de ecoar o formulário, o Include passa a ser a primeira linha do bloco if{}

 

aí você remove o print $formulario do frete.php e coloca dentro do carrinhofinal_conteudo.php

 

 

uma dica de segurança. Valores protegidos como preço total, valor de frete, valor de pacote, NÃO DEVEM ser passados novamente ao usuário através de hidden ou text/disabled

 

injetando javascript diretamente na barra de endereços é possível liberar e até mesmo modificar estes valores antes de submeter a compra, o que gera um relatório violado que pode ser constrangedor para a empresa.

 

armazene estes valores em uma tabela de compras temporárias ou em cookie/session codificados com algum algoritmo de criptografia reversível tipo base_64, e utilize estes valores apenas para exibição do cliente

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendi!

 

Meu codigo estava assim antes.

 

Mas, cheguei na seguite incruzilhada: Caso a resposta do servidor dos correios ao envio do CEP fosse um valor negativo (erro de envio de uma forma qualquer), dai eu teria que desabilitar o formulario (de endereço) para envio ao MySql. Dai, optei por fazer o frete chamando o form pois assim, caso der erro, exibo só a mensagem de erro e se não der erro no retorno do frete, ai exibo o form.

 

O Curioso é todas os campos do form vão para o MySql mas esses dois que não fazem parte do form masa sim do calculo do frete, esses não vão.

 

Será que se eu armazenar eles numa sessão, eles vão?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Me diga passo-a-passo como é feito o processo de compra. As vezes posso lhe sugerir uma logística melhor aproveitando os códigos que você já tem prontos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok

 

Mas antes de explicar, eu fiz uma coisa que resolveu o problema.

 

Peguei o conteudo da variavbel $form_endereco que é o formulario, e em vez de eu chama-la de dentro da pagina frete. Php, coloquei noi lugar do print $form_endereco o seu conteudo(mesmo dentro do frete. Php), como estava dentro do frete. Php fruncionou e eui obtive os valores das variaveis que precisava.

 

Mas , tem jeito de enviar sem ser como <type=hidem)?

 

Agora, explicando o carrinho:

 

Pego os valores do carrinho (produtos, quantidade, preco_unitario,... ) e os gravo numa sessão $carrinho.

Quando cliko em fechar compra, saio do carrinho. Php e vou para carrinho_final. Php e la entro num, form com coloque o cep e escolha o tipo de envio(sedex-pac), preenchidos os campos, vai para uma action que verificará se o cep é valido chamando por include a frete. Php. Caso o cep não seje valido, exibe o erro. Caso seje valido, exibe o resultado da operação (tipo uma nota fiscal) mais o form para inserir os dados de entrega(ewndereço.. )

 

Após isso, vai pro mysql

Compartilhar este post


Link para o post
Compartilhar em outros sites

adicione uma nova coluna na sua tabela de pedidos (confirmado -- booleano)

 

a cada passo da compra, atualize as informações referentes ao ID de sessão que está fazendo a compra e ao invés de <input type="hidden" />'s você exibe os dados como <p> mesmo, apenas para verificação e confirmação

 

ao final de todas as etapas, quando tudo já estiver verificado e preenchido, adicione um botão "Concluir a compra!" que atualizará o campo 'confirmado' para TRUE

Compartilhar este post


Link para o post
Compartilhar em outros sites

Irmão! Na boa.

 

Eu sei um pouco de php, mas tanto assim.

 

Não consegui entendi dreito a tua orientação.

 

Tem como dar um esemplo ou explicar melhor?

 

Isso m interessou!

Compartilhar este post


Link para o post
Compartilhar em outros sites

vamos lá, então.. passo-a-passo.

 

Pelo que deu pra entender das tuas explicações e códigos, cada produto que interessa é adicionado à $_SESSION até que o cliente "feche" o carrinho de compras. Então ele é enviado a uma página onde preenche as informações pessoais (inclusive endereço). A partir do endereço recebido, a próxima página a ser exibida é a das informações finais, incluindo cálculo de frete e valor total da compra.

 

 

dividindo em partes:

 

1. cliente fecha carrinho

2. cliente insere informações pessoais

3. cliente conclui a compra

 

 

precisaremos de:

primeiramente, adicionar uma coluna na tabela que nos dirá que o cliente seguiu o processo de compra até o fim

ALTER TABLE `tabela_compras` ADD COLUMN `concluido` BOOLEAN

 

acredito que você já tenha (pelo menos em mente) o processo de registro da compra, com as informações do cliente, cep, valor total e produtos, certo?

ao invés de deixar para o final esta inserção no banco, a mesma será feita em partes

 

primeiro, o cliente fecha o carrinho (os dados ainda estão na session), você pede as informações pessoais e valida se o CEP retorna um custo de frete correto (aqueleee problemão com o simpleXML lá atrás)

 

se não tiver dado erro nenhum, você insere os valores no banco AGORA e não envia um formulário para o cliente, envia um relatório.

 

como é agora

<input type="TCEP" value="{$cep}" disabled="disabled" />

 

como ficará

<p><b>CEP:</b> {$cep}</p>

 

pelo que eu entendi, agora viria a parte onde o cliente escolhe a forma de pagamento (pois são os únicos campos alteráveis do formulário)

proceda normalmente da maneira que tem em mente. Se o modo de compra também gera algum campo no banco de dados, basta executar seguinte query:

 

UPDATE `tabela_compras` SET `forma_pagamento` = "{$formaPagamento}" WHERE `id_cliente` = {$_SESSION['id']}

 

Todos os valores são fictícios, apenas para ilustração.

Após as validações de Cartão de Crédito ou envio de boleto para impressão, faça uma última atualização no banco para informar que a compra foi concretizada:

UPDATE `tabela_compras` SET `concluido` = TRUE WHERE `id_cliente` = {$_SESSION['id']}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pois é, entendi..

 

Tenho um, cadastro de clientes onde o cliente (não logado), na hora de fechar a compra e ir para o form de colocar o cep e escolher o tipo de envio, nesse momento, ele tem que logar. Se não, não gravba no MySql o pedido do cliente. Caso ele logue (ou ja esteje logado), ai eu exibo o form com o endereço de entrega para ele preecnher.

 

Estou fazendo assim: caso o cep que ele inserir, seje o mesmo do seu cadastro, eu exibo no form de endereço o endereço de seu cadastro mas permito ele alterar (para o caso de um presente na mesma cidade). caso os ceps sejem diferentes, exibo os campos vazios para edição.

 

Agora, quando o cli concretiza a compra, eu fecho a sessão da compra mas não fecho a sessão do logon do cli, pois ele pode querer fazer outra compra e para isso precisará estar logado.

 

Depois disso, eu mostro o relatório da compra (tipo uma Nota Fiscal) e mostro a opção de pagamento que ele escolheu.

 

Caso seje o cartão. ai tenho um problema:

 

mostro a bandeira do cartão (nesse momento, a sessão da compra ja foi fechada e os dados gravados no Mysql)e um botão PAGAR que,. ao ser clikado, abre a pagina do cartão para o cli entrar com os dados do cartão tipo, numero, senha e fechar o pagamento.

 

Min]ha duvida aqui é:

 

Sei que após o fechamento la no site do cartão, o cartao envia a confirmação para o site dizendo se deu certo ou não o pagamento do cli.

 

Receber essa resposta no site e atualizar é que não estou sabendo.

 

validações de Cartão de Crédito

Compartilhar este post


Link para o post
Compartilhar em outros sites

você vai depender de uma API ou Webservice semelhante ao dos correios, aonde você busca por uma varíavel ERRO e verifica se a compra foi concluída com sucesso.

 

 

Neste ponto, vou ficar devendo, pois nunca precisei trabalhar com isso ainda. Caso você consiga uma aplicação que cheque a validade e crédito do cartão, e encontrar dúvidas, basta postar o formato de resposta (assim como fizemos com o dos correios) que eu ajudo no que puder

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.