É simples, você só não pode deixar que o caracter ' seja inserido inteiro na string.
No caso, o Anti-Inject do Luis (semelhante ao meu :P), ele da um replace duplicando o caracter '
Exemplo, se a query é assim: SELECT * FROM tabela WHERE Login = '{$login}'
Se eu digito aa' DROP TABLE tabela
Isso será SQL Inject, o que o script faz, vai deixar o $login assim: aa'' DROP TABLE tabela
No caso, ele vai adicionar mais aspas tornando assim um aspas dupla, ou seja, inserindo a aspa que eu coloquei para da inject na string.
A tal query de inject passa a ser uma string qualquer...
Muitas pessoas bloqueiam ou removem os caracteres.
Exemplo:
Código PHP:
<?php
// -- Exemplo de remover os chars
function escape($string)
{
$chars = array("'", "\"", ";", "--");
return str_ireplace($chars, NULL, $string);
}
foreach($_POST as $key => $value)
{
$_POST[$key] = escape($value);
}
foreach($_GET as $lkey => $value)
{
$_GET[$key] = escape($value);
}
foreach($_COOKIE as $key => $value)
{
$_COOKIE[$key] = escape($value);
}
// -- Exemplo de bloquea-los
function blockChars($string)
{
$block = FALSE;
if(substr_count($string, "'") > 0) $block = TRUE;
if(substr_count($string, "\"") > 0) $block = TRUE;
if(substr_count($string, ";") > 0) $block = TRUE;
if(substr_count($string, "--") > 0) $block = TRUE;
if($block) exit("<script>window.alert('Caracteres inválidos');</script>");
}
foreach($_POST as value)
{
blockChars($value);
}
foreach($_GET as $value)
{
blockChars($value);
}
foreach($_COOKIE as $value)
{
blockChars($value);
}
Dois exemplos totalmente ridiculos, você não precisa bloquear caracteres, e o anti-inject é somente com o caractere ', o ; " e -- não servem pra nada se o ' estiver protegido.
Basta dar str_replace("'", "''", $string) que já basta.
Sobre os forms, o Luis está certo, pode possuir o mesmo nome sendo em forms diferentes.
Att,
Erick-Master - CTM Team Softwares