Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Id retornado no se guarda en otra tabla diferente en BD

Estas en el tema de Id retornado no se guarda en otra tabla diferente en BD en el foro de PHP en Foros del Web. Buenas estoy por aca pidiendoles ayuda con un problema que me lleva bastante complicada, estoy creando un proyecto que permite subir archivos de tipo pdf ...
  #1 (permalink)  
Antiguo 09/08/2015, 06:17
 
Fecha de Ingreso: julio-2014
Mensajes: 7
Antigüedad: 9 años, 9 meses
Puntos: 0
Id retornado no se guarda en otra tabla diferente en BD

Buenas estoy por aca pidiendoles ayuda con un problema que me lleva bastante complicada, estoy creando un proyecto que permite subir archivos de tipo pdf a un servidor y guardar datos basicos en la base de datos, luego le pido que me retorne el ID que es autoincrementable, este id lo almaceno en una variable en la clase controlador para almacenarlo en otra base de datos relacional llamada destinatarios, el problema viene aqui porque el id llega null o vacio cuando lo voy a almacenar en destinatarios. Cuando reviso la tabla de Documentos esta la informacion pero en la otra tabla llega la cedula pero no el id debido.

Espero me puedan ayudar, aqui les dejo el codigo

Código PHP:
class Documento {

    private 
$id_documento;
    private 
$nombre_documento;
    private 
$descripcion_documento;
    private 
$tipo_documento;
    private 
$ruta_archivo;
    private 
$cantidad_firmas;
    private 
$estatus;
    private 
$cedula_generador;

    function 
__construct() {
        
$this->db pdodb::getDB();
    }

    public function 
getId_documento() {
        return 
$this->id_documento;
    }

    public function 
getNombre_documento() {
        return 
$this->nombre_documento;
    }

    public function 
getDescripcion_documento() {
        return 
$this->descripcion_documento;
    }

    public function 
getTipo_documento() {
        return 
$this->tipo_documento;
    }

    public function 
getRuta_archivo() {
        return 
$this->ruta_archivo;
    }

    public function 
getCantidad_firmas() {
        return 
$this->cantidad_firmas;
    }

    public function 
getEstatus() {
        return 
$this->estatus;
    }

    public function 
getCedula_generador() {
        return 
$this->cedula_generador;
    }

    public function 
setId_documento($id_documento) {
        
$this->id_documento $id_documento;
    }

    public function 
setNombre_documento($nombre_documento) {
        
$this->nombre_documento $nombre_documento;
    }

    public function 
setDescripcion_documento($descripcion_documento) {
        
$this->descripcion_documento $descripcion_documento;
    }

    public function 
setTipo_documento($tipo_documento) {
        
$this->tipo_documento $tipo_documento;
    }

    public function 
setRuta_archivo($ruta_archivo) {
        
$this->ruta_archivo $ruta_archivo;
    }

    public function 
setCantidad_firmas($cantidad_firmas) {
        
$this->cantidad_firmas $cantidad_firmas;
    }

    public function 
setEstatus($estatus) {
        
$this->estatus $estatus;
    }

    public function 
setCedula_generador($cedula_generador) {
        
$this->cedula_generador $cedula_generador;
    }

    public function 
salvar($file_upload$tmp_name$size$tipo) {
        
$rutacompl $this->ruta_archivo $file_upload;
        if (
$tipo == "application/pdf") {
            if (
$size 0) {
// Si no hubo ningun error, hacemos otra condicion para asegurarnos que el archivo no sea repetido
                
if (!file_exists($rutacompl)) {
// Si no es un archivo repetido y no hubo ningun error, procedemos a subir a la carpeta /archivos, seguido de eso alamacenamos en BD
                    
if (move_uploaded_file($tmp_name$rutacompl)) {

                        
$sql "INSERT INTO documentos 
       (nombre_documento,descripcion_documento,tipo_documento,ruta_archivo,cantidad_firmas,cedula_generador,estatus)
       VALUES(:nombre_documento,:descripcion_documento,:tipo_documento,:ruta_archivo,:cantidad_firmas,:cedula_generador,:estatus) 
       RETURNING id_documento"
;
                        
$sth $this->db->prepare($sql);
                        
$sth->execute(
                                array(
                                    
'nombre_documento' => $this->nombre_documento,
                                    
'descripcion_documento' => $this->descripcion_documento,
                                    
'tipo_documento' => $this->tipo_documento,
                                    
'ruta_archivo' => $this->ruta_archivo,
                                    
'cantidad_firmas' => $this->cantidad_firmas,
                                    
'cedula_generador' => $this->cedula_generador,
                                    
'estatus' => $this->estatus
                                
)
                        );
                        
$resultado $sth->fetch(PDO::FETCH_ASSOC);
                        
$this->id_documento $resultado['id_documento'];
                        return 
0;
                    } else {
                        return 
1;
                    }
                } else {
                    return 
2;
                }
            } else {
                return 
3;
            }
        } else {
            return 
4;
        }
    } 
Y el codigo del controlador
Código PHP:
  $file_uploadPDF $_FILES["archivo"]["name"];
                        
$tmp_namePDF $_FILES["archivo"]["tmp_name"];
                        
$sizePDF $_FILES["archivo"]["size"];
                        
$tipoPDF $_FILES["archivo"]["type"];
                        
$rutaabs "documentospdf/afirmar/";
                        
$valfirmante $_REQUEST['fieldF'];
                        
$valdestinatario $_REQUEST['fieldD'];
                        
$cantfirmas count($valfirmante);

                        
$documento_req = new Documento();
                        
$documento_req->setNombre_documento($file_uploadPDF);
                        
$documento_req->setDescripcion_documento($_REQUEST['descripciondoc']);
                        
$documento_req->setTipo_documento($_REQUEST['tipodocumento']);
                        
$documento_req->setRuta_archivo($rutaabs);
                        
$documento_req->setCantidad_firmas($cantfirmas);
                        
$documento_req->setEstatus('Iniciado');
                        
$documento_req->setCedula_generador($_SESSION['cedula']);
                        
$validaPDF $documento_req->salvar($file_uploadPDF$tmp_namePDF$sizePDF$tipoPDF);
                        
$id_documento $documento_req->getId_documento();


                        if (
$validaPDF == 0) {
                            
$resultadoPDF 'Datos Guardados';
                        } else if (
$validaPDF == 1) {
                            
$resultadoPDF 'Error subiendo el archivo al servidor';
                        } else if (
$validaPDF == 2) {
                            
$resultadoPDF 'El archivo ya existe en el servidor';
                        } else if (
$validaPDF == 3) {
                            
$resultadoPDF 'El archivo esta vacio';
                        } else if (
$validaPDF == 4) {
                            
$resultadoPDF 'Archivo no permitido, solo se permite archivos PDF';
                        }
                        
$firmante_req = new Firmante();
                        for (
$i 0$i count($valfirmante); $i++) {
                            
$firmante[$i] = $valfirmante[$i];
                            
$firmante_req->setId_documento_doc($id_documento);
                            
$firmante_req->setCedula_firmante($firmante[$i]);
                            
$firmante_req->setOrden_firmante($i);
                            
$firmante_req->salvar();
                        }
                        
$destinatario_req = new Destinatario();
                        for (
$k 0$k count($valdestinatario); $k++) {
                            
$destinatario[$k] = $valdestinatario[$i];
                            
$destinatario_req->setCedula_destinatario($destinatario[$i]);
                            
$destinatario_req->setId_documento_dest($id_documento);
                            
$destinatario_req->salvar();
                        } 
  #2 (permalink)  
Antiguo 09/08/2015, 09:06
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Id retornado no se guarda en otra tabla diferente en BD

Hasta donde entiendo las consultas INSERT no devuelven datos, por lo tanto no puedes hacer fetch de nada.

¿No me digas que no has leído esa parte en el manual?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 09/08/2015, 09:21
 
Fecha de Ingreso: julio-2014
Mensajes: 7
Antigüedad: 9 años, 9 meses
Puntos: 0
Respuesta: Id retornado no se guarda en otra tabla diferente en BD

Si lo que pasa es que la primera vez que programó orientado a objetos y uso pdo. Entonces como puedo hacer? Ayudenme porque en una anterior implentacion lo logre pero no usaba poo ni pdo. Y en serio lo necesito. Gracias
  #4 (permalink)  
Antiguo 09/08/2015, 11:30
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, 4 meses
Puntos: 2658
Respuesta: Id retornado no se guarda en otra tabla diferente en BD

Empecemos por aclarar una cosa: ¿Qué DBMS estas usando?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 09/08/2015, 13:44
 
Fecha de Ingreso: julio-2014
Mensajes: 7
Antigüedad: 9 años, 9 meses
Puntos: 0
Respuesta: Id retornado no se guarda en otra tabla diferente en BD

Bueno tengo la base de datos con postgres y uso como DBMS phpgadmin uso un template que es tinybutstrong. Gracias
  #6 (permalink)  
Antiguo 09/08/2015, 15:02
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, 4 meses
Puntos: 2658
Respuesta: Id retornado no se guarda en otra tabla diferente en BD

Bueno, lo primero que siempre debes hacer es acudir al manual de referencia. En el caso de RETURNING es una cláusula exclusiva de PostgreSQL y Oracle, que posee diferentes restricciones y sintaxis dependiendo del DBMS.
PostgreSQL: http://www.postgresql.org/docs/8.2/s...ql-insert.html
Oracle: http://docs.oracle.com/cd/B19306_01/...nto_clause.htm

Ahora bien, para funcionar correctamente debes asegurarte de PDO la soporte, porque de lo contrario no obtendrás el dato.
Adicionalmente, ten en cuenta que estás programando en OO, y en ese caso hay restricciones de entorno de existencia para las variables que pueden crear problemas si no dominas ese aspecto.

Si el valor regresa al ejecutar la query del INSERT, entonces deberías hacer un analisis paso a paso ("prueba de escritorio") para saber si estás cometiendo un error programático, y perdiendo el valor en alguna parte.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 10/08/2015, 08:39
 
Fecha de Ingreso: julio-2014
Mensajes: 7
Antigüedad: 9 años, 9 meses
Puntos: 0
Respuesta: Id retornado no se guarda en otra tabla diferente en BD

Muchas gracias por tus recomendaciones gnzsoloyo, logre solucionar el problema leyendo bien la documentacion e investigando un poco mas aqui les dejo el codigo como aporte.

El modelo en la funcion salvar, use la setencia fecthColumn ya que como postgres soporta el RETURNING solo debia pedir el arreglo.

Código PHP:
 public function salvar($file_upload$tmp_name$size$tipo) {
        
$rutacompl $this->ruta_archivo $file_upload;
        if (
$tipo == "application/pdf") {
            if (
$size 0) {
// Si no hubo ningun error, hacemos otra condicion para asegurarnos que el archivo no sea repetido
                
if (!file_exists($rutacompl)) {
// Si no es un archivo repetido y no hubo ningun error, procedemos a subir a la carpeta /archivos, seguido de eso alamacenamos en BD
                    
if (move_uploaded_file($tmp_name$rutacompl)) {

                        
$sql "INSERT INTO documentos 
       (nombre_documento,descripcion_documento,tipo_documento,ruta_archivo,cantidad_firmas,cedula_generador,estatus)
       VALUES(:nombre_documento,:descripcion_documento,:tipo_documento,:ruta_archivo,:cantidad_firmas,:cedula_generador,:estatus) 
       RETURNING id_documento"
;
                        
$sth $this->db->prepare($sql);
                        
$sth->execute(
                                array(
                                    
'nombre_documento' => $this->nombre_documento,
                                    
'descripcion_documento' => $this->descripcion_documento,
                                    
'tipo_documento' => $this->tipo_documento,
                                    
'ruta_archivo' => $this->ruta_archivo,
                                    
'cantidad_firmas' => $this->cantidad_firmas,
                                    
'cedula_generador' => $this->cedula_generador,
                                    
'estatus' => $this->estatus
                                
)
                        );
                        
                        
$resultado $sth->fetchColumn();
                        
$this->id_documento $resultado;
                        return 
0;
                    } else {
                        return 
1;
                    }
                } else {
                    return 
2;
                }
            } else {
                return 
3;
            }
        } else {
            return 
4;
        }
    } 

Muchas Gracias de nuevo

Etiquetas: bd, diferente, sql, tabla, 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 08:08.