Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Obteniendo un valor de una funcion en una llamada

Estas en el tema de Obteniendo un valor de una funcion en una llamada en el foro de PHP en Foros del Web. Buentas tardes, estoy trabajando con una aplicacion que genera un listado cuyo contenido muestra el resultado de una consulta MySQL sobre una base de datos, ...
  #1 (permalink)  
Antiguo 22/08/2014, 09:01
Avatar de Hyemin  
Fecha de Ingreso: agosto-2014
Mensajes: 147
Antigüedad: 10 años, 3 meses
Puntos: 0
Obteniendo un valor de una funcion en una llamada

Buentas tardes, estoy trabajando con una aplicacion que genera un listado cuyo contenido muestra el resultado de una consulta MySQL sobre una base de datos, uno de los campos es la fecha de vencimiento de un certificado.

Mi intencion era que cuando el certificado estuvioera por vencer el color del texto fuera rojo y si no verde.

Para eso estoy usando este codigo que funciona bien:

Código PHP:
while ($result_ar mysqli_fetch_assoc($resultado)) {

date_default_timezone_set('America/Mexico_City');   
$hoy = new datetime();       
$vencimiento = new DateTime($result_ar['vencimiento']);
$total $hoy->diff($vencimiento)->format('%a');

if (
$total<90) {
    
$color red;
} else {
    
$color green;

}
        
   
         echo 
"<td> <a  style='color:$color' href='detalles.php?id=".$result_ar['id']."'>".$result_ar['vencimiento']."</a></td>";
         echo 
"</td></tr>\n";
     }
      echo 
"</table>";
    
     
$conexion->close(); 
El codigo precedido me genera correctamente la tabla con el color, la variable $color toma el que coresponde.

Ahora, quiero hacer el código mas simple y estoy tratando de separar todo lo posible el diseño de la prograacion asi que desearía dejar la menor cantidad de código en la pagina utilizando entonces funciones.

Para ello hice un fichero llamado funciones,php y lo puse en "require_nce" del header
Código PHP:
function comparar (){
global 
$color;            
date_default_timezone_set('America/Mexico_City');   
$hoy = new datetime();       
$vencimiento = new DateTime($result_ar['vencimiento']);
$total $hoy->diff($vencimiento)->format('%a');

if (
$total<90) {
    
$color red;
} else {
    
$color green;

}
return  
$color;

Luego modifico el bucle while en la pagina para que quede solo la llamada a la funcion

Código PHP:

while ($result_ar mysqli_fetch_assoc($resultado)) {
call_user_func($comparar);
        
         
 echo 
"<td> <a  style='color:$color' href='detalles.php?id=".$result_ar['id']."'>".$result_ar['vencimiento']."</a></td>";
echo 
"</td></tr>\n";
     }
      echo 
"</table>";
    
     
$conexion->close();
     
        
?> 
El tema es que la funcion no esta dando resultados, o sea no logro obtener de regreso el valor $color
  #2 (permalink)  
Antiguo 22/08/2014, 09:23
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años, 7 meses
Puntos: 461
Respuesta: Obteniendo un valor de una funcion en una llamada

usar variables globales no es lo más correcto es mejor que retornes el valor que necesitas y lo asignes a la variale
Código PHP:
Ver original
  1. function comparar()
  2. {
  3.     // toda tu logica
  4.     if ($total<90) {
  5.         $color = red;
  6.     } else {
  7.         $color = green;
  8.     }
  9.     return $color;
  10. }
  11. $color = comparar();
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #3 (permalink)  
Antiguo 22/08/2014, 09:34
Avatar de Hyemin  
Fecha de Ingreso: agosto-2014
Mensajes: 147
Antigüedad: 10 años, 3 meses
Puntos: 0
Respuesta: Obteniendo un valor de una funcion en una llamada

HIce estas dos cosas, una funciona y la otra no, no entiendo la diferencia

prueba.php (Funciona perfecto y mestra el contenido de $result_ar en rojo)

Código PHP:
<?php
include_once 'funciones.php';

$color comparar();
$result_ar texto;

echo 
"<td> <a  style='color:$color' href='detalles.php?id=".$result_ar['id']."'>".$result_ar."</a></td>";

index.php (no funciona e incluso tranca la pagina sin error pero sin mostrar ada, queda en blanco la tabla)
Código PHP:
while ($result_ar mysqli_fetch_assoc($resultado)) {
       
         
$color comparar();
         echo 
"<tr class=\$class\">";
         echo 
"<td>".$result_ar['nombre']."</td>";
         echo 
"<td> <a  style='color:$color' href='detalles.php?id=".$result_ar['id']."'>".$result_ar['vencimiento']."</a></td>";
         echo 
"</td></tr>\n";
     }
      echo 
"</table>";
    
     
$conexion->close();
     
        
?> 

Última edición por Hyemin; 22/08/2014 a las 10:04
  #4 (permalink)  
Antiguo 22/08/2014, 10:11
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años, 7 meses
Puntos: 461
Respuesta: Obteniendo un valor de una funcion en una llamada

no tienes el error_reporting activado, activalo en el php.ini o has lo siguiente al principio del archivo
Código PHP:
Ver original
  1. ini_set('display_errors', 1);
lo más seguro es que te de un error de undefined index por $result_ar no esta dentro del scope de la función, creo que tu función debería de esta así
Código PHP:
Ver original
  1. function comparar ($vence)
  2. {
  3.     date_default_timezone_set('America/Mexico_City');  
  4.     $hoy = new datetime();      
  5.     $vencimiento = new DateTime($vence);
  6.     $total = $hoy->diff($vencimiento)->format('%a');
  7.     if ($total<90) {
  8.         $color = red;
  9.     } else {
  10.         $color = green;
  11.    }
  12. }

y lo usas

Código PHP:
Ver original
  1. $color = comparar($result_ar['vencimiento']);

prueba y nos comentas
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #5 (permalink)  
Antiguo 22/08/2014, 10:25
Avatar de Hyemin  
Fecha de Ingreso: agosto-2014
Mensajes: 147
Antigüedad: 10 años, 3 meses
Puntos: 0
Respuesta: Obteniendo un valor de una funcion en una llamada

Lo probe y casi funciona :)

Funciones.php si lo hago de esta forma por cada registro devuelto me da el siguente error
Código:
Notice: Use of undefined constant green - assumed 'green' in /var/www/funciones.php on line 12
Código PHP:
<?php

    
function comparar ($vence)
    {
        
date_default_timezone_set('America/Mexico_City');  
        
$hoy = new datetime();      
        
$vencimiento = new DateTime($vence);
        
$total $hoy->diff($vencimiento)->format('%a');
        if (
$total<90) {
            
$color red;
        } else {
            
$color green;
       }
    }
Si cambio $color=green por $color="green" o 'green', no da el error pero tampoco funciona (al menos en ambos casos las tablas se muestran)
  #6 (permalink)  
Antiguo 22/08/2014, 11:58
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Respuesta: Obteniendo un valor de una funcion en una llamada

Tienes que asignar el nombre del color entre comillas pues es una cadena y no una constante, además, te falta retornar el valor de $color al final de la función (después de la condición).

Código PHP:
Ver original
  1. return $color;

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #7 (permalink)  
Antiguo 22/08/2014, 12:03
Avatar de Hyemin  
Fecha de Ingreso: agosto-2014
Mensajes: 147
Antigüedad: 10 años, 3 meses
Puntos: 0
Respuesta: Obteniendo un valor de una funcion en una llamada

Cita:
Iniciado por Alexis88 Ver Mensaje
Tienes que asignar el nombre del color entre comillas pues es una cadena y no una constante, además, te falta retornar el valor de $color al final de la función (después de la condición).

Código PHP:
Ver original
  1. return $color;

Saludos
Excelente!!! muchas gracias a ambos por el aporte, en este thread aprendi muchisimo mas que en algunos capitulos de los varios libros de php para principiantes que he estado leyendo.

Gracias por el tiempo que le dedicaron
  #8 (permalink)  
Antiguo 22/08/2014, 13:31
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: Obteniendo un valor de una funcion en una llamada

Hyemin, te sugiero leer el siguiente manual: http://www.php.net/manual/es/functions.user-defined.php
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.

Etiquetas: funcion, global, 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:44.