Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > PHP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-01-2008
Chompiras Chompiras is offline
Miembro
 
Registrado: ene 2006
Ubicación: La plata, Argentina
Posts: 37
Poder: 0
Chompiras Va por buen camino
Problemas con smarty al tratar consulta de base de datos access

Bueno, esta consulta es un poco complicada de hacer, pero espero que alguno que sepa de php, smarty y base de datos access me pueda entender y ayudar...
Tengo una base de datos en access, para la cual cree un DSN de sistema en mi PC. El codigo de la pagina, en php, es el siguiente:
Código PHP:
<?    
    
include 'include/clases.php';
    require_once(
'smarty/libs/Smarty.class.php');
    
$smarty = new Smarty;
    
    if ( isset( 
$_GET['tipo'] ) ){
       
        
$smarty->assign('hay_resultados',true);
        if ( 
$_GET['tipo'] == "nombres" ){
            
            
$resultados = new Nombres();
        }
        else{
            
            
$resultados = new Documentos();            
        }
        unset (
$_GET['tipo']);
    }
    else{
            
        
$smarty->assign('hay_resultados',false);
    }    
    
$smarty->assign('resultados',$resultados);
    
$smarty->display('dos.tpl');
?>
Luego, la clase "clases.php" contiene el siguiente codigo:
Código PHP:
<?
    
function conectar(){
        
//El segundo y tercer parametro son el usuario y la contraseña. 
        //Sino fueron especificados, van vacios.
        
return ($conn_access odbc_connect ("dos","",""));
        
    }    
    class 
ObjetoDeUnSoloAtributo{
        private 
$atributo;
        public function 
ObjetoDeUnSoloAtributo($valorParaElAtributo){
            
$this->atributo $valorParaElAtributo;
        }
        public function 
atributo(){
            return(
$this->atributo);
        }
    }
    class 
Documentos{
        ...
    }
    class 
Nombres{
        private 
$db;
        public function 
Nombres(){
            
$this->db conectar();
           
            
$arreglo=array();
            
            
$codigo $_GET['licenciatura'];
            
$consulta odbc_exec($this->db,"select nombre,apellido from Alumnos where codigo_carrera = $codigo ");
           
            while (
$fila odbc_fetch_object($consulta)){                
                
$objeto =  new ObjetoDeUnSoloAtributo($fila->nombre.$fila->apellido);
                
$arreglo[] = $objeto;
               
            }
            return 
$arreglo;            
        }        
    }
?>
A la clase Documentos, la deje con "..." por que es muy parecida a la clase Nombres, salvo un par de detalles.

Luego, tengo un dos.tpl, con el siguiente contenido (espero que este bien la etiquera CODE para esto):
Código:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="es">
    <head>
        <title>dos</title>
        {literal}
        <script type="text/javascript">
            function mostrarNombres(formulario){
                
                if (document.getElementById("carreras").options[document.getElementById("carreras").selectedIndex].value == "informatica" ){
                    window.open("http://localhost/practicas/dos/dos.php?tipo=nombres&licenciatura=1","Nombres de los estudiantes","");

                }
                else{
                    window.open("http://localhost/practicas/dos/dos.php?tipo=nombres&licenciatura=2","Nombres de los estudiantes","");
                }                
            }
            function mostrarDocumentos(formulario){
                if (document.getElementById("carreras").options[document.getElementById("carreras").selectedIndex].value == "informatica" ){
                    window.open("http://localhost/practicas/dos/dos.php?tipo=documentos&licenciatura=1","Nombres de los estudiantes","");

                }
                else{
                    window.open("http://localhost/practicas/dos/dos.php?tipo=documentos&licenciatura=2","Nombres de los estudiantes","");
                }        
            }
        
        </script>
        {/literal}
    </head>
    
    <body>
        {if $hay_resultados == true}
            <tr class="encabezado"> 
                <th>DNI o NOMBRE de los alumnos:</th>                            
            </tr>
            {foreach item=alumno from=$resultados}                                    
                <tr>            
                    <td>{$alumno->atributo()}</td>            
                </tr>                                                
            {/foreach}
        {else}
            <br />
            <label class="carreras" for="carreras">Carrera:</label>
            <select id="carreras">
                <option value="informatica">Licenciatura en informatica</option>
                <option value="sistemas">Licenciatura en sistemas</option>
            </select>
            
            
            <form method="post" enctype="text/plain" onSubmit="mostrarNombres(this)">
                <label class="nombres" for="nombres">Listar:</label>
                <input id="nombres" type="submit" value="N y A de Alumnos" />
            </form>
            
            <form name="documentos" method="post" enctype="text/plain" onSubmit="mostrarDocumentos(this)">
                <input type="submit" value="DNI de alumnos" />
            </form>
        {/if}
    </body>
</html>
Ahora les explico todo en conjunto como funciona. Al ejecutar dos.php por primera vez, se ejecuta dos.tpl a traves del else, el cual permite elegir entre dos opciones de un select, y luego, al apretar uno de entre dos botones, mostrara una tabla con alumnos de la carrera elegida, y con el "nombre" o el "documento" de cada uno de los alumnos, dependiendo que boton hayamos seleccionado. El problema que tengo con este codigo, es que, una vez que el "dos.tpl" entra por el if, el foreach no funciona correctamente, ya que no imprime los datos, la pagina se muestra hasta esta parte del codigo:
Código:
<tr class="encabezado"> 
     <th>DNI o NOMBRE de los alumnos:</th>                            
</tr>
Y se detiene ahi. Es decir, no solo no imprime la informacion que deberia imprimir en pantalla el foreach, sino que tambien se detiene el procesamiento de la pagina, por lo que etiquetas "</body>" y "</html>" tampoco son mostradas...
¿Alguna idea?

PD: La verdad que no estaba seguro si este tema iba aca, o en la parte de html y javascript, asi que pido perdon si me equivoque de lugar.
__________________
El sabio no dice todo lo que piensa, pero piensa todo lo que dice...
Responder Con Cita
  #2  
Antiguo 10-01-2008
Avatar de lucasarts_18
lucasarts_18 lucasarts_18 is offline
Miembro
 
Registrado: mar 2005
Ubicación: Villa Alemana,Chile
Posts: 1.087
Poder: 21
lucasarts_18 Va por buen camino
Hola:

Pueden ser varios factores, probaste con imprimir el arreglo en pantalla, para descartar problemas con el php, en caso de mostrar datos el arreglo revisa si cargas bien los datos en el tpl, es decir los arreglos de php y las variables para smarty deben tener el mismo nombre, otra cosa, revisa si los campos vienen en mayusculas o minusculas o ambas, deben ser escritas de la misma forma en el template.

Bueno no sé que más decir, intenta probar mas alternativas.

Hasta Luego .-
__________________
No todo es como parece ser...
Responder Con Cita
  #3  
Antiguo 20-01-2008
Chompiras Chompiras is offline
Miembro
 
Registrado: ene 2006
Ubicación: La plata, Argentina
Posts: 37
Poder: 0
Chompiras Va por buen camino
Tarde pero seguro.

Perdón por la demora y gracias por tu respuesta.
Respecto a lo que me decís, lo de los nombres que tienen que ser iguales tanto en php como en smarty eso no creo que sea.
Después, la verdad que no probé imprimir el arreglo en pantalla, ya que yo para cargar un arreglo "a", hago un simple:
Código PHP:
a[] = 
y no estoy seguro en que posición queda guardado ese dato. Lo que si probé, es imprimir los datos antes de guardarlos en el arreglo ( ya que como use una bd access, tenia miedo que me llegara a guardar cosas en blanco o algo por el estilo). Y los datos se imprimen bien de esta manera.

Así que no se la verdad, seguiré probando a ver si encuentro el error.
__________________
El sabio no dice todo lo que piensa, pero piensa todo lo que dice...
Responder Con Cita
  #4  
Antiguo 20-01-2008
Avatar de lucasarts_18
lucasarts_18 lucasarts_18 is offline
Miembro
 
Registrado: mar 2005
Ubicación: Villa Alemana,Chile
Posts: 1.087
Poder: 21
lucasarts_18 Va por buen camino
Hola:

Insisto nuevamente en imprimir la variable resultados por pantalla.

Código PHP:
echo '<pre>'print_r($resultados); echo '</pre>'
Luego de eso hay que ver que está pasando.


Hasta Luego .-
__________________
No todo es como parece ser...

Última edición por lucasarts_18 fecha: 21-01-2008 a las 14:26:16.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
problemas con consulta SQL meter a la base de datos memehua SQL 15 07-03-2007 15:06:22
base de datos access en Red Nbull Conexión con bases de datos 5 13-01-2006 12:31:49
Problemas con Tquery y base de Access!!! JELIRM SQL 3 21-07-2005 23:21:39
tratar Error de conexion a base de datos Dayvis Varios 1 06-04-2005 09:53:09
Problemas al conectar una tabla ADO a una base de datos de Access que posee contraseñ Roger_Fernandez Conexión con bases de datos 5 28-02-2005 16:46:29


La franja horaria es GMT +2. Ahora son las 14:32:48.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi