Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Recuperar valor con THIS->

Estas en el tema de Recuperar valor con THIS-> en el foro de PHP en Foros del Web. Buenos días estoy tratando de recuperar un valor de una función pero ya vi un par de manuales pero no lo estoy haciendo bien, el ...
  #1 (permalink)  
Antiguo 12/08/2015, 10:53
Avatar de tampon  
Fecha de Ingreso: julio-2009
Mensajes: 420
Antigüedad: 15 años, 4 meses
Puntos: 0
Recuperar valor con THIS->

Buenos días estoy tratando de recuperar un valor de una función pero ya vi un par de manuales pero no lo estoy haciendo bien, el objetivo es simple peor me estoy liando con el. ¿Alguna ayuda? Quiero recuperar el valor en la variable $tiquet para poder registrar el nuevo nombre en una base de datos. Gracias.

Código PHP:
Ver original
  1. $result =  process_files($_FILES);          
  2.     function process_files($_FILES){
  3.         $destination_path = "archivos/";
  4.         $result = 0;
  5.         echo $_FILES['tiquet']['name'];
  6.         $nombre_archivo = $_FILES['tiquet']['name'];
  7.         $ext = $_FILES['tiquet']['type'];
  8.         $tamano = $_FILES['tiquet']['size'];
  9.         $target_path = $destination_path . basename( $_FILES['tiquet']['name']);
  10.         if(@move_uploaded_file($_FILES['tiquet']['tmp_name'], $target_path)) {
  11.             $result = 1;
  12.             $codigo_fecha = date("YmdHis");        
  13.             $no_aleatorio = rand(100, 999);
  14.             $codigo = $codigo_fecha.$no_aleatorio;
  15.                                  
  16.             list($nombre, $ext) = explode(".", $nombre_archivo);
  17.             $nombre_actual = "$codigo"."."."$ext" ;
  18.             rename("archivos/$nombre_archivo","archivos/$nombre_actual");
  19.         }
  20.             sleep(1);
  21.             return $result;
  22.     }
  23.  
  24.     var $tiquet;
  25.     $this->tiquet=$nombre_archivo;
  #2 (permalink)  
Antiguo 12/08/2015, 11:00
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Recuperar valor con THIS->

1. $this sólo existe en OOP
2. $tiquet no la has definido
3. var no existe en PHP

¿De dónde sale el $this?

¿Dónde declaras $tiquet en tu código?

¿No será que te refieres a $_FILES['tiquet'] entonces?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 12/08/2015, 11:03
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 13 años, 6 meses
Puntos: 261
Respuesta: Recuperar valor con THIS->

Buenas,

¿Ese código está dentro de una clase?

$this-> solo se utiliza dentro de las clases para llamar propiedades o métodos.

Si no es una clase...
Código PHP:
// la funcion
function process_files($_FILES)
{
    
//...
}

// se llama así:
process_files($variable)

// Y cualquier variable... por su nombre
echo $otraVariable
Espero sea de ayuda.

Saludos,

PD.: Se me adelantó pateketrueke
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight
  #4 (permalink)  
Antiguo 12/08/2015, 11:11
Avatar de tampon  
Fecha de Ingreso: julio-2009
Mensajes: 420
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: Recuperar valor con THIS->

Gracias, entonces el valor tendría que ser asignado a la variable de esta forma?

Código PHP:
Ver original
  1. $tiquet=process_files($nombre_actual);
  #5 (permalink)  
Antiguo 12/08/2015, 11:17
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 13 años, 6 meses
Puntos: 261
Respuesta: Recuperar valor con THIS->

Correcto, te retornará 0|1 según responda la función.
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight
  #6 (permalink)  
Antiguo 12/08/2015, 11:21
Avatar de tampon  
Fecha de Ingreso: julio-2009
Mensajes: 420
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: Recuperar valor con THIS->

Me regresa 0, pero en realidad me debería de devolver un nombre de archivo. ¿Como podría recuperarlo entonces?
  #7 (permalink)  
Antiguo 12/08/2015, 11:32
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 13 años, 6 meses
Puntos: 261
Respuesta: Recuperar valor con THIS->

Analizando el código encontrarás la respuesta...

Código PHP:
    function process_files($_FILES)
    {
        
$destination_path "archivos/";
        
$result           0# <-- por defecto se retorna este valor
        
echo $_FILES['tiquet']['name'];
        
$nombre_archivo $_FILES['tiquet']['name'];
        
$ext            $_FILES['tiquet']['type'];
        
$tamano         $_FILES['tiquet']['size'];
        
$target_path    $destination_path basename($_FILES['tiquet']['name']);

        
// si se cumple esta condición
        
if(@move_uploaded_file($_FILES['tiquet']['tmp_name'], $target_path))
        {
            
$result       1# <-- retorna este y sustituye al anterior
            
$codigo_fecha date("YmdHis");
            
$no_aleatorio rand(100999);
            
$codigo       $codigo_fecha $no_aleatorio;

            list(
$nombre$ext) = explode("."$nombre_archivo);
            
$nombre_actual "$codigo" "." "$ext";
            
rename("archivos/$nombre_archivo""archivos/$nombre_actual");
        }
        
sleep(1);

        return 
$result# <-- esto es lo que retorna al finalizar el proceso
    

La función está definida para usarla con algún tipo de condicionante, ya que retorna 0 o 1 que son equivalentes a true o false.

Si quieres retornar un nombre... mira los comentarios del script y encontrarás la lógica para hacerlo.

Saludos,
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight
  #8 (permalink)  
Antiguo 12/08/2015, 11:40
Avatar de tampon  
Fecha de Ingreso: julio-2009
Mensajes: 420
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: Recuperar valor con THIS->

Muchas gracias Uncontroled_Duck! Pero aun sigo sin recibir el valor. Recibo 0 o 1
  #9 (permalink)  
Antiguo 12/08/2015, 11:51
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Recuperar valor con THIS->

Cita:
Iniciado por tampon Ver Mensaje
Muchas gracias Uncontroled_Duck! Pero aun sigo sin recibir el valor. Recibo 0 o 1
Por favor lee bien los comentarios que te hicieron.

Tu función sólo devolverá lo que pongas en el return, y sólo devuelves 1 o 0.

Así pues, si necesitas devolver otra cosa debes ajustar el valor de tu variable $result ¿no te parece lógico?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #10 (permalink)  
Antiguo 12/08/2015, 12:22
Avatar de tampon  
Fecha de Ingreso: julio-2009
Mensajes: 420
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: Recuperar valor con THIS->

Hola pateketrueke lo se pero en el código se renombra el archivo, lo que quiero es obtener el nuevo nombre con el que queda finalmente no quiero obtener 0 para registrar.
  #11 (permalink)  
Antiguo 12/08/2015, 13:03
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Recuperar valor con THIS->

¿De verdad era muy difícil hacer esto?

Código PHP:
Ver original
  1. rename("archivos/$nombre_archivo", "archivos/$nombre_actual");
  2.  
  3. // cambiamos el valor de $result (que antes era 1, ahora es la ruta)
  4. $result = "archivos/$nombre_actual";
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #12 (permalink)  
Antiguo 12/08/2015, 14:26
Avatar de tampon  
Fecha de Ingreso: julio-2009
Mensajes: 420
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: Recuperar valor con THIS->

Si lo intente pero eso solo me devuelve como valor "archivos/"
  #13 (permalink)  
Antiguo 12/08/2015, 14:48
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Recuperar valor con THIS->

Cita:
Iniciado por tampon Ver Mensaje
Si lo intente pero eso solo me devuelve como valor "archivos/"
Pues lo habrás hecho mal, porque si el rename() funciona entonces debería funcionar lo demás: pues debiste usar los mismo valores.

¿Tenemos que adivinar los cambios que has hecho a tu código para entender o cómo?

__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #14 (permalink)  
Antiguo 12/08/2015, 15:49
Avatar de tampon  
Fecha de Ingreso: julio-2009
Mensajes: 420
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: Recuperar valor con THIS->

No te molestes, si no quieres ayudar no ayudes. Son solo esos valores (hasta puse todo el código) y quiero obtener el valor de

Código PHP:
rename("archivos/$nombre_archivo","archivos/$nombre_actual"); 
El cual me arroja 0, 1 y archivos/ de las formas que he intentado.
  #15 (permalink)  
Antiguo 12/08/2015, 16:03
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Recuperar valor con THIS->

¿Podrías mostrar el código completo, actualizado, donde asignas la ruta a $result por favor?

Entiende que es complicado para nosotros adivinar exactamente lo que has hecho.

Si asumes que deberíamos tener claras las cosas entonces estás mal.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #16 (permalink)  
Antiguo 13/08/2015, 03:56
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 13 años, 6 meses
Puntos: 261
Respuesta: Recuperar valor con THIS->

Buenas,

Las indicaciones que se te están aportando son correctas, cada vez que haces un cambio, puede alterar el funcionamiento y el resultado de cualquier parte del script, incluso hacer que no funcione.

Entendiendo esto, esta parte cobra más sentido.
Cita:
¿Tenemos que adivinar los cambios que has hecho a tu código para entender o cómo?
Si estas usando esta función:
Código PHP:
rename("archivos/$nombre_archivo""archivos/$nombre_actual"); 
Y el retorno es "archivos/" es por que $nombre_archivo no tiene valor alguno.

Y ahí toca investigar por que no trae nada.

Puedes usar var_dump($variable) para ver el contenido de cada variable y hacerle el seguimiento hasta encontrar en que parte del script deja de hacer lo que esperas.

Los comentarios te dan una idea de la secuencia a seguir para buscar el error.
Código PHP:
function process_files($_FILES)
{
    
$destination_path "archivos/";
    
$result           0;
    echo 
$_FILES['tiquet']['name']; # 5º.- comprobar $_FILES
    
$nombre_archivo $_FILES['tiquet']['name']; # 4º.- comprobar $nombre_archivo

    
$ext            $_FILES['tiquet']['type'];
    
$tamano         $_FILES['tiquet']['size'];
    
$target_path    $destination_path basename($_FILES['tiquet']['name']);

    if(@
move_uploaded_file($_FILES['tiquet']['tmp_name'], $target_path))
    {
        
$result       1;
        
$codigo_fecha date("YmdHis");
        
$no_aleatorio rand(100999);
        
$codigo       $codigo_fecha $no_aleatorio# 3º.- comprobar $codigo_fecha y $no_aleatorio

        
list($nombre$ext) = explode("."$nombre_archivo);

        
$nombre_actual "$codigo" "." "$ext"# 2º.- comprobar $codigo y $ext

        /////////////////////////////////////////////////////////////////////////////////////////////////
        
var_dump($nombre_actual); # 1º.- si no trae valor la seguimos mas arriba incluido $nombre_archivo
        /////////////////////////////////////////////////////////////////////////////////////////////////

        
rename("archivos/$nombre_archivo""archivos/$nombre_actual");
    }
    
sleep(1);

    return 
$result;

Saludos,
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight
  #17 (permalink)  
Antiguo 13/08/2015, 09:03
Avatar de tampon  
Fecha de Ingreso: julio-2009
Mensajes: 420
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: Recuperar valor con THIS->

Hola de nuevo Uncontroled_Duck, muchas gracias por la ayuda var_dump si me arroja el valor que intento recuperar, pero mi problema es que no puedo recuperar para poder guardarlo en la base de datos. :/
  #18 (permalink)  
Antiguo 13/08/2015, 09:19
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 13 años, 6 meses
Puntos: 261
Respuesta: Recuperar valor con THIS->

Ok, entonces ya falta menos, ¿que cambio realizaste según las instrucciones de pateketrueke?

Cita:
Iniciado por pateketrueke Ver Mensaje
[...]
Código PHP:
Ver original
  1. rename("archivos/$nombre_archivo", "archivos/$nombre_actual");
  2.  
  3. // cambiamos el valor de $result (que antes era 1, ahora es la ruta)
  4. $result = "archivos/$nombre_actual";
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight
  #19 (permalink)  
Antiguo 13/08/2015, 16:38
Avatar de tampon  
Fecha de Ingreso: julio-2009
Mensajes: 420
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: Recuperar valor con THIS->

Hola de nuevo Uncontroled_Duck, gracias por la ayuda lo que sucede es que esa variable me funciona dentro de esa misma función, yo quería recuperar el valor para poder imprimirlo en la base de datos y la solución fue declarar la variable como global para poderla usar fuera de la función que puse. Gracias y saludos.
  #20 (permalink)  
Antiguo 13/08/2015, 17:02
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Recuperar valor con THIS->

Cita:
la solución fue declarar la variable como global para poderla usar fuera de la función que puse
Pues esa no es una "solución", es una hack horrible y poco confiable.

De hecho, y según te expresas se nota que no sabes usar funciones: y precisamente ese es su objetivo, si necesitas capturar un valor que está dentro de la función debes usar return.

Y entonces, fuera de la función (donde la invocas) es que asignas el valor de retorno, y a partir de ahí ya puedes usar dicho valor:

Código PHP:
Ver original
  1. function foo() {
  2.   return 'bar';
  3. }
  4.  
  5. $x = foo();
  6.  
  7. echo $x; // bar

Pero bueno, por más que uno se esforzó en orientarte creo que no quisiste entender y terminaste "corrigiendo" de muy mala gana.

Así debiste dejar tu código:
Código PHP:
Ver original
  1. function process_files(){
  2.     // $_FILES ya es global, no hace falta pasarla como argumento
  3.  
  4.     $destination_path = "archivos/";
  5.    
  6.     $result = FALSE; // FALSE tiene más sentido que "0"
  7.  
  8.     echo $_FILES['tiquet']['name'];
  9.     $nombre_archivo = $_FILES['tiquet']['name'];
  10.     $ext = $_FILES['tiquet']['type'];
  11.     $tamano = $_FILES['tiquet']['size'];
  12.     $target_path = $destination_path . basename( $_FILES['tiquet']['name']);
  13.     if(@move_uploaded_file($_FILES['tiquet']['tmp_name'], $target_path)) {
  14.         $result = 1; // acá no sirve de nada el 1, ¿entonces para qué hacerlo?
  15.         $codigo_fecha = date("YmdHis");        
  16.         $no_aleatorio = rand(100, 999);
  17.         $codigo = $codigo_fecha.$no_aleatorio;
  18.                              
  19.         list($nombre, $ext) = explode(".", $nombre_archivo);
  20.         $nombre_actual = "$codigo"."."."$ext" ;
  21.         rename("archivos/$nombre_archivo","archivos/$nombre_actual");
  22.  
  23.         // "archivos/$nombre_actual" es el valor de retorno
  24.         $result = "archivos/$nombre_actual";
  25.     }
  26.         sleep(1);
  27.  
  28.         // OK, devolvemos todo
  29.         return $result;
  30. }
  31.  
  32. // invocamos la función
  33. $x =  process_files();
  34.  
  35. // $x es ahora el valor del return
  36.  
  37. // no era necesario hacer global $result
  38. // sólo debes aprender a leer el manual con calma
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #21 (permalink)  
Antiguo 13/08/2015, 17:11
Avatar de tampon  
Fecha de Ingreso: julio-2009
Mensajes: 420
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: Recuperar valor con THIS->

Según lo que leí en el manual de PHP las variables globales se declaran para ser utilizadas fuera de la función, no entiendo por que es un "hack horrible y poco confiable" si por algo existe y a mi me funciona, pero bueno...
  #22 (permalink)  
Antiguo 13/08/2015, 17:18
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Recuperar valor con THIS->

Cita:
Iniciado por tampon Ver Mensaje
Según lo que leí en el manual de PHP las variables globales se declaran para ser utilizadas fuera de la función, no entiendo por que es un "hack horrible y poco confiable" si por algo existe y a mi me funciona, pero bueno...
El asunto es que tu no necesitas exponer una variable local (dentro de la función) de manera global, con sólo usar return adecuadamente puedes exponer dicho valor al exterior.

Ese es el problema, sencillamente no deberías hacerlo: porque no hace falta.

Aprende a usar funciones, te hará mucha falta, de otra forma terminarás con muchas variables globales.

Además me imagino que sí leíste la siguiente nota en manual:
Cita:
Utilizar una clave global fuera de una función no es un error. Esta puede ser utilizada aún si el fichero está incluido desde el interior de una función.
¿Verdad?

Si necesitas acceder a un valor externo dentro de una función tienes dos opciones:

- Usas global (mala idea)
- La pasas por argumento (mejor)

Si necesitas exponer un valor interno de la función al exterior sólo tienes dos opciones:

- Usas global (pésima idea)
- La devuelves con return (mejor)
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.

Etiquetas: fecha, valor, 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:11.