Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Ola amigos tudo bem? <br />
Estou com um pequeno problema onde se no formulário eu digitar somente uma aspa ' ele não adiciona no banco de dados. Alguém poderia me dizer o porque e como eu poderia solucionar isso?
OBs: apenas com uma aspa, se eu fechar ela com outra aspa ou colocar outro tipo de simbolo envia.
Obs2: não aparece nenhum tipo de erro, ele realiza o procedimento de envio mas não insere no banco de dados.
<?php
require_once("../config.php");
$nome = $_POST['nome'];
$tipo = $_POST['tipo'];
$data = $_POST['data'];
/*Inserar na tabela */
$query_evento = "INSERT INTO evento (nome, tipo, data) VALUES ('".$nome."', '".$tipo."', '".$data."')";
$inserir_evento = mysql_query($query_evento);
?>Olá amigo.
Simplifiquei a consulta para ilustrar o problema:
$query_evento = "INSERT INTO evento (nome) VALUES ('".$nome."')";
Se atribuirmos um valor com aspas simples ao $nome, isso iria deformar a consulta, invalidando-a. Exemplo na prática:
Com $nome = "testando 'aspas";
$query_evento = "INSERT INTO evento (nome) VALUES ('testando 'aspas')";
Você percebe que estamos fechando as aspas? O SQL se torna inválido nesse momento e pior: inseguro. Isso se chama SQL Injection. Recomendo a pesquisa.
Uma boa solução e debate a respeito você encontra aqui: [https://forum.imasters.com.br/topic/563187-resolvido-sql-inject-quando-não-dar-para-impedir/](/topic/563187-resolvido-sql-inject-quando-n%C3%A3o-dar-para-impedir/)
Resumindo: ao invés do str_replace, use [htmlentities()](http://php.net/manual/pt_BR/function.htmlentities.php). Além de corrigir o problema, você vai estar melhorando a segurança do seu sistema. Se tiver tempo, siga também as outras sugestões debatidas no tópico citado acima.
Consegui encontrar uma solução.