Carlos Rocha Postado Novembro 1, 2011 Denunciar Share Postado Novembro 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? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 ESerra Postado Novembro 1, 2011 Denunciar Share Postado Novembro 1, 2011 Apesar de não justificar, register_globals está ativado? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Carlos Rocha Postado Novembro 1, 2011 Autor Denunciar Share Postado Novembro 1, 2011 sim, esta.Isso é outro problema.Não estou sabendo como fazer uso de sessões sem register_globals estar On Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 MTavares Postado Novembro 1, 2011 Denunciar Share Postado Novembro 1, 2011 (editado) 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 Editado Novembro 1, 2011 por MTavares Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 ESerra Postado Novembro 1, 2011 Denunciar Share Postado Novembro 1, 2011 Sessões tem que funcionar sem register_globals... como você está criando as sessões? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Carlos Rocha Postado Novembro 1, 2011 Autor Denunciar Share Postado Novembro 1, 2011 (editado) 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>"; } ?> Editado Novembro 1, 2011 por Carlos Rocha Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 MTavares Postado Novembro 1, 2011 Denunciar Share Postado Novembro 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()" Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Carlos Rocha Postado Novembro 1, 2011 Autor Denunciar Share Postado Novembro 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(); } Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 MTavares Postado Novembro 1, 2011 Denunciar Share Postado Novembro 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)); } Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Carlos Rocha Postado Novembro 1, 2011 Autor Denunciar Share Postado Novembro 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']; } ... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Carlos Rocha Postado Novembro 1, 2011 Autor Denunciar Share Postado Novembro 1, 2011 (editado) 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)); } Editado Novembro 1, 2011 por Carlos Rocha Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
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 para o comentário
Compartilhar em outros sites
10 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.