Ir ao conteúdo

Cadastro e Login com real_escape_string e trim.


Ir à solução Resolvido por DiF,

Posts recomendados

Postado

Boa noite, 

Conclui meu sistema de cadastro com a utilização de real_escape_string e trim para os dados: nome, sobrenome e nick. O cadastro está funcionando perfeitamente.
 

$nome= $_POST["nome"];$nome= $conexaotabelausuarios->real_escape_string(trim($nome));$sobrenome = $_POST["sobrenome"];$sobrenome= $conexaotabelausuarios->real_escape_string(trim($sobrenome));$email= $_POST["email"];$nick = $_POST["nick"];$nick= $conexaotabelausuarios->real_escape_string(trim($nick));

Por exemplo, se eu cadastro o nome D'Avila, este fica armazenado desta forma no banco de dados.

No entanto, o login está dando erro quando o nick tem '. Por exemplo se o nick é d'avila3m, aparece o erro:

 

Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in /home/y67ipajo/public_html/_arquivos/php/acesso/acesso.php on line 40

Abaixo, parte do código de login:

$senhacriptografada = SHA1($_POST["senha"]);$nick = $_POST["nick"];$buscarusuario = "SELECT * FROM usuarios WHERE nick='$nick' AND senha='".$senhacriptografada."'";$usuarioencontrado=$conexaotabelausuarios->query($buscarusuario);while($buscarestadodacontaeperfildeusuario=mysqli_fetch_array($usuarioencontrado, MYSQLI_ASSOC)){$perfildeusuario =$buscarestadodacontaeperfildeusuario["perfildeusuario"];$estadodaconta = $buscarestadodacontaeperfildeusuario["estadodaconta"];$nome = $buscarestadodacontaeperfildeusuario["nome"];$sobrenome = $buscarestadodacontaeperfildeusuario["sobrenome"];$cidade = $buscarestadodacontaeperfildeusuario["cidade"];$estado = $buscarestadodacontaeperfildeusuario["estado"];$idade = $buscarestadodacontaeperfildeusuario["idade"];$email = $buscarestadodacontaeperfildeusuario["email"];$senha = $buscarestadodacontaeperfildeusuario["senha"];$repsenha = $buscarestadodacontaeperfildeusuario["repsenha"];$tempoemsessao = $buscarestadodacontaeperfildeusuario["tempoemsessao"];$diadenascimento = $buscarestadodacontaeperfildeusuario["diadenascimeto"];$mesdenascimento = $buscarestadodacontaeperfildeusuario["mesdenascimento"];};
A linha 40 é essa onde está o while.

Detalhe: Este erro só acontece quando o usuário tem ' no nick.  

Desde já obrigado pelas respostas.

 

  • Moderador
  • Solução
Postado

@cesar3m

 

Sim.. dá erro por causa que a função espera dois parâmetros. 

 

A conexão e a string a ser escapada.

 

Dá para criar uma função para isso.. veja:

$conexao = mysqli_connect("localhost","root","","exemplos");function escapa($string){    global $conexao;    if (get_magic_quotes_gpc()) :        $string = stripslashes($string);        $string = mysqli_real_escape_string($conexao, $string);    else :        $string = mysqli_real_escape_string($conexao, $string);    endif;        return $string;} $palavra ="O'Brien";//saida: O\'Brien  echo escapa($palavra);     
  • Curtir 1
Postado

@dif

 

http://php.net/manual/pt_BR/security.magicquotes.php

 

Não é recomendado usar a função get_magic_quotes_gpc

 

 

Consegui!

E eu te agradeço, por que você citou a função 
stripslashes.

Então o que fiz:
 

$nick = $_POST["nick"];$nick = $conexaotabelausuarios -> real_escape_string(trim($nick));
 
E quando eu for citar o nome do usuário na página, antes ficava o \, aí é só usar a função que citou, exemplo:

echo "Seja bem-vindo ".stripslashes($_SESSION['nick']).", ao";
 
Obrigado!

Não vou encerrar o tópico ainda, falta uma coisinha... Amanhã trabalho nisso...


Pronto, problema resolvido.

Há uma função chamada htmlentities, que se usa da mesma forma que stripslashes, mas em value´s de formulário, exemplo:

<input name='nome' type='text' id='nome' value='".htmlentities($nome,ENT_QUOTES)."' disabled></br></br> 

 

Esta função é nova pra mim.

Problema resolvido, espero que minha dúvida ajude futuramente outro alguém com a mesma dúvida. Tópico fechado.

  • Moderador
Postado

Tem razão. esqueci deste pequeno detalhe.

 

 A função get_magic_quotes_gpc serve para verificar se os magic_quotes estão habilitados.

O ideal é desabilitar no INI do php...  e usar a função addslashes() para adicionar a barra de escape.. e o stripslashes para retirar.

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...