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 Temas de Hoy

 
 
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
 



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 01:59:07.


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