Ver Mensaje Individual
  #1 (permalink)  
Antiguo 24/10/2009, 11:28
krate1
 
Fecha de Ingreso: octubre-2009
Mensajes: 2
Antigüedad: 14 años, 6 meses
Puntos: 0
Ayuda: Clase scaffold para sqlite2

Ando aún con el cambio de programar en C++ a PHP, para coger experiencia estoy creando una clase para interactuar con una base de datos Sqlite 2 (sin usar PDO), pero me he encontrado con algunas preguntas/problemas.

Esta es la clase:

Código PHP:
<?php
class crudSqlite
{
    private 
$table;
    private 
$database "users.db";
    private 
$db;

    public function 
__construct(){
        
$this->db sqlite_open($this->database);
    }
    
    public function 
listTable($tb){
        
$this->table $tb;
        
$cols sqlite_fetch_column_types($this->db$this->tableSQLITE_ASSOC);
        echo 
'<table><thead><tr>';
            foreach (
$cols as $column => $type) {
            echo 
'<th>' $column ' ' $type '</th>';
            }
        echo 
'</tr></thead>';
        echo 
'<tbody>';
        
$result sqlite_query($this->db,"SELECT * FROM ".$this->table."");
        while(
$row sqlite_fetch_array($result)){
            echo 
'<tr>';
            for(
$i=0;$i sqlite_num_fields($result);$i++){
                echo 
'<td>' $row[$i] . '</td>';
            }
            echo 
'</tr>';
            }
        echo 
'</body></table>';
   }

   public function 
deleteRow($del){
       
$result sqlite_query($this->db,"DELETE FROM " .$this->table." WHERE id=" $del "");
   }

   public function 
insertRow(){
        if (isset(
$_POST[submit])){
            
$cols sqlite_fetch_column_types($this->table$this->dbSQLITE_ASSOC);
            
$i=0;
            foreach (
$cols as $column =>$type) {
                
$col[$i] = $column;
                
$pos[$i] = sqlite_escape_string($_POST[$column]);
                
$i++;
            }
            
$col '(' implode(' , '$col) . ')';
            
$pos '("' implode('", "'$pos) . '")';
            
$sql "INSERT INTO " $this->table " " $col.' VALUES '.$pos;
            echo 
$sql;
            
$result sqlite_query($this->db,$sql);
        }
        else
        {
        
$cols sqlite_fetch_column_types($this->table$this->dbSQLITE_ASSOC);
        echo 
'<form action = "" method="post">';
        foreach (
$cols as $column => $type) {
            echo 
'<h2>' $column '</h2>';
            switch (
$type) {
                case 
"INTEGER":
                echo 
"<input name=" $column "></input>";
                break;

                case 
"REAL":
                echo 
"<input name=" $column "></input>";
                break;

                case 
"TEXT":
                echo 
"<textarea name=" $column "></textarea>";
                break;

                case 
"BLOB":
                echo 
"<textarea name=" $column "></textarea>";
                break;


                case 
"CHAR":
                echo 
"<input name=" $column " type='text' ></input>";
                break;
           }
        }
           echo 
'<input type="submit" name="submit" value="Add"></button></form>';
      
       }
   }   
}
?>
y este seria el index.php
Código PHP:
<?php
    
require_once("crud.sql.php");
    
$sqldb = new crudSqlite();
    
$sqldb->listTable("users");
    
$sqldb->insertRow();
?>
Dudas/Problemas:

1. La función insertRow() hace lo que le pido, lista automáticamente una tabla que le metes por parámetro. Lo siguiente que quiero hacer para esta función, es añadir unos enlaces en cada fila que lista. Estos enlaces serian editar y borrar. Esta parte es fácil, pero lo que no se como hacer es que haga una llamada a $this->deleteRow(); al hacer click en el enlace de borrar. Esto se complica porque lo quiero hacer sin tener que llamar a un archivo .php externo, ni por medio de javascript. ¿Es esto posible?

2. Tengo un problema con la funcion insertRow() en el momento que detecto el tipo de dato que es cada columna de la tabla. Me explico, al usar la función sqlite_fetch_column_types(), me he encontrado con que me devuelve INTEGER(valor) o CHAR(valor) en vez de INTEGER, CHAR que seria fácil de analizar. El caso es que al analizar esta información para devolver un textarea o input... dependiendo del tipo de dato que se vaya a insertar, me crea problemas. ¿como haría para poder analizar correctamente esta información?

Muchas gracias por adelantado