Foros del Web » Programando para Internet » PHP »

Llamar una función dentro de otra

Estas en el tema de Llamar una función dentro de otra en el foro de PHP en Foros del Web. Hola, tengo varios script php donde cada cuenta con una serie de funciones. Por ejemplo tengo el de acceso_db.php que cuenta con las funciones pertinentes ...
  #1 (permalink)  
Antiguo 23/12/2010, 17:58
 
Fecha de Ingreso: enero-2010
Mensajes: 389
Antigüedad: 14 años, 3 meses
Puntos: 4
Llamar una función dentro de otra

Hola, tengo varios script php donde cada cuenta con una serie de funciones. Por ejemplo tengo el de acceso_db.php que cuenta con las funciones pertinentes al acceso, realizacion de la consulta, obtener resultado y cerrar la bd.
Código PHP:
function Conexion() {
  global 
$usuario$servidor$pass;
  
$conexion=mysql_connect($servidor,$usuario,$pass);
  return 
$conexion;
}

//Hacemos la consulta
function Consulta($consulta,$conexion) {
  global 
$bd;
  
mysql_select_db($bd,$conexion);
  return 
mysql_query($consulta,$conexion);
}

//Obtenemos los resultados
function Datos($resultado) {
  return @
mysql_fetch_assoc($resultado);
}

//Cerramos la base de datos
function Cerrar($conexion) {
  
mysql_close($conexion);

Otro de ellos se encarga de los articulos y es aquí donde tengo el problema, esto creando las distintas funciones pero no funcionan, he probado con el uso de variables golbales pero no es eso, la funcion es la siguiente:
Código PHP:
function Articulos_Todos() {
  
//Ejecutamos la consulta
  
global $resultado$conexion;
  
$resultado=Consulta('SELECT titulo,contenido FROM articulos',$conexion);
  
//Pasamos los datos al array
  
while($fila=Datos($resultado)) {
    include(
'vista.php');
  }


¿Cual es el problema?

Saludos
  #2 (permalink)  
Antiguo 23/12/2010, 18:06
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: Llamar una función dentro de otra

para llamar funciones de otro archivo de php, el mismo debe de haberse cargado previamente, con include o require
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #3 (permalink)  
Antiguo 23/12/2010, 18:24
 
Fecha de Ingreso: enero-2010
Mensajes: 389
Antigüedad: 14 años, 3 meses
Puntos: 4
Respuesta: Llamar una función dentro de otra

ops se me olvido poner ese script aqui, lo hago en otro de esa manera no es ese el problema
  #4 (permalink)  
Antiguo 23/12/2010, 18:57
 
Fecha de Ingreso: enero-2010
Mensajes: 389
Antigüedad: 14 años, 3 meses
Puntos: 4
Respuesta: Llamar una función dentro de otra

claro esta que es vista.php donde imprimo los resultados, el fallo ha de estar en la sintaxis de la funcion ya que cuando lo hago sin funcion va bien
  #5 (permalink)  
Antiguo 23/12/2010, 20:05
 
Fecha de Ingreso: enero-2010
Mensajes: 389
Antigüedad: 14 años, 3 meses
Puntos: 4
Respuesta: Llamar una función dentro de otra

Los errores que me devuelve son los siguientes:

Código PHP:
Warningmysql_select_db(): supplied argument is not a valid MySQL-Link resource in C:xampphtdocs123weblibreriasacceso_db.php on line 21

Warning
mysql_query(): supplied argument is not a valid MySQL-Link resource in C:xampphtdocs123weblibreriasacceso_db.php on line 22

Warning
mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in C:xampphtdocs123weblibreriasacceso_db.php on line 27

Warning
mysql_free_result(): supplied argument is not a valid MySQL result resource in C:xampphtdocs123weblibreriasacceso_db.php on line 32 
  #6 (permalink)  
Antiguo 23/12/2010, 20:10
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años
Puntos: 461
Respuesta: Llamar una función dentro de otra

pues seria bueno que hicieras una depuracion ejemplo:

Código PHP:
Ver original
  1. mysql_query($consulta,$conexion) or die ("error al hacer la consulta ".mysql_error());
e igual para las conexiones y todo eso asi tendras el error que creo que son los parametros que estas pasando pudieras mostrarnos como estas implementando las funciones?? otra duda no te serviria mejor una clase??
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #7 (permalink)  
Antiguo 23/12/2010, 20:16
 
Fecha de Ingreso: enero-2010
Mensajes: 389
Antigüedad: 14 años, 3 meses
Puntos: 4
Respuesta: Llamar una función dentro de otra

Hola carlos_belisario, lo implemento de la siguiente manera:
Desde este script los cargo y la visualizo:
Código PHP:
require('librerias/acceso_db.php');
include(
'modulos/articulos/articulos.php');
Articulos_Todo(); 

La variable $conexion dentro de la funcion Articulos_todos contiene Resource id #13, por lo que parece ser un error.
  #8 (permalink)  
Antiguo 23/12/2010, 20:22
 
Fecha de Ingreso: enero-2010
Mensajes: 389
Antigüedad: 14 años, 3 meses
Puntos: 4
Respuesta: Llamar una función dentro de otra

Con la depuracion en mysql_query
Código PHP:
Warningmysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in C:xampphtdocsweblibreriasacceso_db.php on line 27

Warning
mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in C:xampphtdocsweblibreriasacceso_db.php on line 27

Warning
mysql_free_result(): supplied argument is not a valid MySQL result resource in C:xampphtdocsweblibreriasacceso_db.php on line 32

Warning
mysql_select_db(): 11 is not a valid MySQL-Link resource in C:xampphtdocsweblibreriasacceso_db.php on line 21

Warning
mysql_query(): 11 is not a valid MySQL-Link resource in C:xampphtdocsweblibreriasacceso_db.php on line 22
Error al hacer la consulta

  #9 (permalink)  
Antiguo 23/12/2010, 20:23
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Llamar una función dentro de otra

Cita:
Iniciado por erxaca Ver Mensaje
La variable $conexion dentro de la funcion Articulos_todos contiene Resource id #13, por lo que parece ser un error.
no, eso no es un error... precisamente el tipo de dato de una conexión es un #resource, así que por ahí no va el tiro... (:
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #10 (permalink)  
Antiguo 23/12/2010, 20:28
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años
Puntos: 461
Respuesta: Llamar una función dentro de otra

pues el problema te lo esta dando en la conexion segun lo que veo ya que la funcion conexion nunca la llamas dentro de todas las funciones que tu llamas y al no tener conexion no te va a permitir seleccionar ninguna base de datos y menos realizar una consulta, y no respondiste a mi duda no te seria mejor realizar una clase de conexion?? saludos
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #11 (permalink)  
Antiguo 23/12/2010, 20:43
 
Fecha de Ingreso: enero-2010
Mensajes: 389
Antigüedad: 14 años, 3 meses
Puntos: 4
Respuesta: Llamar una función dentro de otra

Cita:
Iniciado por carlos_belisario Ver Mensaje
pues el problema te lo esta dando en la conexion segun lo que veo ya que la funcion conexion nunca la llamas dentro de todas las funciones que tu llamas y al no tener conexion no te va a permitir seleccionar ninguna base de datos y menos realizar una consulta, y no respondiste a mi duda no te seria mejor realizar una clase de conexion?? saludos
Se me paso por alto al pegarlo aquí, esa y Cerrar(). Uso funciones porque dependerá de cada parametro de la url la accion que se haga, no siempre se hará la funcion Articulos_Todos.
  #12 (permalink)  
Antiguo 23/12/2010, 20:54
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años
Puntos: 461
Respuesta: Llamar una función dentro de otra

pues las funciones no estan mal declaradas xq fijate las utilice y me funcionaron
Código PHP:
Ver original
  1. <?php
  2. $servidor = "localhost";
  3. $usuario = "root";
  4. $pass = "";
  5. $consulta = "SELECT * FROM usuario";
  6. $bd = "prueba";
  7. function Conexion() {
  8.   global $usuario, $servidor, $pass;
  9.   $conexion=mysql_connect($servidor,$usuario,$pass);
  10.   return $conexion;
  11. }
  12. $conexion = Conexion();
  13. function Consulta($consulta,$conexion) {
  14.   global $bd;
  15.   mysql_select_db($bd,$conexion);
  16.   return mysql_query($consulta,$conexion);
  17. }
  18. function Datos($resultado) {
  19.   return @mysql_fetch_assoc($resultado);
  20. }
  21.  
  22. print_r(datos(Consulta($consulta,$conexion)));
  23. ?>
y aca el resultado
Cita:
Array ( [usuario] => elugo [pass] => 508df4cb2f4d8f80519256258cfb975f [nivel] => administrador [cedula] => 9683775 [estatus] => habilitado [online] => no [proceso] => [errorClave] => 0 )
revisa bien si estas pasando los parametros de la manera correcta saludos
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #13 (permalink)  
Antiguo 23/12/2010, 20:57
 
Fecha de Ingreso: mayo-2005
Mensajes: 201
Antigüedad: 18 años, 10 meses
Puntos: 2
Respuesta: Llamar una función dentro de otra

Tienes que pasar como parametro la funcion Conexion a tu funcion Articulos_Todos
__________________
Saludos!
Mty-NL..
  #14 (permalink)  
Antiguo 23/12/2010, 21:05
 
Fecha de Ingreso: enero-2010
Mensajes: 389
Antigüedad: 14 años, 3 meses
Puntos: 4
Respuesta: Llamar una función dentro de otra

Cita:
Iniciado por HerSAn Ver Mensaje
Tienes que pasar como parametro la funcion Conexion a tu funcion Articulos_Todos
Hola HerSAN, me devuelve el siguiente error mas al pasarselo
Código PHP:
WarningMissing argument 1 for Articulos_Todo(), called in C:xampphtdocswebindex.php on line 9 and defined in C:xampphtdocswebmodulosarticulosarticulos.php on line 4 
de todas formas lo tenia declarado como global

Cita:
pues las funciones no estan mal declaradas xq fijate las utilice y me funcionaron
El error esta en la funcion Articulos_Todo carlos_belisario, al hacerlo sin la funcion se ejecuta bien

Última edición por erxaca; 23/12/2010 a las 21:11
  #15 (permalink)  
Antiguo 23/12/2010, 21:15
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años
Puntos: 461
Respuesta: Llamar una función dentro de otra

Cita:
Iniciado por HerSAn Ver Mensaje
Tienes que pasar como parametro la funcion Conexion a tu funcion Articulos_Todos
no es necesario ya que esta usando la variable global.

Cita:
Iniciado por erxaca Ver Mensaje
Hola HerSAN, me devuelve el siguiente error mas al pasarselo
Código PHP:
WarningMissing argument 1 for Articulos_Todo(), called in C:xampphtdocswebindex.php on line 9 and defined in C:xampphtdocswebmodulosarticulosarticulos.php on line 4 
de todas formas lo tenia declarado como global



El error esta en la funcion Articulos_Todo carlos_belisario, al hacerlo sin la funcion se ejecuta bien
Código PHP:
<?php
$servidor 
"localhost";
$usuario 'root';
$pass '';
$consulta "SELECT * FROM usuario";
$bd "prueba";
function 
Conexion() {
  global 
$usuario$servidor$pass;
  
$conexion=mysql_connect($servidor,$usuario,$pass);
  return 
$conexion;

$conexion Conexion();
function 
Consulta($consulta,$conexion) {
  global 
$bd;
  
mysql_select_db($bd,$conexion);
  return 
mysql_query($consulta,$conexion);

function 
Datos($resultado) {
  return @
mysql_fetch_assoc($resultado);


function 
Articulos_Todos() {
  
//Ejecutamos la consulta
  
global $resultado$conexion;
  
$resultado=Consulta('SELECT * FROM usuario',$conexion);
  
//Pasamos los datos al array
  
while($fila=Datos($resultado)) {
    
print_r($fila);
  }
}
Articulos_Todos()
?>
aca el resultado
Cita:
Array ( [usuario] => elugo [pass] => 508df4cb2f4d8f80519256258cfb975f [nivel] => administrador [cedula] => 9683775 [estatus] => habilitado [online] => no [proceso] => [errorClave] => 0 ) Array ( [usuario] => carlos [pass] => e10adc3949ba59abbe56e057f20f883e [nivel] => pregrado [cedula] => 18082078 [estatus] => habilitado [online] => no [proceso] => [errorClave] => 28 ) Array ( [usuario] => altahir [pass] => e10adc3949ba59abbe56e057f20f883e [nivel] => docente [cedula] => 123456 [estatus] => habilitado [online] => no [proceso] => habilitado [errorClave] => 0 ) Array ( [usuario] => jfaneite [pass] => e3ceb5881a0a1fdaad01296d7554868d [nivel] => administrador [cedula] => 9686337 [estatus] => habilitado [online] => no [proceso] => habilitado [errorClave] => 0 ) Array ( [usuario] => yo [pass] => e35cf7b66449df565f93c607d5a81d09 [nivel] => docente [cedula] => 18082074 [estatus] => habilitado [online] => no [proceso] => habilitado [errorClave] => 0 )
no cambie nada solo coloque la funcion que me dices y no me dio ningun error
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #16 (permalink)  
Antiguo 24/12/2010, 07:50
 
Fecha de Ingreso: enero-2010
Mensajes: 389
Antigüedad: 14 años, 3 meses
Puntos: 4
Respuesta: Llamar una función dentro de otra

Si carlos_belisario, funciona perfectamente si se llama a la funcion desde el script donde se ha creado (articulos.php), pero no desde index.php.

El archivo articulos.php se encuentra dentro de unos directorios, mientras que el index, está en la raíz pero se incluye el articulos.php mediante un include, ¿porque no será correcto llamar a la funcion desde el index.php y si desde el articulos.php?
  #17 (permalink)  
Antiguo 24/12/2010, 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
Puntos: 461
Respuesta: Llamar una función dentro de otra

recomendacion que me paso a mi una vez y puede que sea lo que te esta pasando incluye al principio todos los archivos de manera que tengas disponibles todas las funciones de los mismos, y deberia funcionar porque al incluir un archivo tienes disponibles todas las funciones del mismo, saludos
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way

Etiquetas: llamar
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 23:15.