Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

MiniSistema de encuesta en POO y sqlite

Estas en el tema de MiniSistema de encuesta en POO y sqlite en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola, en mi practica diaria me tope con un minisistema de encuesta, lo que hize fue lo siguiente: escribi una clase que hace la conexion ...
  #1 (permalink)  
Antiguo 02/08/2008, 15:37
 
Fecha de Ingreso: julio-2008
Ubicación: Maldonado
Mensajes: 27
Antigüedad: 15 años, 9 meses
Puntos: 0
Mensaje MiniSistema de encuesta en POO y sqlite

Hola, en mi practica diaria me tope con un minisistema de encuesta, lo que hize fue lo siguiente:
escribi una clase que hace la conexion y consultas a la DB en sqlite.
Código PHP:
<?php
class ServidorBaseDatos
{
    private 
$_baseDatos;
    private 
$_descriptor;
    private 
$_resultado;

    function 
__construct($_baseDatos)
    {
        
$this->servidor $servidor;
        
$this->usuario $usuario;
        
$this->pass $pass;
        
$this->_baseDatos $_baseDatos;
        
$this->conectarBaseDatos();
    }
    public function 
conectarBaseDatos()
    {
        
$this->_descriptor sqlite_open($this->_baseDatos);

    }
    public function 
consulta($consulta)
    {
        
$this->_resultado sqlite_query($consulta$this->_descriptor);

    }
    public function 
extraerRegistro()
    {
        if (
$fila sqlite_fetch_array($this->_resultadoSQLITE_ASSOC)){
            return 
$fila;
        }else{
            return 
false;
        }
    }
}
?>
A partir de ahi lo que hize fue crear un script para que me construyera la tabla con sus campos:
Código PHP:
<?php
require_once('connectSQLite.class.php');
$baseDatos = new ServidorBaseDatos('votaciones.db');
$baseDatos->consulta('create table lenguaje (id_lenguaje INT PRIMARY KEY, lenguaje CHAR(255), votos INT)');
$baseDatos->consulta('insert into lenguaje (lenguaje, votos) values ("PHP", 0)');
$baseDatos->consulta('insert into lenguaje (lenguaje, votos) values ("JSP", 0)');
$baseDatos->consulta('insert into lenguaje (lenguaje, votos) values ("ASP", 0)');
$baseDatos->consulta('insert into lenguaje (lenguaje, votos) values ("COLD FUSION", 0)');

$baseDatos->consulta('select * from lenguaje');

while (
$fila $baseDatos->extraerRegistro()){
    echo 
$fila["lenguaje"].": ".$fila["votos"].'<br>';
}

?>
Hasta aqui voy bien, ahora tengo el formulario para el ingreso de nuevos votos y el estado de la cantidad de votos
Código PHP:
<?php
require_once('connectSQLite.class.php');
//Primero comprobamos si tenemos un voto'
$baseDatos = new ServidorBaseDatos('votaciones.db');
//Si hemos votado sumamos el valor al numero de votos almacenado.
if (isset($_POST['voto'])){
    
$voto $_POST['voto'];
    
$baseDatos->consulta('select votos from lenguaje where id_lenguaje = '.$voto);
    
$numeroVotos $baseDatos->extraerRegistro();
    
$numeroVotos $numeroVotos['votos'];
    
$numeroVotos++;
    
$baseDatos->consulta('update lenguaje set votos="$numeroVotos" where id_lenguaje = "$voto"');
}    
?>
<html>
<body>
Que lenguaje de programacion prefieres?
<!--Formulario que permite votar -->
<form action = '<?= $PHP_SELF ?>' method = 'post'>
<select name = 'voto'>
<?php
$baseDatos
->consulta('select * from lenguaje');
while (
$fila $baseDatos->extraerRegistro()){
    
$id_lenguaje $fila['id_lenguaje'];
    
$lenguaje $fila['lenguaje'];
    echo 
"<option value=\"$id_lenguaje\">$lenguaje</option>";
}
?>
</select>
<input type="submit" name="Enviar" value="Enviar">
</form>
<table>
<?php
$baseDatos
->consulta('select * from lenguaje');
while (
$fila $baseDatos->extraerRegistro()){
    
$lenguaje $fila['lenguaje'];
    
$votos $fila['votos'];
    echo 
'<tr><td>'.$lenguaje.'</td><td>'.$votos.'votos</td></tr>';
}
?>
</table>
</body>
</html>
El problema esta cuando envio un voto, me salen los errores:
Warning: sqlite_query() [function.sqlite-query]: near " ": syntax error in /opt/lampp/htdocs/practicas/graficos/connectSQLite.class.php on line 23

Warning: sqlite_fetch_array() expects parameter 1 to be resource, boolean given in /opt/lampp/htdocs/practicas/graficos/connectSQLite.class.php on line 28

Warning: sqlite_query() [function.sqlite-query]: attempt to write a readonly database in /opt/lampp/htdocs/practicas/graficos/connectSQLite.class.php on line 23


Sinceramente no encuentro donde me estoy equivocando, podria ser que la clase este mal construida?

Saludos y gracias
  #2 (permalink)  
Antiguo 03/08/2008, 14:16
Avatar de Genetix  
Fecha de Ingreso: febrero-2002
Ubicación: Lima - Perú
Mensajes: 1.600
Antigüedad: 22 años, 2 meses
Puntos: 45
Respuesta: MiniSistema de encuesta en POO y sqlite

creo q tu problema esta aqui
Código PHP:
 $baseDatos->consulta('update lenguaje set votos="$numeroVotos" where id_lenguaje = "$voto"'); 
prueba con
Código PHP:
 $baseDatos->consulta('update lenguaje set votos="'.$numeroVotos" where id_lenguaje = ".$voto); 
__________________
"El conocimiento nos hace responsables."
twitter: @benjamingb
blog personal: http://codigolinea.com
ZF Manual en español http://manual.zfdes.com
  #3 (permalink)  
Antiguo 03/08/2008, 21:15
 
Fecha de Ingreso: julio-2008
Ubicación: Maldonado
Mensajes: 27
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: MiniSistema de encuesta en POO y sqlite

Hola genetix, gracias por responderme ,hize las correciones en esa linea pero todavia siguen los errores, estos aparecen cuando envio la consulta a la DB.

Saludos!
  #4 (permalink)  
Antiguo 04/08/2008, 07:51
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: MiniSistema de encuesta en POO y sqlite

Tu problema son las comillas, intenta esto:
Código PHP:
 $baseDatos->consulta('update lenguaje set votos="'.$numeroVotos"' where id_lenguaje = '".$voto."'"); 
Saludos.
  #5 (permalink)  
Antiguo 04/08/2008, 20:12
 
Fecha de Ingreso: julio-2008
Ubicación: Maldonado
Mensajes: 27
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: MiniSistema de encuesta en POO y sqlite

Gracias Genetix y GatorV,
Esta solucionado, el corazon del problema estaba en la construccion de la base de datos.
Al ver el codigo html devuelto por PHP (script encuesta.php) note que el atributo "value" de la lista de seleccion estaba vacio, para mandar un voto a la base de datos se usa el valor id_lenguaje como "puntero" de esta forma se asigna exactamente al registro correspondiente.

¿Pero entonces porque id_lenguaje estaba vacio?
Respuesta: Al construir la base de datos en sqlite, la sintaxis del DDL difiere un poco, simplemente bastaba sustituir INT por INTEGER en la linea 4 del script sql.php.

Asi que ya saben, a no escatimar!!!

Gracias nuevamente
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 10:00.