viernes, julio 28, 2006

[PHP] function DamnQuotes($texto,$val)

Un dia entero me tomo tratar de evitar que al usar comillas simples en la entrada de datos una consulta se interrumpa. En el metodo tradicional seria:
$sql="INSERT into eje(id_eje, descripcion_eje)
values($id_final,'".$_POST["txtEje"]."')";
En este punto cuando yo introducza en mi caja de texto algo como O'Really me dara un soberbio error ya que la comilla que acompana a la O cierra la consulta. Sustituyendo quedaria asi:
$sql="INSERT into eje(id_eje, descripcion_eje)
values(2,'O'Really')";
Lo demas pues es error :(

Buscando por todas partes, lo mas recomendado es usar
magic_quotes_gpc = On
Que agrega una pleca antes de las comillas precisamente para evitar este problema, convertir \' en secuencia de escape, pero nada la comilla siempre estaba ahi fastiando la vida.

Use addslashes pero lo que logre era lo mismo que daba magic_quotes_gpc. Tenemos que volver a los inicios fuera bruta.
function DamnQuotes($texto,$val){
if ($val){
$nonQoutes = str_replace("'","/#^*/",$texto);
}
else{
$nonQoutes = str_replace("/#^*/","'",$texto);
}
return $nonQoutes;
}

Me invente una super funcion que sustituye las comillas en mi cadena de consulta por /#^*/ un verdadero alboroto y esto se metia en la base de datos a la vuelta para imprimir los datos realizaba el proceso inverso los garabatos por las '.

El por que del garabato pues es medio simple antes tenia una / en vez del garabato pero que pasaba si en el mismo texto iba una /? o_O Elegi la cobinacion de caracteres mas remota para que esto no llegue a pasar.