Foros del Web » Programando para Internet » PHP »

Problema con funciones a una BBDD

Estas en el tema de Problema con funciones a una BBDD en el foro de PHP en Foros del Web. Hola! Un saludo a todos los que me leais! Vereis estoy empezando con PHP, y me ha surgido una duda. Yo tengo tres ficheros php. ...
  #1 (permalink)  
Antiguo 10/05/2012, 01:59
toninoole
Invitado
 
Mensajes: n/a
Puntos:
Mensaje Problema con funciones a una BBDD

Hola! Un saludo a todos los que me leais!

Vereis estoy empezando con PHP, y me ha surgido una duda. Yo tengo tres ficheros php. Uno con la conexión a la BBDD, otro con funciones (hacen selects, inserts y deletes, y otra funcion que pinta los valores) y otro más que es el que llama a las funciones.

Desde el fichero principal, voy llamando a las distintas funciones. Hago un select, lo muestro, y puedo borrar y meter nuevos valores. Digamos que pinto una tabla con el resultado del select, y botones que me dejan borrar, y una caja para meter. Eso va sin problemas.

El problema me viene que despues intento hacer otro select (llamo a la funcion) y no va.

He probado mil cosas, pero no va. En el fichero principal no puedo llamar al fichero que conecta con la BBDD pq así no va, lo hago dentro de cada función que lo necesita.

¿Alguna idea?

(siento el tocho pero es que no se explicarlo mejor)
  #2 (permalink)  
Antiguo 10/05/2012, 02:55
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 7 meses
Puntos: 406
Respuesta: Problema con funciones a una BBDD

¬¬ al menos hubieras publicado tu código, así es como intentar adivinar el numero de la lotería...
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #3 (permalink)  
Antiguo 10/05/2012, 03:08
toninoole
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Problema con funciones a una BBDD

Fichero que ejecuto:

Código PHP:
$res select('Nombre','Usuario',"Tipo",2);
pinta($res,'Usuarios','anulausuario');

$res select('Nombre','TipoPlato',"","");
pinta($res,'Tipo Comida','borratipoplato');

$res select('Nombre','TipoComida',"","");
pinta($res,'Tipo Comida','borratipocomida'); 
Fichero de funciones:

Código PHP:
function select($campo,$tabla,$condicion,$Dcond) {
    require_once(
'conectaDB.php');
    
$sel "SELECT $campo FROM ".$tabla;
    if (
$condicion != "") { $sel $sel." WHERE $condicion=$Dcond"; }
    
$resultado $db->query($sel);
    return 
$resultado;
}


function 
pinta($datos,$nombre,$cola){
$pinta "<table><tr><th>$nombre</th></tr>";
    foreach (
$datos as $val) {
        
$pinta $pinta.'<tr><td>'.$val['0'].'</td><td><form method="post" action="includes/admin/'.$cola.'.php?name='.$val['0'].'"><input type="submit" value="X"></form></td></tr>';
    }
    
$pinta $pinta."</table> \n";
    print 
$pinta;

Como he dicho la primera vez se ejecuta bien, hace la consulta bien y lo pinta bien. La segunda vez ya no... No se si es por el require_once...
  #4 (permalink)  
Antiguo 10/05/2012, 03:27
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 7 meses
Puntos: 406
Respuesta: Problema con funciones a una BBDD

recuerda que las funciones en PHP tiene como objetivo la encapsulación del código en su interior, esto quiere decir que no se puede acceder a variables y objetos fuera de la función y viceversa, por lo tanto al llamar la primera vez la función select esta hace un require que solo funciona en su ambito, en la segunda llamada no puede volver a cargar 'conectaDB.php' porque este ya esta cargado en el ambito de la llamada anterior, por lo cual tu variable $db no existe... en todo caso o haces solo un require (sin el once) o haces un require fuera de la función select y pasas el objeto db como un parametro mas en la función, queda otra opción pero NO es nada aconsejable porque rompe la característica principal de las funciones la cual es definir la variable $db como global, pero para este caso es mejor crear una clase que haga todo lo necesario si solo sea cuestión de llamar a los metodos pertinentes como select, insert, etc sin la necesidad de estar creando funciones individuales y al vuelo...
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #5 (permalink)  
Antiguo 10/05/2012, 04:00
toninoole
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Problema con funciones a una BBDD

Quitando el "_once", tampoco funciona. ¿Como seria pasar $db como variable?

¿así?

Fichero que se ejecuta:

Código PHP:
require('conectaDB.php');
$res select('Nombre','TipoMenu',"","",$db); 

Fichero de funciones:
Código PHP:
function select($campo,$tabla,$condicion,$Dcond,$db) {
    
$sel "SELECT $campo FROM ".$tabla;
    if (
$condicion != "") { $sel $sel." WHERE $condicion=$Dcond"; }
    
$resultado $db->query($sel);
    return 
$resultado;

  #6 (permalink)  
Antiguo 10/05/2012, 04:20
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 7 meses
Puntos: 406
Respuesta: Problema con funciones a una BBDD

así es, ahora, me queda una duda, cuando dices que no funciona a que te refieres? no hace lo que debería hacer? envia algún error?
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #7 (permalink)  
Antiguo 10/05/2012, 04:36
toninoole
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Problema con funciones a una BBDD

Muchas gracias, funciona perfecto pasando la variable.

Me refería a que solo lo hacia la primera vez. Después ya no.

Se puede cerrar si queréis el tema.

Etiquetas: bbdd, funcion
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:14.