Jump to content


Photo

Sinistro


  • Faça o login para participar
51 replies to this topic

#1 carcleo

carcleo

    Normal

  • Usuários
  • 69 posts
  • Sexo:Não informado

Posted 19/02/2010, 20:48

Ola amigos.

Estou com um problema que esta me intrigando.

É o seguinte:

Tenho o seguinte form:
<FORM METHOD="POST" ACTION="CarrinhoFinal.php?acao=envia_dados" name="FORM_ENVIA_CEP">
	<TABLE width="400" align="center">
		<TR>
		<TD>Informe o CEP para entrega do pedido:</TD>
		<TD><INPUT TYPE="text" NAME="TCEP"></TD>
	</TR>
	<TR>
		<TD>FORMA DE ENVIO:</TD>
		<TD>
		<select name="TENVIO">
		<option value="FRETE_SEDEX" selected>SEDEX</option>		
		<option value="FRETE_PAC">PAC</option>			
		</select>
		</TD>
	 </TR>
	<TR align="center">
	  <TD colspan="2"><input type="submit" value="Enviar Dados" name="envio_cep_frete" WIDTH="78" HEIGHT="20" style="background-color: rgb(0,111,55); color: rgb(255,255,0)" onClick="CriticaFormulario2()"></TD>
	</TR>
	</TABLE>

Esse form envia dois campos para o action dele:
1) TCEP --> TEXTBOX
2) TENVIO --> SELECT

Acontece que os valores da textbox e do select chegam normal, da até pra imprimir.
O problema é que não consigo imprimir a variavel $TENVIO dentro de uma funçao.

Deixa explicar. Veja:

<? if ($acao=="envia_dados") {
	include ("frete.php");
   $print $TENVIO;
//	$result = calcula_frete(FRETE_SEDEX, $TCEP, '36855000', '2');
	$result = calcula_frete($TENVIO, $TCEP, '36855000', '2');
   $print $TENVIO;
?>

Viram?

Imprime antes e depois da função (para teste tá?)

Mas dentro da funçao não vai de jeito nenhum.

Onde estará o erro?

Segue a função:

<?php 
define('FRETE_PAC',		'41106');
define('FRETE_SEDEX',	  '40010');
define('FRETE_SEDEX_10',   '40215');
define('FRETE_SEDEX_HOJE', '40290');
define('FRETE_E_SEDEX',	'81019');
define('FRETE_MALOTE',	 '44105');

function calcula_frete ($servico, $origem, $destino, $peso) {
  if (!$sock = fsockopen('www.correios.com.br', 80, $errornro, $error, 60)) {
	throw new Exception($error, $errornro);
  }
   
  $msg = "GET /encomendas/precos/calculo.cfm?"
		."Servico={$servico}&cepOrigem={$origem}&cepDestino={$destino}"
		."&peso={$peso}&resposta=localhost HTTP/1.1\n"
		."Host: www.correios.com.br\nConnection: Close\n\n";

  fwrite($sock, $msg);

  while (!feof($sock)) {
	$line = fgets($sock);
	if (!preg_match('/^Location: \w+\?(.*)$/i',$line, $match)) continue;

	$data = array();
	foreach(split('&', $match[1]) as $item) {
	  $t = split('=', $item);
	  $data[$t[0]] = trim($t[1]);
	}

	break;
  }
  $data['Servico'] = urldecode($data['Servico']);
  $data['erro'] = urldecode($data['erro']);

  return $data;
}
?>
Estou tentando imprimir para teste assim:

<? 
if ($acao=="envia_dados")
 {        
   include ("frete.php");   
   $print $TENVIO;  /imprimo aqui
   //    $result = calcula_frete(FRETE_SEDEX, $TCEP, '36855000', '2');    
   $result = calcula_frete($TENVIO, $TCEP, '36855000', '2');   
   $print $TENVIO;  /imprimo aqui
?>

Viu o $print $TENVIO; /imprimo aqui

Pode colocar tambem $_POST['TENVIO']; que esta dando na mesma.
[/quote]

Obrigado a quem puder ajudar!

#2 '' sem.Ponto

'' sem.Ponto

    Super Veterano

  • Ex-Admins
  • 2098 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte

Posted 19/02/2010, 21:57

Para imprimir, não se usa print como variável. O print é um construtor da linguagem...

print $TENVIO;
http://www.php.net/print
att,
Muller Dias
ex-administrador Fórum WMO

#3 hostdesigner

hostdesigner

    Super Veterano

  • Usuários
  • 2910 posts
  • Sexo:Masculino
  • Localidade:Quirinópolis-GO
  • Interesses:Programação, Mulheres, Diversão, Mulheres, Música, Mulheres, Meu Carro, Mais mulheres, Internet, Outras Mulheres, Quase por último PAZ e por ultimo Outras Váááárias Mulheres...

Posted 19/02/2010, 22:29

@ "SEM.PONTO
Singelo problema de SEM $ pra resolver :D

@ CARCLEO
Só não vi onde tu "imprimiu" o TCEP, mesmo assim, problema resolvido

Falopa!

#4 carcleo

carcleo

    Normal

  • Usuários
  • 69 posts
  • Sexo:Não informado

Posted 20/02/2010, 08:15

Observe a função:

$result = calcula_frete($TENVIO, $TCEP, '36855000', '2');   

Eu quero dizer que a variavel $TCEP (que vem através de um campo de texto do formulario, por post ) chega normalmente dentro da função mas a variavel $TENVIO , que vem do mesmo formulario só que esse campo é um <select> e NÃO é um campo de texto. O valor do select (TENVIO) não chega dentro da função como o TCEP. Entendeu?

Mas, se eu colocar pra imprimir antes ou depois da função (só pra ver se o valor do aelect ta chegando), la esta o valor imprimido certinho (pode se com echo, print não importa pois dentro da funçao não colocamos print ou post, apenas $TENVIO).

#5 '' sem.Ponto

'' sem.Ponto

    Super Veterano

  • Ex-Admins
  • 2098 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte

Posted 20/02/2010, 13:30

Agora eu entendi...

O primeiro parâmetro pega o valor de uma constante, se você passa o nome da constante via POST ou GET, então não vai pegar o valor mesmo, porque isso vai ser uma string.

Traduzindo... seria o mesmo que fazer isso:

$result = calcula_frete('FRETE_SEDEX', $TCEP, '36855000', '2');

Funciona mesmo não...

Nesse caso, você tem que usar a função constant() para conseguir acessar o valor da constante.

$result = calcula_frete(constant($TENVIO), $TCEP, '36855000', '2');

(ok2)
att,
Muller Dias
ex-administrador Fórum WMO

#6 Paulo Freitas

Paulo Freitas

    ××××××× LRU #456504 ××××××× ××××××× LRM #364686 ×××××××

  • Ex-Admins
  • 5612 posts
  • Sexo:Masculino
  • Localidade:Campinas - SP

Posted 20/02/2010, 13:51

Este não é o webservice indicado no Manual de Implementação de Cálculo Remoto de Preços e Prazos de Encomendas e, portanto, deixou de ter seu uso autorizado pelos Correios - visto que a página em ColdFusion sequer é um webservice e, por conta disso, consome muito mais banda.

Exemplo de implementação do não tão novo webservice pode ser conferido aqui (ou no próprio manual): http://forum.wmonlin...post__p__991351

[]’sAté mais

#7 carcleo

carcleo

    Normal

  • Usuários
  • 69 posts
  • Sexo:Não informado

Posted 20/02/2010, 15:07

Sim, agora funcionou.

Será que existe algum lugar que tenha um script em php com o novo calculo de frete dos correios?

Pergunto pois o manual só traz em asp.

#8 Paulo Freitas

Paulo Freitas

    ××××××× LRU #456504 ××××××× ××××××× LRM #364686 ×××××××

  • Ex-Admins
  • 5612 posts
  • Sexo:Masculino
  • Localidade:Campinas - SP

Posted 20/02/2010, 15:44

Sim, agora funcionou.

Será que existe algum lugar que tenha um script em php com o novo calculo de frete dos correios?

Pergunto pois o manual só traz em asp.

Eu linkei um post meu ali com uma classe de exemplo que postei há alguns dias... :P

Aqui está, novamente: http://forum.wmonlin...post__p__991351

[]’sAté mais

#9 carcleo

carcleo

    Normal

  • Usuários
  • 69 posts
  • Sexo:Não informado

Posted 20/02/2010, 16:40

Não, esta certo.

É que não tenho trabalhado com classes. soó com, funções.;

Tem como me explicar como usala (aplica-la)?

Se estou fazendo certo, a tua classe esta dando erro no Try

nessa linhhs: $EncomendasCorreios = new EncomendasCorreios;

Fatal error: Cannot access self:: when no class scope is active in C:\Program Files\Apache Group\Apache2\htdocs\php\naturelavie.com.br\frete3.php on line 77

e, no mesmo post, abaixo um pouco tem uma colaboração de outro colega:

Deixa isso pra la?

["_saida":"EncomendasCorreios":private]=>
  object(SimpleXMLElement)#2 (1) {
    ["cServico"]=>
    object(SimpleXMLElement)#5 (10) {
      ["Codigo"]=>
      string(5) "41106"
      ["Valor"]=>
      string(5) "12,00"
      ["PrazoEntrega"]=>
      string(1) "5"
      ["ValorMaoPropria"]=>
      string(4) "0,00"
      ["ValorAvisoRecebimento"]=>
      string(4) "0,00"
      ["ValorValorDeclarado"]=>
      string(4) "0,00"
      ["EntregaDomiciliar"]=>
      string(1) "S"
      ["EntregaSabado"]=>
      string(1) "N"
      ["Erro"]=>
      string(1) "0"
      ["MsgErro"]=>
      object(SimpleXMLElement)#3 (0) {
      }
    }



Edição feita por: carcleo, 20/02/2010, 16:49.


#10 Paulo Freitas

Paulo Freitas

    ××××××× LRU #456504 ××××××× ××××××× LRM #364686 ×××××××

  • Ex-Admins
  • 5612 posts
  • Sexo:Masculino
  • Localidade:Campinas - SP

Posted 20/02/2010, 17:21

Se estou fazendo certo, a tua classe esta dando erro no Try

nessa linhhs: $EncomendasCorreios = new EncomendasCorreios;

Fatal error: Cannot access self:: when no class scope is active in C:\Program Files\Apache Group\Apache2\htdocs\php\naturelavie.com.br\frete3.php on line 77

O código daquele post tinha um errinho, mas eu já atualizei lá. É que eu tinha feito uma edição antes de postar aqui. :assobio:

Mas este erro que está acontecendo contigo é um bug do próprio PHP, especificamente da versão que tu está usando. Que versão é? Basta atualizar o PHP para que o erro deixe de ocorrer.

e, no mesmo post, abaixo um pouco tem uma colaboração de outro colega:

Deixa isso pra la?

Sim, pode deixar, esta parte é uma explicação de quais informações tu pode puxar do objeto depois de efetuar a requisição. :)

[]’sAté mais

#11 carcleo

carcleo

    Normal

  • Usuários
  • 69 posts
  • Sexo:Não informado

Posted 20/02/2010, 17:40

php 5.0.0 que estou usando.

Peguei de novo la ocodigo e continua dando erro.;

Não consigo mudar o php la do servidor de hospedagem.;

hehehe.;

Que pena

Ou sera que o codigo que funciona bem não é aquele la da pagina?

Edição feita por: carcleo, 20/02/2010, 17:53.


#12 Paulo Freitas

Paulo Freitas

    ××××××× LRU #456504 ××××××× ××××××× LRM #364686 ×××××××

  • Ex-Admins
  • 5612 posts
  • Sexo:Masculino
  • Localidade:Campinas - SP

Posted 20/02/2010, 18:10

php 5.0.0 que estou usando.

Peguei de novo la ocodigo e continua dando erro.;

Não consigo mudar o php la do servidor de hospedagem.;

hehehe.;

Que pena

Ou sera que o codigo que funciona bem não é aquele la da pagina?

Mas, bah! Esse código funciona sim, testei aqui antes de postar. O problema é um bug do próprio PHP 5.0.0 (se não me engano afeta até versões 5.1.X), que não deixa usar o self::SERVICO_SEDEX nas próprias propriedades, o que é um comportamento totalmente inesperado. :(

Como solução tu pode alterar esta linha para o valor desta mesma constante. Troque isto:

'nCdServico'          => self::SERVICO_SEDEX,
Para isto:

'nCdServico'          => 40010,
E pronto, o código deve funcionar. Lembre-se que eu corrigi o código do post lá, copie ele denovo. ;-)

[]’sAté mais

#13 carcleo

carcleo

    Normal

  • Usuários
  • 69 posts
  • Sexo:Não informado

Posted 21/02/2010, 18:18

Bom, instalei o

apache_2.2.14-win32-x86-openssl-0.9.8k

php-5.3.1-Win32-VC9-x86

Mas, não abre as paginas e não da erro, só abre as imagens de fundo.

le o phpinfo() mas não le nenhuma variavel php.;

O que estou fazendo de errado^?

No php 5.0.0, preisava enviar o php.ini pra pasta windows e php5ts.dll + libmysql.dll pra SYSTEM32 mas no instalador do php-5.3.1-Win32-VC9-x86 não diz nada.

Bom, cosegui resolver o problema do apache reoonhecer o php renmeando o php.ini para meuphp.ini.

Agora nõ estou coseguindo conexão com o mysql.

VBio esse post http://giselebrugger...out-connection/, onde o cara diz ter resolvido o problema mas não estou conseguindo entenmder como ele fez pela explicação dele.

#14 hostdesigner

hostdesigner

    Super Veterano

  • Usuários
  • 2910 posts
  • Sexo:Masculino
  • Localidade:Quirinópolis-GO
  • Interesses:Programação, Mulheres, Diversão, Mulheres, Música, Mulheres, Meu Carro, Mais mulheres, Internet, Outras Mulheres, Quase por último PAZ e por ultimo Outras Váááárias Mulheres...

Posted 21/02/2010, 19:15

@ CARCLEO
Já que o teu projeto não deverá precisar de grandes recursos, instale um pacote básico (all in one) como Wamp ou Xampp.

Falopa!

#15 Paulo Freitas

Paulo Freitas

    ××××××× LRU #456504 ××××××× ××××××× LRM #364686 ×××××××

  • Ex-Admins
  • 5612 posts
  • Sexo:Masculino
  • Localidade:Campinas - SP

Posted 21/02/2010, 21:58

@ CARCLEO
Já que o teu projeto não deverá precisar de grandes recursos, instale um pacote básico (all in one) como Wamp ou Xampp.

Falopa!

É uma boa idéia. Recomendo o XAMPP pois, além de estar disponível para Linux, Windows, Mac OS X e Solaris, é mantido por profissionais e atualizado quase que imediatamente em novas versões do Apache, PHP ou MySQL. ;-)

[]’sAté mais




0 user(s) are reading this topic

0 membro(s), 0 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq