Foros del Web » Programando para Internet » PHP »

Javascript + PHP

Estas en el tema de Javascript + PHP en el foro de PHP en Foros del Web. festoy formando una sentecia sql a partir de la seleccion de los campos de una formulario. dicha sentencia la formo pero lo que sucede es ...
  #1 (permalink)  
Antiguo 20/10/2005, 15:05
 
Fecha de Ingreso: enero-2003
Ubicación: Caracas
Mensajes: 439
Antigüedad: 21 años, 10 meses
Puntos: 0
Pregunta Javascript + PHP

festoy formando una sentecia sql a partir de la seleccion de los campos de una formulario. dicha sentencia la formo pero lo que sucede es que en dicha sentencia se incluye se incluyen estas "\" barras que no me deja ejecutar el sql. en php. esto es lo que estoy haciendo

javascript

function acomparar()
{
var key=window.event.keyCode;
document.frm.sentencia.value = document.frm.campo.value + document.frm.operador.value + "'" + document.frm.criterio.value + "'" ;
}


php

<?
$postform = (isset($_POST["Submit"])) ? true : false;
if($postform){
$sentencia = $_POST["sentencia"];
$sql = "SELECT * FROM notas where"." ".$sentencia ;
echo $sql;
}
?>

este es el resultado

SELECT * FROM notas where AUTOR=\'Onelkys Meza\'

como puedo quitar estas barras \ de mi sentecia.
  #2 (permalink)  
Antiguo 20/10/2005, 15:51
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 21 años, 1 mes
Puntos: 11
$sql=str_replace("\","",$sql);
  #3 (permalink)  
Antiguo 21/10/2005, 05:18
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
También puedes usar (recomendable):

stripslashes()
http://www.php.net/manual/es/function.stripslashes.php

Y ten mucho cuidado con pasar sentencias SQL completas por el URL .. Imagina que alguien altera esa sentencia SQL.

Usa variables para definir partes de tu sentencia ..

Por ejemplo:

nose.php?buscarencampo=autor&quebuscar=valor

Y en tu script, puedes validar si "buscarencampo" está en los nombres de los campos de esa tabla a buscar, para -NO- permitir que se ingrese un dato adulterado.

Un saludo,
  #4 (permalink)  
Antiguo 21/10/2005, 09:24
 
Fecha de Ingreso: mayo-2003
Mensajes: 527
Antigüedad: 21 años, 5 meses
Puntos: 3
Un poco de información sobre el tema de los caracteres de escape para los caracteres especiales (comillas, etc):

Hay un comando de configuración en php.ini que se llama magic_quotes_gpc. El gpc se refiere a datos de entrada GET, POST y Cookies.

Puede tener el valor on o off. Si está a on, dentro de los datos de entrada, los caracteres especiales automáticamente se escapan con \ como parece ser tu caso.

Si está a off, es necesario escapar los caracteres especiales con addslashes("cadena"); y al recuperarlos de la base de datos se les quitan los caracteres de escape con stripslashes("cadena");

Para comprobar si magic_quotes_gpc está activado o no se usa la función get_magic_quotes_gpc(), que devuelve true si está a on y false si está a off.

De esta forma, independientemente de cómo lo dejes configurado, (yo lo dejo así: magic_quotes_gpc=off en php.ini) es recomendable SIEMPRE hacer la comprobación antes de almecenar datos de entrada:

Código PHP:
if (!get_magic_quotes_gpc()) {
      
$cadenaDeEntrada addslashes($cadenaDeEntrada);

y esto con los datos de salida

Código PHP:
$cadenaDeSalida stripslashes($cadenaDeSalida); 
De esta forma se evitarán esos errores en todo momento.

En los datos de salida, según se requiera, también se utiliza el filtro htmlspecialchars() que convierte los caracteres especiales de HTML en caracteres ASCII. Por ejemplo si una cadena de salida del nombre de una compañía nos tiene que dar: 'Daddy & Co.', y no deseamos que aparezca así: \'Daddy &amp; Co.\', deberemos usar stripslashes() para quitar las secuencias de escape y htmlspecialchars() para convertir &amp; en &.

Última edición por Tigervlc; 21/10/2005 a las 09:31
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:13.