Foros del Web » Programando para Internet » PHP »

Manejar Inserts En tablas relaciondas

Estas en el tema de Manejar Inserts En tablas relaciondas en el foro de PHP en Foros del Web. Buenas!!! Tengo una base de datos... lo que pasa que los campos que hay en la base de datos estan relacionados PRIMARY KEY y FIREIGN ...
  #1 (permalink)  
Antiguo 02/04/2009, 14:10
machoman112233
Invitado
 
Mensajes: n/a
Puntos:
Manejar Inserts En tablas relaciondas

Buenas!!!

Tengo una base de datos... lo que pasa que los campos que hay en la base de datos estan relacionados PRIMARY KEY y FIREIGN KEY... La base de datos la puede crear bien desde el PHP, pero si intento introducir un dato, me devuelve error. Lo raro es que el error lo me dice al VALUE(x). Me dice que x no es una columna de la tabla....

En cambio si ha la base de datos no hay relaciones entre las tablas lo hace bien... no uso nada de delete o upate en cascada y el motor de la base de datos es InnoDB...
  #2 (permalink)  
Antiguo 02/04/2009, 14:16
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Manejar Inserts En tablas relaciondas

¿Que error exacto te da?

Saludos.
  #3 (permalink)  
Antiguo 02/04/2009, 14:25
machoman112233
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Manejar Inserts En tablas relaciondas

Código php:
Ver original
  1. mysql_query("INSERT INTO enq_preguntes(pregunta) VALUES(fsdfsdfd)") or die (mysql_error());
  2.  
  3. La columna 'fsdfsdfd' en field list es desconocida

PD: por lo visto acabo de crear la tabla poniendo ON DELETE CASCADE y ON UPDATE CASCADE y no funciona perfectamente... Sabeis porque?
  #4 (permalink)  
Antiguo 02/04/2009, 15:03
rqd
 
Fecha de Ingreso: julio-2008
Mensajes: 228
Antigüedad: 15 años, 8 meses
Puntos: 8
Respuesta: Manejar Inserts En tablas relaciondas

intenta poniendo el valor entre comillas, en este caso específico sería así:

Código PHP:

mysql_query
("INSERT INTO enq_preguntes(pregunta) VALUES('fsdfsdfd')") or die (mysql_error()); 
  #5 (permalink)  
Antiguo 03/04/2009, 02:39
machoman112233
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Manejar Inserts En tablas relaciondas

Bueno... al final lo he echo funcionar habia de poner lo de ON xxxx CASCADE... Pero tengo un problema que no se como resolverlo... Tengo que escapar los caracteres y no me funciona...

Código php:
Ver original
  1. function Consulta($consulta_exe)
  2.     {
  3.         //Envia una consulta al servidor de la base de datos.
  4.         //Comprueba que la consulta se ha echo.
  5.         $this->consulta = mysql_query($this->magicQuote($consulta_exe));
  6.         if(!$this->consulta)
  7.         {
  8.             $this->error = mysql_error();
  9.             return(False);
  10.         }
  11.         else
  12.         {
  13.             return($this->consulta);
  14.         }
  15.     }
  16.  
  17. function InsertarValoresSQL($array_insert,$campo_insert)
  18.     {
  19.         //Genera la consulta MySQL que se envia al servidor (INSERTAR).
  20.         //Se le pasa una array asociativa y convierte
  21.         //los key's de la array en los campos que corresponden
  22.         //a la base de datos y los valores respectivos a valores
  23.         //associados a cada campo.
  24.         //(is_array($array_insert))? $array_insert : setType($array_insert,"array");
  25.        
  26.         $this->array_key = array_keys($array_insert);
  27.         $this->array_valor = $array_insert;
  28.        
  29.         for($i = 0;$i < count($this->array_valor);$i++)
  30.         {
  31.             $this->array_valor[$this->array_key[$i]] = "'".$this->array_valor[$this->array_key[$i]]."'";
  32.         }  
  33.        
  34.         for($i = 0;$i < count($this->array_key);$i++)
  35.         {
  36.             $this->array_key[$i] = "`".$this->array_key[$i]."`";
  37.         }
  38.        
  39.         $this->nombre_campo = implode(",",$this->array_key);
  40.         $this->valor_campo = implode(",",$this->array_valor);
  41.        
  42.         $sql = "INSERT INTO `".$campo_insert."` (".$this->nombre_campo.")";
  43.         $sql .= " VALUES(".$this->limpiar($this->valor_campo).");";
  44.         return($sql);
  45.     }
  46.  
  47. private function magicQuote($variable)
  48.     {
  49.         //
  50.         if(get_magic_quotes_gpc()){$variable = stripslashes($variable);}
  51.         return($variable);
  52.     }
  53.    
  54.     private function limpiar($variable)
  55.     {
  56.         //para escapar los caracteres especiales.
  57.         return(mysql_real_escape_string($variable));
  58.     }
  #6 (permalink)  
Antiguo 03/04/2009, 09:44
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Manejar Inserts En tablas relaciondas

Stripslashes se debe de usar sobre las variables independientes de tu query, no lo debes de usar sobre todo tu query.

Saludos.
  #7 (permalink)  
Antiguo 04/04/2009, 06:26
machoman112233
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Manejar Inserts En tablas relaciondas

He sacado el Stripslashes... el mysql_real_escape_string me lo escapa, pero a lo hora de introducir de dice que hay un error en la cadena que introduzco... Sobre todo si hay un ', me lo pasa al \' pero a la hora de introducir nada... Si es una cadena normal no pasa nada... Todo por la '...

Código php:
Ver original
  1. //lo que intento en la base de datos
  2. $datos["pregunta"] = "She's a beautiful girl?";
  3. //la consulta que me genera una funcion
  4. INSERT INTO `enq_preguntes` (`pregunta`) VALUES('She\'s a beautiful girl!!!');
  5. //el error al introducir en la base dadetos
  6. Algo está equivocado en su sintax cerca 's a beautiful girl!!!')' en la linea 1
  #8 (permalink)  
Antiguo 04/04/2009, 14:14
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Manejar Inserts En tablas relaciondas

Como te comenté, el addslashes o mysql_real_escape_string debes hacerlo sobre el dato a insertar, no sobre el Query, es por eso que te da esos errores.

Saludos.
  #9 (permalink)  
Antiguo 04/04/2009, 14:58
machoman112233
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Manejar Inserts En tablas relaciondas

Si lo que pasa es que he echo los cambios necesarios y lo lo hago sobre lo valores y despues genero la query... para insertarlo me tienen que quedar \\\'

Código php:
Ver original
  1. function InsertarValoresSQL($array_insert,$campo_insert)
  2.     {
  3.         //Genera la consulta MySQL que se envia al servidor (INSERTAR).
  4.         //Se le pasa una array asociativa y convierte
  5.         //los key's de la array en los campos que corresponden
  6.         //a la base de datos y los valores respectivos a valores
  7.         //associados a cada campo.
  8.        
  9.         $this->array_key = array_keys($array_insert);
  10.         $this->array_valor = $array_insert;
  11.        
  12.         for($i = 0;$i < count($this->array_valor);$i++)
  13.         {
  14.             $this->array_valor[$this->array_key[$i]] = (is_numeric($this->array_valor[$this->array_key[$i]]))? $this->array_valor[$this->array_key[$i]] : "'".$this->limpiar($this->array_valor[$this->array_key[$i]])."'";
  15.         }  
  16.        
  17.         for($i = 0;$i < count($this->array_key);$i++)
  18.         {
  19.             $this->array_key[$i] = "`".$this->array_key[$i]."`";
  20.         }
  21.        
  22.         $this->nombre_campo = implode(",",$this->array_key);
  23.         $this->valor_campo = implode(",",$this->array_valor);
  24.        
  25.         $sql = "INSERT INTO `".$campo_insert."` (".$this->nombre_campo.")";
  26.         $sql .= " VALUES(".$this->valor_campo.");";
  27.         return($sql);
  28.     }
  29.  
  30. private function limpiar($variable)
  31.     {
  32.         //para escapar los caracteres especiales.
  33.      return(addslashes(mysql_real_escape_string(trim($variable)))); //con esto funciona
  34.      return(mysql_real_escape_string(trim($variable))); //con esto no
  35.  
  36.     }

La consulta me queda asi para que funcione...
Código mysql:
Ver original
  1. INSERT INTO `enq_preguntes` (`pregunta`) VALUES('She\\\'s a beautiful girl?');

PD: o soy **** y no me entero... o quien sabe...
  #10 (permalink)  
Antiguo 04/04/2009, 19:28
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Manejar Inserts En tablas relaciondas

Verifica la directiva magic_quotes en tu php.ini, si esta activada no necesitas usar addslashes, es por eso que te genera las barras extras.

Saludos.
  #11 (permalink)  
Antiguo 06/04/2009, 07:25
machoman112233
Invitado
 
Mensajes: n/a
Puntos:
[RESUELTO]Respuesta: Manejar Inserts En tablas relaciondas

Problema resuelto... gracias por la ayuda...

Código php:
Ver original
  1. private function limpiar($variable)
  2.     {
  3.         //para escapar los caracteres especiales.
  4.         if(get_magic_quotes_gpc()){$variable = mysql_real_escape_string(stripslashes(trim($variable)));}
  5.         else{$variable = mysql_real_escape_string(trim($variable));}
  6.         return($variable);
  7.     }
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:16.