Foros del Web » Programando para Internet » PHP »

comprobar antes de insertar a una BD

Estas en el tema de comprobar antes de insertar a una BD en el foro de PHP en Foros del Web. hola amigos tengo el siguiete codigo, Código PHP: include( 'conectdb.php' );          $rubro = $_POST [ 'rubro' ];          $busqueda = "select opcion FORM rubros where opcion='$rubro'" ;          $registro ...
  #1 (permalink)  
Antiguo 07/04/2008, 08:22
 
Fecha de Ingreso: diciembre-2005
Mensajes: 97
Antigüedad: 18 años, 4 meses
Puntos: 0
comprobar antes de insertar a una BD

hola amigos tengo el siguiete codigo,
Código PHP:
include('conectdb.php');
        
$rubro=$_POST['rubro'];
        
$busqueda="select opcion FORM rubros where opcion='$rubro'";
        
$registro=mysql_query($busqueda,$conect);
        
        if (
$rubro==$registro)
            echo 
"el rubro ya existe";
        else
            
$query="INSERT INTO rubros (opcion) values ('$rubro')";
            if (
mysql_query($query,$conect))
                print 
"rubro añadido correctamente";
            else
                print 
"error al añadir rubro"
bueno lo q tendria que hacer este codigo es insertar un nuevo rubro a mi tabla rubros, pero primero tienee que comprobar si existe el rubro.
el detalles esta en que no logra hacer la comprobacion e inserta todos los rubros,
espero me puedan ayudar
Salu2
__________________
_Derek_

Última edición por pavelinhos; 07/04/2008 a las 08:42
  #2 (permalink)  
Antiguo 07/04/2008, 09:52
 
Fecha de Ingreso: diciembre-2001
Ubicación: Asuncion
Mensajes: 143
Antigüedad: 22 años, 3 meses
Puntos: 1
Re: comprobar antes de insertar a una BD

Los valores posibles de la variable $registro serian false si el rubro no existe y un identificador de recurso si existe

Por ende: if ($rubro==$registro) esta mal porque exista o no el rubro la comparacion no se esta haciendo en forma correcta.

Prueba de esta manera:
..
Código PHP:
$busqueda="select opcion FORM rubros where opcion='$rubro'";
if ( 
$registro=mysql_query($busqueda,$conect) )
{
    echo 
"el rubro ya existe";
}
else
{
    
$query="INSERT INTO rubros (opcion) values ('$rubro')";
    if (
mysql_query($query,$conect))
        print 
"rubro añadido correctamente";
    else
    print 
"error al añadir rubro";  

  #3 (permalink)  
Antiguo 07/04/2008, 09:53
Avatar de erlingfiallos  
Fecha de Ingreso: febrero-2005
Ubicación: Mexico ahora
Mensajes: 499
Antigüedad: 19 años, 2 meses
Puntos: 9
Re: comprobar antes de insertar a una BD

cambiemos algunas cosas:

Código PHP:
$busqueda="select opcion FORM rubros where opcion='".$rubro."';"
la idea es separar la consulta de la variable de php mediante comillas dobles, no queremos inyeccion de codigo aunque para eso faltan muchas validaciones mas.. esta es basica.

Ahora la comprobacion utilizando mysql_num_rows que es el numero de filas que retorna la consulta, para este caso si el numero de filas es diferente de 0, es porque el registro ya existe.

Código PHP:
$registro=mysql_query($busqueda,$conect); 
         
if (
mysql_num_rows($registro) != 0
   echo 
"el rubro ya existe"
else {
   
$query="INSERT INTO rubros (opcion) values ('".$rubro."');"
   if (
mysql_query($query,$conect)) 
      print 
"rubro añadido correctamente"
   else
      print 
"error al añadir rubro"

  #4 (permalink)  
Antiguo 07/04/2008, 09:54
Avatar de Carlojas  
Fecha de Ingreso: junio-2007
Ubicación: Shikasta
Mensajes: 1.272
Antigüedad: 16 años, 10 meses
Puntos: 49
Re: comprobar antes de insertar a una BD

Tienes un error en tu código debes de enviar el resultado de tu consulta a un array para hacer la comparación, no puedes comparar con el query.

Código PHP:
include('conectdb.php'); 
        
$rubro $_POST['rubro']; 
        
$busqueda "select opcion FROM rubros where opcion = '$rubro'"
        
$registro mysql_query($busqueda$conect) or die( mysql_error() ); 
        
$datos mysql_fetch_array($registro);
         
        if (
$rubro == $datos['opcion']) {
            echo 
"el rubro ya existe"; }
        else {
            
$query "INSERT INTO rubros (opcion) values ('$rubro')"
            
$registro mysql_query($query$conect) or die( mysql_error() ); 
            if (
mysql_affected_rows($registro) > 0) {
                print 
"rubro añadido correctamente"; }
            else {
                print 
"error al añadir rubro";}
        } 

Saludos.
  #5 (permalink)  
Antiguo 07/04/2008, 10:10
 
Fecha de Ingreso: diciembre-2005
Mensajes: 97
Antigüedad: 18 años, 4 meses
Puntos: 0
Re: comprobar antes de insertar a una BD

gracias, despejaron mis dudas: solo que no entendi lo muy bien lo que dijo
erlingfiallos
Cita:
...no queremos inyeccion de codigo aunque para eso faltan muchas validaciones mas.. esta es basica.
a que te refieres con que faltan muchas validaciones
Salu2
__________________
_Derek_
  #6 (permalink)  
Antiguo 07/04/2008, 10:21
(Desactivado)
 
Fecha de Ingreso: diciembre-2006
Mensajes: 529
Antigüedad: 17 años, 4 meses
Puntos: 11
Re: comprobar antes de insertar a una BD

Hola pavelinhos,

La inyección sql, (si buscas en google hay mucho) es cuando usuarios malintencionados puede dañar tu base de datos op extraer información no autorizada y miles de cosas más.
¿cómo lo hacen? Enviando por medio de datos $_POST o $_GET cadenas de texto trabajadas para hackear tu server de base de datos o script php.

Puedes leer un poco más en
http://www.ajpdsoft.com/modules.php?...rticle&sid=201

Ahora el problema especificamente esta en que estas guardando el valor de rubro directamente como te lo mando el usuario desde su navegador por medio de un formulario:

Código PHP:
$rubro $_POST['rubro']; 
Deberías "limpiar" los datos que trae $_POST['rubro'] de posibles ataques.
La manera mas sencilla de hacerlo es así:


Código PHP:
$rubro =  mysql_real_escape_string($_POST['rubro']); 
La función mysql_real_escape_string() limpia todos aquellos caracteresw que se puede usar por un usuario malintencionado para hacer un ataque.

Salud!
  #7 (permalink)  
Antiguo 07/04/2008, 10:21
Avatar de erlingfiallos  
Fecha de Ingreso: febrero-2005
Ubicación: Mexico ahora
Mensajes: 499
Antigüedad: 19 años, 2 meses
Puntos: 9
Re: comprobar antes de insertar a una BD

La verdad, sobre validaciones y maneras de evitar inyeccion de codigo hay muchas (no se si sean seguras ya que siempre se puede encontrar una puerta abierta y aprovechar la debilidad) y php ofrece algunas librerias que ayudan a mejorar la seguridad de nuestras consultas anidadas a las variables..

Por ejemplo.. se me viene a la cabeza una funcion de mysql (mysql_real_escape_string) que se utiliza para escapar caracteres extraños..
  #8 (permalink)  
Antiguo 07/04/2008, 10:37
 
Fecha de Ingreso: diciembre-2005
Mensajes: 97
Antigüedad: 18 años, 4 meses
Puntos: 0
Re: comprobar antes de insertar a una BD

ok, excelente y gracias, desde hoy tendre mucho cuidado al recibir datos de un formulario, vaya que hacer una web segura requiere mucho conocimientos.
Salu2
__________________
_Derek_
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 00:41.