En esta ocacion, quiero consultar a todos, estoy haciendo un buscador, funciona a la perfeccion, dicho buscador genera una sentencia SQL la cual regresara los registros encontrados, Lo que quiero hacer es ponerle eguridad a esto, por que pues asi como esta es muy facil poder hacer un SQL-INJECTION, por ahora y tengo una solucion, pero creo que no es la mejor, anyway, este es el codigo:
Código PHP:
<?
$PtrDb = mysql_connect("localhost","CV4","****")or die ('No se puede conectar con la DB por que: ' . mysql_error());
mysql_select_db("mybase");
$masdeuno="NO";
$sql="SELECT * FROM perfiles WHERE ";
$tam=strlen($sql);
if($matricula!="")
$sql.="Matricula='$matricula'";
else{
if($nombre!=""){
$sql.="Nombre LIKE '%$nombre%'";
$masdeuno="SI";
}
if($apellido!=""){
if($masdeuno=="SI")
$sql.=" AND ";
$sql.="Apellidos LIKE '%$apellido%'";
$masdeuno="SI";
}
if($residencia!=""){
if($masdeuno=="SI")
$sql.=" AND ";
$sql.="Residencia='$residencia'";
$masdeuno="SI";
}
if($sexo!=""){
if($masdeuno=="SI")
$sql.=" AND ";
$sql.="Genero='$sexo'";
$masdeuno="SI";
}
if($ciudad!=""){
if($masdeuno=="SI")
$sql.=" AND ";
$sql.="Ciudad='$ciudad'";
$masdeuno="SI";
}
if($estado!=""){
if($masdeuno=="SI")
$sql.=" AND ";
$sql.="Estado='$estado'";
$masdeuno="SI";
}
if($pais!=""){
if($masdeuno=="SI")
$sql.=" AND ";
$sql.="Pais='$pais'";
$masdeuno="SI";
}
}
//echo $sql."<br><br>";
if(strlen($sql)>$tam)
$res=mysql_query($sql,$PtrDb);
else{
echo "Necesitas poner algo para buscar, no seas FOOL";
exit();
}
while($Info=mysql_fetch_assoc($res)){
echo "Matricula: ".$Info['Matricula']."<br>";
echo "Nombre: ".$Info['Nombre']."<br>";
echo "Apellido: ".$Info['Apellidos']."<br>";
echo "Residencia: ".$Info['Residencia']."<br>";
echo "Sexo: ".$Info['Genero']."<br>";
echo "Ciudad: ".$Info['Ciudad']."<br>";
echo "Estado: ".$Info['Estado']."<br>";
echo "Pais: ".$Info['Pais']."<br><br>";
}
?>
Para evotar el SQL-INJECTION pues se me ocurre, por ejemplo para la matricula, pues verificar que todos sean numeros, si hay una letra colada, pues entonces no se ahce nada, para la varible del nombre, pues determino un numero maximo de caracteres para este el cual sera el que tenga el nombre mas largo en la base de datos, para el apellido igual, i algo similar con las otras variables.
esta es mi solucion al problema, pero estoy seguro habra una mejor, espero y me puedan aconsejar y ayudar.
thanks