Carlos Rocha Posted November 1, 2011 Report Share Posted November 1, 2011 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=1via 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? Quote Link to comment Share on other sites More sharing options...
0 ESerra Posted November 1, 2011 Report Share Posted November 1, 2011 Apesar de não justificar, register_globals está ativado? Quote Link to comment Share on other sites More sharing options...
0 Carlos Rocha Posted November 1, 2011 Author Report Share Posted November 1, 2011 sim, esta.Isso é outro problema.Não estou sabendo como fazer uso de sessões sem register_globals estar On Quote Link to comment Share on other sites More sharing options...
0 MTavares Posted November 1, 2011 Report Share Posted November 1, 2011 (edited) Olá Carlos,sem o Register_Globals, para pegar os valores diretamente pelo browser, basta usar o $_REQUEST[]; Outra dica é sobre o seu form. você faz dessa forma:<form id="pesquisas" name="pesquisas" method="post" action="?acao=listar"> Eu aconselharia a você fazer dessa forma: <form id="pesquisas" name="pesquisas" method="post" action="."> ..... <input type="submit" name="acao" value="listar"> </form>Observe que eu tirei a chamada da ação e coloquei no botão...dessa forma, só será listado quando clicarem no botão e darem o request.absSó mais um detalhe, retire o $_GET e coloque $_POST do seu código.abs Edited November 1, 2011 by MTavares Quote Link to comment Share on other sites More sharing options...
0 ESerra Posted November 1, 2011 Report Share Posted November 1, 2011 Sessões tem que funcionar sem register_globals... como você está criando as sessões? Quote Link to comment Share on other sites More sharing options...
0 Carlos Rocha Posted November 1, 2011 Author Report Share Posted November 1, 2011 (edited) Form<table> <tr><td colspan="2"> <? if ($errocli == "deslogado") { echo ("<font color=red size=-1><b>Não esta logado, favor logar no Sistema</b></font>"); } if ($errocli == "invalido") { echo ("<font color=red size=-1><b>Usuário Inválido ou senha não confere</b></font>"); } if ($errocli == "bloqueado") { echo ("<font color=red size=-1><b>Usuário Bloqueado</b></font>"); } ?> </td></tr> <form action="logar.php?acao=cliente" method="post" name="login_cliente"> <tr> <td colspan="2"><font color="#990000">Cliente</font></td></tr> <tr> <td valign="top" colspan="2"> <table width="300"> <tr> <td width="150" valign="top"> <input type="radio" name="pessoa" id="pessoa" value="j" onclick="java script: abre('juridica'); fecha('fisica'); limpaCampo( 'cpf' );" /> <label>Pessoa Jurídica</label><br> <input type="radio" name="pessoa" id="pessoa" value="f" onclick="java script: fecha('juridica'); abre('fisica'); limpaCampo( 'cnpj' );" /> <label>Pessoa Física</label> </td> <td width="150" valign="top"> <div id="juridica" style="display:block;"> <table> <tr> <td colspan="2" ><label>CNPJ: <br /> <input type="text" name="cnpj" id="cnpj" class="bginput" maxlength="18" size="19" onkeypress="return mascara(event,this,'##.###.###/####-##');" value="" /></label><br /><br /> </td> </tr> </table> </div> <div id="fisica" style="display:none;"> <table> <tr> <td colspan="2"><label>CPF: <br /> <input type="text" name="cpf" id="cpf" class="bginput" maxlength="14" size="19" onkeypress="return mascara(event,this,'###.###.###-##');" value="" /></label><br /><br /> </td> </tr> </table> </div> </td> </tr> </table> </td> </tr> <tr> <td>Senha:</td> <td><INPUT TYPE="password" NAME="senha" VALUE="" SIZE=20 MAXLENGTH=40></td> </tr> <tr> <td colspan="2" align="center"> <input type="button" value="Entrar" onClick="CriticaLoginCliente()"> <input type="reset" value="Limpar"> </td> </tr> </form> </table> Autenticação: <? session_start(); include("global/config/conexao.php"); ?> <?php //////////////////////////////////CASO DE CLIENTE LOGAR/////////////////////////////// if ($acao=="cliente") { if ($pessoa=="j") {$dcto=$cnpj;$dctotipo="cnpj";$pessoatipo="razaosocial";} if ($pessoa=="f") {$dcto=$cpf;$dctotipo="cpf";$pessoatipo="nome";} $dcto = str_replace( ".", "", $dcto); $dcto = str_replace( "-", "", $dcto); $dcto = str_replace( ".", "", $dcto); $dcto = str_replace( "/", "", $dcto); $dcto = str_replace( "-", "", $dcto); $senha = $_POST['senha']; $sql = $MySQL->query("select id, $pessoatipo from clientes where $dctotipo='$dcto' and senha='$senha'"); $num = mysql_num_rows($sql); if ($num==0) { echo "<script>document.location='index.php?errocli=invalido'</script>"; } else { $sql = $MySQL->query("select id, bloqueio, $pessoatipo from clientes where $dctotipo='$dcto'"); $bloqueio = mysql_result($sql,0,"bloqueio"); $name = mysql_result($sql,0,$pessoatipo); $sessaologincli = mysql_result($sql,0,"id"); if ($bloqueio == "s") { echo "<script>document.location='index.php?errocli=bloqueado'</script>"; } else { session_register("bloqueio"); session_register("name"); session_register("sessaologincli"); echo "<script>document.location='clientes'</script>"; } } } ?> Validação da sessão: <?php if ($sessaologinadmin) { $nome_admin = split(' ',$name); echo "<font color='#FFFFFF'><H1>Administrador $nome_admin[0]!</H1></font>"; } else { echo "<script>document.location='../index.php?erroadmin=deslogado'</script>"; } ?> Edited November 1, 2011 by Carlos Rocha Quote Link to comment Share on other sites More sharing options...
0 MTavares Posted November 1, 2011 Report Share Posted November 1, 2011 Troque:session_register("bloqueio"); session_register("name"); session_register("sessaologincli"); por: $_SESSION["bloqueio"] = $bloqueio; $_SESSION["name"] = $name; $_SESSION["sessaologincli"] = $sessaologincli; o que seu botão faz com esse comando? valida os campos? onClick="CriticaLoginCliente()" Quote Link to comment Share on other sites More sharing options...
0 Carlos Rocha Posted November 1, 2011 Author Report Share Posted November 1, 2011 faz isso:function CriticaLoginCliente() { if (document.login_cliente.pessoa[0].checked) { document.login_cliente.cpf.value=""; if (document.login_cliente.cnpj.value == "") { alert("Preencha CNPJ: campo obrigatório !"); document.login_cliente.cnpj.focus(); return (false); } if (document.login_cliente.cnpj.value.length < 18) { alert("CNPJ: Preencha Corretamente!"); document.login_cliente.cnpj.focus(); return (false); } if (document.login_cliente.cnpj.value == " . . / - ") { alert("Preencha CNPJ: Aproveite a mascara para preencher!"); document.login_cliente.cnpj.focus(); return (false); } } else if (document.login_cliente.pessoa[1].checked) { document.login_cliente.cnpj.value=""; if (document.login_cliente.cpf.value == "") { alert("Preencha CPF: campo obrigatório !"); document.login_cliente.cpf.focus(); return (false); } if (document.login_cliente.cpf.value.length < 14) { alert("CPF: Preencha Corretamente!"); document.login_cliente.cpf.focus(); return (false); } if (document.login_cliente.cpf.value == " . . - ") { alert("Preencha CPF: Aproveite a mascara para preencher!"); document.login_cliente.cpf.focus(); return (false); } } else { alert("É necessário escolher uma opção\n Se Pessoa Juridica ou Física."); if (document.getElementById('juridica').style.display == 'block') { document.login_cliente.pessoa[0].checked = true; document.login_cliente.pessoa[1].checked = false; document.login_cliente.cnpj.focus(); } else if (document.getElementById('fisica').style.display == 'block') { document.login_cliente.pessoa[0].checked = false; document.login_cliente.pessoa[1].checked = true; document.login_cliente.cpf.focus(); } return false; } if (document.login_cliente.senha.value == "") { alert("Preencha Senha: Campo obrigatório!!!"); document.login_cliente.senha.focus(); return (false); } document.login_cliente.submit(); } Quote Link to comment Share on other sites More sharing options...
0 MTavares Posted November 1, 2011 Report Share Posted November 1, 2011 Então Carlos,eu indicaria uma mudança de validação. Por ex, colocaria as validações diretamente no PHP, existem funções que validam o CNPJ, vou disponibilizar pra você uma dessas funçoes. A outra troca seria como eu informei acima, retirar do seu action o endereço e colocar dessa forma:Form:<form action="." method="post" name="login_cliente"> Botão: <input type="submit" name="Submit" value="Entrar"> e na sua autenticação: if ($_POST["Submit"] =="Entrar") { Dessa forma a validação só se dará quando apertar o botão, sem se preocupar em passar pela querystring os valores. Segue abaixo a função de validação do CNPJ em PHP. $CNPJEmpresa = trim($_POST["CNPJEmpresa"]); function validaCNPJ($CNPJEmpresa){ $CNPJEmpresa = preg_replace ("@[./-]@", "", $CNPJEmpresa); if(strlen ($CNPJEmpresa) <> 14 or !is_numeric ($CNPJEmpresa)){ return 0; } $j = 5; $k = 6; $soma1 = ""; $soma2 = ""; for ($i = 0; $i < 13; $i++){ $j = $j == 1 ? 9 : $j; $k = $k == 1 ? 9 : $k; $soma2 += ($CNPJEmpresa{$i} * $k); if ($i < 12){ $soma1 += ($CNPJEmpresa{$i} * $j); } $k--; $j--; } $digito1 = $soma1 % 11 < 2 ? 0 : 11 - $soma1 % 11; $digito2 = $soma2 % 11 < 2 ? 0 : 11 - $soma2 % 11; return (($CNPJEmpresa{12} == $digito1) and ($CNPJEmpresa{13} == $digito2)); } Quote Link to comment Share on other sites More sharing options...
0 Carlos Rocha Posted November 1, 2011 Author Report Share Posted November 1, 2011 Vou anbalisar uma vez que eu teria, para usar teu codigo, alterar bastante coisa.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']; } ... Quote Link to comment Share on other sites More sharing options...
0 Carlos Rocha Posted November 1, 2011 Author Report Share Posted November 1, 2011 (edited) Tenho usado esta daqui nos meus códigos do lado do servidor\;<? //Verifica CNPJ function is_cnpj($str) { if (!preg_match('|^(\d{2,3})\.?(\d{3})\.?(\d{3})\/?(\d{4})\-?(\d{2})$|', $str, $matches)) return false; array_shift($matches); $str = implode('', $matches); if (strlen($str) > 14) $str = substr($str, 1); $sum1 = 0; $sum2 = 0; $sum3 = 0; $calc1 = 5; $calc2 = 6; for ($i=0; $i <= 12; $i++) { $calc1 = ($calc1 < 2) ? 9 : $calc1; $calc2 = ($calc2 < 2) ? 9 : $calc2; if ($i <= 11) $sum1 += $str[$i] * $calc1; $sum2 += $str[$i] * $calc2; $sum3 += $str[$i]; $calc1--; $calc2--; } $sum1 %= 11; $sum2 %= 11; return ($sum3 && $str[12] == ($sum1 < 2 ? 0 : 11 - $sum1) && $str[13] == ($sum2 < 2 ? 0 : 11 - $sum2)) ? $str : false; } ?> Então Carlos, eu indicaria uma mudança de validação. Por ex, colocaria as validações diretamente no PHP, existem funções que validam o CNPJ, vou disponibilizar pra você uma dessas funçoes. A outra troca seria como eu informei acima, retirar do seu action o endereço e colocar dessa forma: Form: <form action="." method="post" name="login_cliente"> Botão: <input type="submit" name="Submit" value="Entrar"> e na sua autenticação: if ($_POST["Submit"] =="Entrar") { Dessa forma a validação só se dará quando apertar o botão, sem se preocupar em passar pela querystring os valores. Segue abaixo a função de validação do CNPJ em PHP. $CNPJEmpresa = trim($_POST["CNPJEmpresa"]); function validaCNPJ($CNPJEmpresa){ $CNPJEmpresa = preg_replace ("@[./-]@", "", $CNPJEmpresa); if(strlen ($CNPJEmpresa) <> 14 or !is_numeric ($CNPJEmpresa)){ return 0; } $j = 5; $k = 6; $soma1 = ""; $soma2 = ""; for ($i = 0; $i < 13; $i++){ $j = $j == 1 ? 9 : $j; $k = $k == 1 ? 9 : $k; $soma2 += ($CNPJEmpresa{$i} * $k); if ($i < 12){ $soma1 += ($CNPJEmpresa{$i} * $j); } $k--; $j--; } $digito1 = $soma1 % 11 < 2 ? 0 : 11 - $soma1 % 11; $digito2 = $soma2 % 11 < 2 ? 0 : 11 - $soma2 % 11; return (($CNPJEmpresa{12} == $digito1) and ($CNPJEmpresa{13} == $digito2)); } Edited November 1, 2011 by Carlos Rocha Quote Link to comment Share on other sites More sharing options...
Question
Carlos Rocha
Pessoal.
pode até parecer bobeira. Mas estou com duvida :
Tenhoo código:
O formulario esta disparando os field via post Acontece, que se eu fizer: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?
Link to comment
Share on other sites
10 answers to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.