Foros del Web » Programando para Internet » PHP »

Problema con archivo de funciones

Estas en el tema de Problema con archivo de funciones en el foro de PHP en Foros del Web. Que pasa chavales, como andamos. Os explico ando liadillo con un tema para hacer un archvio php que tenga una serie de funciones, todo va ...
  #1 (permalink)  
Antiguo 29/10/2008, 08:53
 
Fecha de Ingreso: septiembre-2008
Mensajes: 45
Antigüedad: 15 años, 7 meses
Puntos: 0
Exclamación Problema con archivo de funciones

Que pasa chavales, como andamos.
Os explico ando liadillo con un tema para hacer un archvio php que tenga una serie de funciones, todo va bien si solo llamo a una de las funciones que hay en el archivo pero si llamoa a otra muere, ademas con con un error rarisimo.

Os cuento el archivo en el que llamo la funcion es

Código PHP:
<?php

require_once("./categoria/editar_categoria.php");

mostrar();

$dato "ATC";
insertar($dato);
echo
"Dato insertado <br>";


?>
el tema es que mostrar muestra, pero no inserta, y si intercambio la funciones inserta pero no muestra. El error que sale es este

Código:
id_categoria: 18
tipo_contacto: ATC

id_categoria: 17
tipo_contacto: ATC


Warning: mysql_connect() [function.mysql-connect]: Access denied for user 'ODBC'@'localhost' (using password: NO) in C:\xampp\htdocs\historico\class\class_mysql.php on line 28

Warning: mysql_select_db(): supplied argument is not a valid MySQL-Link resource in C:\xampp\htdocs\historico\class\class_mysql.php on line 29

Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in C:\xampp\htdocs\historico\class\class_mysql.php on line 35
Error en la conexión con la base de datos.
y el archivo que llamo editar_categoria que es donde tengo las funciones tiene estos datos

Código PHP:
<?php
//Muestra la lista de categorias
function mostrar()
{
    require_once(
$_SERVER[DOCUMENT_ROOT].'/historico/include/conf_conexion.php');
    require_once(
$_SERVER[DOCUMENT_ROOT].'/historico/class/class_mysql.php');
    
    
$usuario = new Servidor_Base_Datos($servidor$usuario$pass$base_datos);
    
    
$usuario->consulta("SELECT * FROM categoria");
    while (
$fila $usuario->extraer_registro())
    {
        foreach(
$fila as $indice => $valor)
        {
            echo 
"$indice: $valor<br>";
        }
        echo 
"<br>";
    }
}

//Inserta un registro en la lista
function insertar($tipo_contacto)
{
    require_once(
$_SERVER[DOCUMENT_ROOT].'/historico/include/conf_conexion.php');
    require_once(
$_SERVER[DOCUMENT_ROOT].'/historico/class/class_mysql.php');
    
    
$usuario = new Servidor_Base_Datos($servidor$usuario$pass$base_datos);
    
    
$usuario->consulta("INSERT INTO categoria (tipo_contacto) VALUE ('$tipo_contacto')");
}

//Borra un registro de la lista
function borrar($id)
{
    require_once(
$_SERVER[DOCUMENT_ROOT].'/historico/include/conf_conexion.php');
    require_once(
$_SERVER[DOCUMENT_ROOT].'/historico/class/class_mysql.php');
    
    
$usuario = new Servidor_Base_Datos($servidor$usuario$pass$base_datos);
    
    
$usuario->consulta("SELECT id_categoria FROM categoria WHERE id_categoria='$id'");
}
?>
los datos de conexion son correctos, y la clase que he hecho para la base de datos rula a la perfección. X cierto la clase es esta

Código PHP:
<?php

/**
 * @author Oscar Majo
 * @copyright 2008
 */

class Servidor_Base_Datos
{
    private 
$servidor;
    private 
$usuario;
    private 
$pass;
    private 
$base_datos;
    private 
$descriptor;
    
    function 
__construct($servidor$usuario$pass$base_datos)
    {
        
$this->servidor $servidor;
        
$this->usuario $usuario;
        
$this->pass $pass;
        
$this->base_datos $base_datos;
        
$this->conectar_base_datos();
    }
    
    
//Establece conexión con el servidor
    
private function conectar_base_datos()
    {
        
$this->descriptor mysql_connect($this->servidor$this->usuario$this->pass);
        
mysql_select_db($this->base_datos$this->descriptor);
    }
    
    
//Se encarga de enviar las cosnusltas al servidor
    
public function consulta($consulta)
    {
        
$this->resultado mysql_query($consulta$this->descriptor)or die ("Error en la conexión con la base de datos." mysql_error());
    }
    
    
//Extrae registros de l abase de datos 
    
public function extraer_registro()
    {
        if(
$fila mysql_fetch_array($this->resultadoMYSQL_ASSOC))
        {
            return 
$fila;
        }else{
            return 
false;
        }
    }
    
    
//Extrae el numero de filas que tiene la base de datos
    
public function numero_filas()
    {
        return 
mysql_num_rows($this->resultado);
    }
    
    
//Extrae el numero de filas afectados por alguna modificación
    
public function filas_afectadas()
    {
        return 
mysql_affected_rows($this->descriptor);
    }
    
    
//Informa del ultimo registro de la lista 
    
public function ultima_fila()
    {
        return 
mysql_insert_id($this->descriptor);
    }
}
?>
También lo que me pasa es que despues de 25 horas con este error ya estoy mas nervioso que el neng de castefa, juas juas. Asiq si alguien sabe que pasa y no le importa comentarlo...

Gracias a todos por adelantado. Un saludote del yeikh!!!!!!
  #2 (permalink)  
Antiguo 29/10/2008, 08:55
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: Problema con archivo de funciones

El problema es que no estas especificando los datos para conectarte a la base de datos.

Te falta el usuario, contraseña y host.
  #3 (permalink)  
Antiguo 29/10/2008, 09:40
 
Fecha de Ingreso: septiembre-2008
Mensajes: 45
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: Problema con archivo de funciones

Si que especifico los datos de conesxion en el archivo que inuyo como conf_conexion.php.

Ademas de no ser correctos los datos de configuración no me funcionaria ni la primera ni la segunda función y como comenté antes funcianan las llamadas a la primera de las funciones sea cual sea pero no la segunda llamada
  #4 (permalink)  
Antiguo 29/10/2008, 09:43
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Problema con archivo de funciones

El problema es que dentro de tus funciones estas usando require_once, eso que hace? Que solo se incluya una vez tu archivo de configuración, por lo que en tu segunda llamada ya no se incluye y las variables que pasas para conectarte a la base de datos son nulas, y trata PHP entonces de conectarse con las variables que tiene por defecto, cambia esos require_once por require.

Saludos.
  #5 (permalink)  
Antiguo 29/10/2008, 09:49
 
Fecha de Ingreso: septiembre-2008
Mensajes: 45
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: Problema con archivo de funciones

Perfect!!!! Joer no habia caido, tienes razón, he solucionado ese tema ahora otro problema

Código:
Fatal error: Cannot redeclare class Servidor_Base_Datos in C:\xampp\htdocs\historico\class\class_mysql.php on line 9
Por cierto gracias por las respuestas y un saludote
  #6 (permalink)  
Antiguo 29/10/2008, 09:53
Avatar de the_web_saint  
Fecha de Ingreso: mayo-2008
Ubicación: localhost/tierra/america/panama
Mensajes: 1.229
Antigüedad: 16 años
Puntos: 43
Respuesta: Problema con archivo de funciones

Coloca el código de class_mysql.php. Es ahí donde se da el error.

Saludos
__________________
..::The Saint::..
El pesimista se queja del viento; el optimista espera que cambie; el realista ajusta las velas.
  #7 (permalink)  
Antiguo 29/10/2008, 09:57
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Problema con archivo de funciones

Hola Yeikh,

Creo que mejor debes de entender el uso de require/require_once, al tu usar require_once le dices a PHP que solamente incluya la clase una sola vez, no importa cuantos require_once hagas, cuando usas require, siempre se va a incluir por las veces que la llames.

Ahora en tu caso, tu archivo de conf_conexion.php tiene solo variables por lo que para hacerlas locales a la función que estas usando necesitas usar require SIEMPRE de lo contrario no se volveran a incluir.

En el caso de class_mysql.php esta tiene una clase, si tu usas require cada vez a la segunda vez que la llames va a incluir la clase y te va a marcar error, esto es porque las funciones/clases son globales todo el tiempo. En este caso necesitas usar require_once, y lo puedes hacer al inicio de tu archivo de funciones.

Saludos.
  #8 (permalink)  
Antiguo 29/10/2008, 09:58
 
Fecha de Ingreso: septiembre-2008
Mensajes: 45
Antigüedad: 15 años, 7 meses
Puntos: 0
Nikelaooooo!!!

Muchas gracias a todos por las respuestas.

Ya he encontrado el problema, si pongo el require de los datos de conexión en cada función y solo un require al principio del fichero fuera de las funciones donde está la clase mysql ya fufa.

Un saludote del yeikh!!!y gracias de nuevo

Cita:
Iniciado por GatorV Ver Mensaje
Hola Yeikh,

Creo que mejor debes de entender el uso de require/require_once, al tu usar require_once le dices a PHP que solamente incluya la clase una sola vez, no importa cuantos require_once hagas, cuando usas require, siempre se va a incluir por las veces que la llames.

Ahora en tu caso, tu archivo de conf_conexion.php tiene solo variables por lo que para hacerlas locales a la función que estas usando necesitas usar require SIEMPRE de lo contrario no se volveran a incluir.

En el caso de class_mysql.php esta tiene una clase, si tu usas require cada vez a la segunda vez que la llames va a incluir la clase y te va a marcar error, esto es porque las funciones/clases son globales todo el tiempo. En este caso necesitas usar require_once, y lo puedes hacer al inicio de tu archivo de funciones.

Saludos.


Muchas gracias por la explicaion no habia visto tu respuesta. Te lo agradezco mucho poque estoy un poco pez con el tema de las clases,jejej.

Gracias de nuevo GatorV eres un crack!! Saludotesdel yeikh

Última edición por GatorV; 29/10/2008 a las 10:35
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 16:04.