Ir para conteúdo

Arquivado

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

Carcleo

Invasão?

Recommended Posts

Pessoal.

pode até parecer bobeira. Mas estou com duvida :

 

Tenhoo código:

 

<?
if($_GET['acao']=="listar")
{
$data_emissao_ini=datasql($_POST['data_emissao_ini']);
$data_emissao_final=datasql($_POST['data_emissao_final']);	

$data_entrada_ini=datasql($_POST['data_entrada_ini']);
$data_entrada_final=datasql($_POST['data_entrada_final']);

$fornecedor = $_POST['fornecedor'];
$cliente = $_POST['cliente'];

if(!$busca)
{
  if(isset($data_emissao_ini))
  {
	  $busca = "WHERE notas.data_emissao between '$data_emissao_ini' and '$data_emissao_final'";
	  $order = "order by notas.data_emissao";
  }
  elseif(isset($data_entrada_ini))
  {
	  $busca = "WHERE notas.data_emissao between '$data_entrada_ini' and '$data_entrada_final'";
	  $order = "order by notas.data_entrada";
  }
  elseif(isset($fornecedor))
  {
	  $busca = "WHERE notas.id_fornecedor=$fornecedor";
	  $order = "order by notas.num_nota";
  }
  elseif(isset($cliente))
  {
	  $busca = "WHERE notas.id_cliente=$cliente";
	  $order = "order by notas.num_nota";
  }
  else
  {
	  $busca = "";
	  $order = "order by notas.num_nota";
  }
}
else 
{ $busca=$_GET['busca']; }
...

O formulario esta disparando os field via post

<form id="pesquisas" name="pesquisas" method="post" action="?acao=listar">

Acontece, que se eu fizer:

?acao=listar&forncedor=1

via barra de endereços, mesmo o envio e recepçao estando sendo enviados e recebidos via post, enviando via barra de enderços via browser (Get) sobrepoe o post.

 

Como corrijo isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

acha mesmo q isso vai dar certo? primeiro ou eh get ou eh post

if($_GET['acao']=="listar")
{
       $data_emissao_ini=datasql($_POST['data_emissao_ini']);

 

2 tipos de requisicoes numa unica requisicao, eh ilogico...

isto nunca vai dar certo...

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Coloca no seu formulário um campo hidden com o nome 'ação' e o valor por padrão 'listar',

<input type="hidden" name="acao" value="listar" />

troque:

 

if($_GET['acao']=="listar")

 

por:

if($_POST['acao']=="listar")

 

isso aqui também

<form id="pesquisas" name="pesquisas" method="post" action="?acao=listar">

 

Deixe assim:

<form id="pesquisas" name="pesquisas" method="post">

Compartilhar este post


Link para o post
Compartilhar em outros sites

Do jeito do Andrey Knupp funcionou.

 

Porem, um problema ainda persiste:

Quando chego nessa parte do código:

...
  elseif(isset($fornecedor))
  {
	  $busca = "WHERE notas.id_fornecedor=$fornecedor";
	  $order = "order by notas.num_nota";
  }
  elseif(isset($cliente))
  {
	  $busca = "WHERE notas.id_cliente=$cliente";
	  $order = "order by notas.num_nota";
  }
...

Mesmo que a pesquisa tenha enviado a variavel $cliente com valor e $fornecedor vazio, o comando else if faz com que a variavel $busca seja a do elseif caso o fornecedor e não caso o cliente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Assim deu certo.

 

Só gostaria de saber se é seguro uma vez que se eu adicionar á url o envio por get de uma variavel, o sistema passa a mnostrar a pagia vazia (sem reultados)

Form

<form id="pesquisas" name="pesquisas" method="POST" action="">
<input type="hidden" name="acao" value="listar" />
...

Autenticação:

<?
if($_REQUEST['acao']=="listar")
{
$data_emissao_ini=datasql($_POST['data_emissao_ini']);
$data_emissao_final=datasql($_POST['data_emissao_final']);	

$data_entrada_ini=datasql($_POST['data_entrada_ini']);
$data_entrada_final=datasql($_POST['data_entrada_final']);

$fornecedor = $_POST['fornecedor'];
$cliente = $_POST['cliente'];

if(!$busca)
{
  if(!empty($data_emissao_ini))
  {
	  $busca = "WHERE notas.data_emissao between '$data_emissao_ini' and '$data_emissao_final'";
	  $order = "order by notas.data_emissao";
  }
  elseif(!empty($data_entrada_ini))
  {
	  $busca = "WHERE notas.data_emissao between '$data_entrada_ini' and '$data_entrada_final'";
	  $order = "order by notas.data_entrada";
  }
  elseif(!empty($fornecedor))
  {
	  $busca = "WHERE notas.id_fornecedor=$fornecedor";
	  $order = "order by notas.num_nota";
  }
  elseif(!empty($cliente))
  {
	  $busca = "WHERE notas.id_cliente=$cliente";
	  $order = "order by notas.num_nota";
  }
  else
  {
	  $busca = "";
	  $order = "order by notas.num_nota";
  }
}
else 
{ $busca=$_GET['busca']; }
...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Carcleo quem disse para usar $_REQUEST? Se é enviado por POST verifique por esse método.

 

<?php
// short tags não são indiciadas pois dependem da configuração do servidor
if ( $_POST['acao'] == 'listar' ) {

       $data_emissao_ini   = datasql( $_POST['data_emissao_ini'] );
       $data_emissao_final = datasql( $_POST['data_emissao_final'] );      

       $data_entrada_ini   = datasql( $_POST['data_entrada_ini'] );
       $data_entrada_final = datasql( $_POST['data_entrada_final'] );

       $fornecedor = $_POST['fornecedor']; // Quer segurança? Verifique as entradas de usuário. SQL INJECTION, XSS..
       $cliente    = $_POST['cliente']; // Quer segurança? Verifique as entradas de usuáriio. SQL INJECTION, XSS..

       // register_globals esta ativo? De onde virá $busca, NULL ?
       if( !$busca ) {

         if ( !empty( $data_emissao_ini ) ) {

                 $busca = "WHERE notas.data_emissao between '$data_emissao_ini' and '$data_emissao_final'";
                 $order = "order by notas.data_emissao";

         } elseif( !empty( $data_entrada_ini ) ) {

                 $busca = "WHERE notas.data_emissao between '$data_entrada_ini' and '$data_entrada_final'";
                 $order = "order by notas.data_entrada";

         }elseif( !empty( $fornecedo ) ) {

                 $busca = "WHERE notas.id_fornecedor = '$fornecedor'";
                 $order = "order by notas.num_nota";

         } elseif( !empty( $cliente ) ) {

                 $busca = "WHERE notas.id_cliente=$cliente";
                 $order = "order by notas.num_nota";

         } else { 

                 $busca = "";
                 $order = "order by notas.num_nota";

         }

       } else { 

       	// Ou é por $_GET ou por $_POST tem que decidir rsrs.
       	$busc = $_GET['busca']; 

       }
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

<form id="pesquisas" name="pesquisas" method="post" action="?acao=listar">

 

if ($_SERVER['REQUEST_METHOD']=='POST' AND $_SERVER['QUERY_STRING']=='acao=listar') {

....

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.