Foros del Web » Programando para Internet » ASP Clásico »

Acondicionar sentencias SQL (qué caracteres comprobar que no estén)

Estas en el tema de Acondicionar sentencias SQL (qué caracteres comprobar que no estén) en el foro de ASP Clásico en Foros del Web. Si el usuario tiene la opción de crear tablas, me estoy dando cuenta de que el servidor dará error si el usuario intenta crear una ...
  #1 (permalink)  
Antiguo 28/03/2005, 09:58
 
Fecha de Ingreso: febrero-2005
Mensajes: 1.015
Antigüedad: 20 años, 3 meses
Puntos: 6
Acondicionar sentencias SQL (qué caracteres comprobar que no estén)

Si el usuario tiene la opción de crear tablas, me estoy dando cuenta de que el servidor dará error si el usuario intenta crear una tabla, que contenga en su nombre o en el de algunos de sus campos, algún carácter "extraño": ?, !, §, etc.

Esto me pasa con SQL Server pero supongo que pasará con cualquier otro programa.

¿El problema es debido a que son caracteres no permitidos?

Bueno, la pregunta es si hay alguna forma de detectar y sustituir todos los caracteres no permitidos que haya por un espacio en blanco, con alguna función o algo así. Además, me pregunto si con los INSERT también habrá que hacer algo.

Saludos

Última edición por un_tio; 28/03/2005 a las 09:59
  #2 (permalink)  
Antiguo 28/03/2005, 10:03
Avatar de Muzztein  
Fecha de Ingreso: agosto-2002
Ubicación: Hangar 18
Mensajes: 1.703
Antigüedad: 22 años, 8 meses
Puntos: 16
alomejor hay una forma mas facil..-perose me ocurre que

puedes hacerte un arreglo con cada caracter valido de la A a la Z incluidos los _ y los digitos del 0 al 9

1) por cada caracter que contenga el string que lleva el nombre de la tabla, revisar que estos esten contenidos dentro de el arreglo que contiene los caracteres validos. sino estan .. quelos elimine.

o algo asi

Última edición por Muzztein; 28/03/2005 a las 10:18
  #3 (permalink)  
Antiguo 28/03/2005, 10:08
 
Fecha de Ingreso: febrero-2005
Mensajes: 1.015
Antigüedad: 20 años, 3 meses
Puntos: 6
Lo del Replace ya lo sabía, de hecho lo estoy usando con algunos caracteres sueltos. Debí ponerlo. Mi pregunta es cómo discriminar a TODOS los caracteres discriminables, sin hacer muchos Replaces consecutivos (que es lo que había empezado a hacer).

Saludos
  #4 (permalink)  
Antiguo 28/03/2005, 10:49
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 24 años, 2 meses
Puntos: 535
Para eso, la única sería usar expresiones regulares (y más no me preguntas porque tendría que ponerme a estudiarlas, que igual debería, y esa sería tu tarea ;)
__________________
...___...
  #5 (permalink)  
Antiguo 28/03/2005, 11:52
 
Fecha de Ingreso: febrero-2005
Mensajes: 1.015
Antigüedad: 20 años, 3 meses
Puntos: 6
Jaja, bueno... ni sé qué son las "expresiones regulares". Pero vamos a ver, ¿vosotros no metéis algún "filtro" del tipo que yo estoy diciendo? Parece lo más habitual del mundo para evitar que salga el error en caso de que el usuario haga algo "indebido" o "prohibido" cuando se relaciona con una base de datos...

Otra forma de solucionar en parte el asunto tal vez sea poner On Error Resume Next, y poner una comprobación de si la tabla se ha creado bien (para que, en caso de que no, se le dé un aviso de error al usuario).
  #6 (permalink)  
Antiguo 28/03/2005, 13:11
Avatar de pablinweb  
Fecha de Ingreso: julio-2003
Mensajes: 283
Antigüedad: 21 años, 9 meses
Puntos: 0
Podrías hacerlo con un javascript en el onkeypress de la caja de texto dejando que el usuario ingrese solo letras, números y los caracteres de guion ya que no nesesitas más que eso para las tablas, yo uso esto para que solo puedan ingresar numeros y el simbolo del punto cuando tengo un campo numerico:

function LP_data(){
var key=window.event.keyCode;
if (key != 46){
if (key < 48 || key > 57){
window.event.keyCode=0;
}
}
}

y en la caja te texto le agrego: onKeyPress="LP_data()"

podrías modificarlo para que tambien te acepte las letras y luego te quedaría comprobar, para las tablas, que no exista una tabla con el mismo nombre y que el primer caracter sea una letra tanto para el nombre de una tabla como para los campos de la misma.

Para los insert creo que los únicos que tendrias que reemplazar son las comillas simples y el simbolo de porcentaje
  #7 (permalink)  
Antiguo 28/03/2005, 13:38
Avatar de Muzztein  
Fecha de Ingreso: agosto-2002
Ubicación: Hangar 18
Mensajes: 1.703
Antigüedad: 22 años, 8 meses
Puntos: 16
JUAJUAJUA

sips..esa es la opcion mas acertada.

JAVASCRIPT para las validaciones!!!

  #8 (permalink)  
Antiguo 28/03/2005, 20:06
 
Fecha de Ingreso: febrero-2005
Mensajes: 1.015
Antigüedad: 20 años, 3 meses
Puntos: 6
pablinweb, muy buena. ¿Entonces tu código qué hace, que si no es un número, pone a "0" el código de la tecla? (no sé qué representará eso). ¿Y para letras, de qué número a qué número sería, alguien me lo puede decir? ¿es ascii normal?

Muzztein, jeje sí javascript para eso, no obstante lo del replace tiene toda su lógica para reemplazar las comillas por comillas dobles y que no puedan piratear tu base de datos.

Saludos
  #9 (permalink)  
Antiguo 29/03/2005, 09:42
Avatar de pablinweb  
Fecha de Ingreso: julio-2003
Mensajes: 283
Antigüedad: 21 años, 9 meses
Puntos: 0
el 0 cancela la entra de la tecla, el 46 es el punto para no tener problemas con el separador de decimales y la verdad que no me acuerdo pero creo que es ascii extendido. Por lo de las letras no seas vago y probá. Yo para encontrar el 46 hice esto.

function Tecla(){
var key=window.event.keyCode;
alert(key);
}

El código no es mío, creo que lo saqué de http://javascript.internet.com/ no me acuerdo bien, solo lo modifiqué para que tome el punto.
  #10 (permalink)  
Antiguo 29/03/2005, 20:09
 
Fecha de Ingreso: febrero-2005
Mensajes: 1.015
Antigüedad: 20 años, 3 meses
Puntos: 6
Ok, gracias, no sabía ni cómo probarlo (ahora sí). No sabía si era ASCII, y en caso de serlo (como así es), si todo el mundo se sabría de memoria el rango numérico a utilizar para las letras.
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 22:02.