Ir para conteúdo

POWERED BY:

Arquivado

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

Rodrigo_laguna

[Resolvido] Código SQL

Recommended Posts

Olá amigos, tenho um codigo simples em PHP para listar os dados de uma tabela, no browser quando clico no link e no fim dele coloco uma 'aspas ele me retorna um erro de You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''24'' ORDER BY postId DESC' at line 1

 

Isso quer dizer que o site pode sofrer ataque de SQL INJECTION ou não? Abaixo segue o código que usei parabuscar os dados do mysql.

 

<?php
$post = $_GET['post'];
$dados = mysql_query("SELECT * FROM notas WHERE postId = '$post' ORDER BY postId DESC") or die (mysql_error());
$count = mysql_num_rows($dados);
if($count <= 0){
	echo 'Evento sem notas!';
}else{
	while($res = mysql_fetch_array($dados)){
		$postId = $res['postId'];
		$postTitulo = $res['atitulo'];
		$postTexto = $res['atexto'];
?>

<?php echo $postTitulo; ?><br />
<?php echo $postTexto; ?><br />

 

Se precisarem posso postar o codigo que fazo cadastro no BD também beleza, valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso quer dizer que o site pode sofrer ataque de SQL INJECTION ou não?

sim, se você não tratar essa entrada, você pode sofrer ataques.

 

 

o postId é um inteiro certo?

então, a forma bonita é:

 

 

       $post = (int)$_GET['post'];
$dados = mysql_query("SELECT * FROM notas WHERE postId = $post ORDER BY postId DESC") or die (mysql_error());

entendeu?

 

forçando o cast para inteiro com o (int)

 

além disso, o or die() só deve ser usado somente em ambiente de desenvolvimento.

Não mande isso para produção... em produção falhe bonito, falhe graciosamente, e não com uma interrupção completa do programa.

 

A minha sugestão é:

-> capture o erro

-> mostre amigavelmente para o usuario que algo não deu certo

-> guarde num log para você analisar depois

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa, coloquei o $post = (int)$_GET['post']; como você falou e deu certo, já nãp me retornou aquele erro, podes me dizero porque disso mais claramente? qaul a diferença de forçar o (int) antes do GET?

 

O meu código de cadastro está dessa forma:

<?php
if(isset($_POST['enviar'])){

	$titulo = strip_tags(trim($_POST['titulo']));
	$texto = strip_tags(trim($_POST['texto']));		
	$inserir_post = mysql_query("INSERT INTO notas (titulo,texto) VALUES ('$titulo','$texto')");
	$post_id = mysql_insert_id();
	echo '<span class="correta">Evento cadastrado com sucesso!</span>';		
	}
}
?>

 

 

Valeu amigo a dica foi de grande valia,

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.