Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] extraño problema con insert

Estas en el tema de extraño problema con insert en el foro de PHP en Foros del Web. hola como estan? me estoy topando con un problema que me parece muy raro , les comento tengo el siguiente codigo que se ejecuta mediante ...
  #1 (permalink)  
Antiguo 31/03/2014, 10:40
Avatar de JAK^  
Fecha de Ingreso: octubre-2005
Ubicación: ^^CaMiNiTo Al CoSTaDo DeL
Mensajes: 850
Antigüedad: 18 años, 6 meses
Puntos: 4
extraño problema con insert

hola como estan? me estoy topando con un problema que me parece muy raro , les comento tengo el siguiente codigo que se ejecuta mediante ajax, funciona perfecto, lo que hace es un insert en una base de datos..

Código PHP:
include_once $_SERVER['DOCUMENT_ROOT'].'/php/Class/Evento.php';

if (
$_POST['tarea']=='crearEvento') {
$evento = new Evento();



$evento->setClase($_POST['clase_eventos']);
$evento->setNombre($_POST['nombre_eventos']);
$evento->setUsuario($_POST['usuario_eventos']);


echo  
$_POST['clase_eventos'].$evento->insertEvento(); 
el problema es cuando $_POST['clase_eventos']= 1.. cuando vale 1 el insert no se produce....

probe haciendo $evento->setClase(1); pensando que podia ser la variable, pero no, tampoco funciona, entonces probe cambiando distintos valores, inclusive cadenas de texto, y funciona con todos.. menos con 1......

me resulta de verdad extraño ya no se que mas probar.. saludos!
__________________
hola . . .
  #2 (permalink)  
Antiguo 31/03/2014, 11:08
Avatar de JAK^  
Fecha de Ingreso: octubre-2005
Ubicación: ^^CaMiNiTo Al CoSTaDo DeL
Mensajes: 850
Antigüedad: 18 años, 6 meses
Puntos: 4
Respuesta: extraño problema con insert

acabo de probar con las otras variables y pasa igual, cuando alguna vale 1, el insert no se produce... no tengo idea cual puede ser el problema
__________________
hola . . .
  #3 (permalink)  
Antiguo 31/03/2014, 11:42
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: extraño problema con insert

Bueno, el código aportado es algo incompleto, porque no sabemos si el método insertEvento() tiene dentro de su lógica alguna condición que no se esté cumpliendo.
¿Podrías postear todo ese código?
Compelto, por favor. Lo que omitas o generalices bien podría ser precisamente la causa del error.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 31/03/2014, 12:28
Avatar de JAK^  
Fecha de Ingreso: octubre-2005
Ubicación: ^^CaMiNiTo Al CoSTaDo DeL
Mensajes: 850
Antigüedad: 18 años, 6 meses
Puntos: 4
Respuesta: extraño problema con insert

hola!, bien, algo asi seria

Código PHP:
public function insertEvento()
    {
        
$bd = new MySQL();
        
$sql = new Sql();
        
$sql->addFuncion("INSERT");
        
$sql->addTabla("EVENTOS");
        
$sql->addSelect("USUARIO_EVENTOS");
        
$sql->addSelect("CLASE_EVENTOS");
        
$sql->addSelect("NOMBRE_EVENTOS");
        
                
        
$sql->addValue($this -> _usuario);
        
$sql->addValue($this -> _clase);
        
$sql->addValue($this -> _nombre);
        
        return 
$bd -> ejecutar($sql);
    } 
Código PHP:

public function ejecutar ($sql
    {
        
$this->conectar();

        
$resultado=mysqli_query($this->_conexion$sql);

        
        return 
$resultado;
        
        
    } 
lo unico que faltaria es como se crea la secuencia sql, aunque estoy seguro que el problema no esta ahi.. el codigo no tiene ningun validador ni condicional, sobre los campos.
__________________
hola . . .
  #5 (permalink)  
Antiguo 31/03/2014, 12:50
Avatar de JAK^  
Fecha de Ingreso: octubre-2005
Ubicación: ^^CaMiNiTo Al CoSTaDo DeL
Mensajes: 850
Antigüedad: 18 años, 6 meses
Puntos: 4
Respuesta: extraño problema con insert

este es el codigo que faltaba publicar, el que genera el sql.. en fin.. a mi entender no hay error. no se por que se puede comportar asi el codigo solo con el valor 1

Código PHP:
Ver original
  1. class Sql
  2. {
  3.     private $_where = array ();
  4.     private $_order = array ();
  5.     private $_select = array ();
  6.     private $_from = array ();
  7.     private $_funcion;  
  8.     private $_values = array();
  9.    
  10.  
  11.     public function getSQL()
  12.     {
  13.       return $this->_funcion;
  14.   }
  15.    
  16.     public function addTabla ($tabla)
  17.     {
  18.         $this -> _from[]=$tabla;
  19.     }
  20.     public function addSelect ($select)
  21.     {
  22.        
  23.             $this -> _select []=$select;
  24.        
  25.     }
  26.     public function addWhere ($where)
  27.     {
  28.         $this -> _where []= $where;
  29.     }
  30.    
  31.     public function addOrder ($order)
  32.     {
  33.         $this -> _order []= $order;
  34.     }
  35.    
  36.     public function addFuncion ($funcion)
  37.     {
  38.         $this -> _funcion = $funcion;
  39.     }
  40.    
  41.     public function addValue($value)
  42.     {
  43.       $this->_values[] = $value;
  44.     }
  45.    
  46.    
  47.    
  48.     private function _generar()
  49.     {
  50.        
  51.         $select = implode(', ',array_unique($this->_select));
  52.         $values = implode("','",array_unique($this->_values));
  53.         $from   = implode(', ',array_unique($this->_from));
  54.         $where  = implode(' AND ',array_unique($this->_where));
  55.         $order  = implode(', ',array_unique($this->_order));
  56.         $table = implode(', ',array_unique($this->_from));
  57.         $funcion = strtolower($this->_funcion);
  58.        
  59.         $select_format = "SELECT %s FROM %s WHERE %s ORDER BY %s DESC";
  60.         $select_format_sw = "SELECT %s FROM %s ORDER BY %s DESC";
  61.         $select_format_g = "SELECT %s FROM %s  WHERE %s ORDER BY %s DESC";
  62.         $insert_format = "INSERT INTO %s (%s) VALUES ('%s')";
  63.         $delete_format = "DELETE FROM %s WHERE %s";
  64.         $update_format = "UPDATE %s SET %s WHERE %s";
  65.        
  66.        
  67.         switch ($funcion) {
  68.             case 'select_sw':
  69.                 return sprintf($select_format_sw, $select, $from, $order);
  70.             break;
  71.             case 'select':
  72.                 return sprintf($select_format, $select, $from, $where, $order);
  73.             break;
  74.             case 'insert':
  75.                 return sprintf($insert_format, $table, $select, $values);
  76.             break;
  77.             case 'delete':
  78.                 return sprintf($delete_format, $from, $where);
  79.             break;
  80.             case 'update':
  81.                 return sprintf($update_format, $table, $select, $where);
  82.             break;
  83.             case 'select_g':
  84.                
  85.                 return sprintf($select_format_g, $select, $table,  $where, $order);
  86.             break;
  87.             default :
  88.                 return sprintf($select_format, '*', $from, $where);
  89.             break;
  90.         }  
  91.     }
  92.    
  93.     public function __toString()
  94.     {
  95.         return $this->_generar();
  96.     }
  97. }
__________________
hola . . .
  #6 (permalink)  
Antiguo 31/03/2014, 17:26
 
Fecha de Ingreso: diciembre-2009
Mensajes: 15
Antigüedad: 14 años, 4 meses
Puntos: 2
Respuesta: extraño problema con insert

Interesaría también ver el código de la clase Evento, aunque no sé si, forzando un poco, esto ayudaría :
Código PHP:
Ver original
  1. //(poner comillas simples en todas las variables)
  2.         $select_format = "SELECT' %s' FROM '%s' WHERE '%s' ORDER BY' %s' DESC";
  3.         $select_format_sw = "SELECT '%s' FROM '%s' ORDER BY '%s' DESC";
  4.         $select_format_g = "SELECT '%s' FROM '%s'  WHERE '%s' ORDER BY '%s' DESC";
  5.         $insert_format = "INSERT INTO '%s' ('%s') VALUES ('%s')";
  6.         $delete_format = "DELETE FROM '%s' WHERE '%s'";
  7.         $update_format = "UPDATE '%s' SET %s WHERE '%s'";

Y para depurar quiza imprimiendo la cadena SQL antes de intentar ejecutarla te ayudaría:

Código PHP:
Ver original
  1. public function insertEvento()
  2.     {
  3.         $bd = new MySQL();
  4.         $sql = new Sql();
  5.         $sql->addFuncion("INSERT");
  6.         $sql->addTabla("EVENTOS");
  7.         $sql->addSelect("USUARIO_EVENTOS");
  8.         $sql->addSelect("CLASE_EVENTOS");
  9.         $sql->addSelect("NOMBRE_EVENTOS");
  10.        
  11.                
  12.         $sql->addValue($this -> _usuario);
  13.         $sql->addValue($this -> _clase);
  14.         $sql->addValue($this -> _nombre);
  15.        
  16.         echo $sql //Una forma muy sucia de depurar.
  17.         return $bd -> ejecutar($sql);
  18.     }
  #7 (permalink)  
Antiguo 31/03/2014, 17:52
Avatar de JAK^  
Fecha de Ingreso: octubre-2005
Ubicación: ^^CaMiNiTo Al CoSTaDo DeL
Mensajes: 850
Antigüedad: 18 años, 6 meses
Puntos: 4
Respuesta: extraño problema con insert

gracias! con tu sugerencia de imprimir el $sql encontre el problema, aunque todavia no la solucion ajja. paso a explicar:

el problema no es el valor 1 en particular, sino cuando dos valores son iguales

miren:

para (usuario y clase iguales):

$_POST['clase_eventos']=2;
$_POST['nombre_eventos']="as2d";
$_POST['usuario_eventos']=2;

$sql = INSERT INTO EVENTOS (USUARIO_EVENTOS, CLASE_EVENTOS, NOMBRE_EVENTOS) VALUES ('2','as2d')

O sea falta un valor

para:

$_POST['clase_eventos']=1;
$_POST['nombre_eventos']="as2d";
$_POST['usuario_eventos']=2;


$sql=INSERT INTO EVENTOS (USUARIO_EVENTOS, CLASE_EVENTOS, NOMBRE_EVENTOS) VALUES ('2','1','as2d')

ahora bien, no entiendo por que cuando dos valores son iguales no lo toma a uno,...

pd: probe lo de las comillas y nada..
__________________
hola . . .
  #8 (permalink)  
Antiguo 31/03/2014, 18:09
Avatar de JAK^  
Fecha de Ingreso: octubre-2005
Ubicación: ^^CaMiNiTo Al CoSTaDo DeL
Mensajes: 850
Antigüedad: 18 años, 6 meses
Puntos: 4
Respuesta: extraño problema con insert

perdon!! el dichoso error era el array_unique de $values = implode("','",array_unique($this->_values)); que a todo esto no se porque lo puse..

Gracias! disculpen las molestias!
__________________
hola . . .

Etiquetas: extraño, insert, variable
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 14:35.