Tabella dinamica con php

sonico81

Nuovo Utente
13 Apr 2012
3
0
0
Salve a tutti, sto cercando di creare una tabella dinamica (in colonne) con php e mysql
Ho diverse query, e array contenenti le info da visualizzare:

Query_1 = SELECT Id, Nome, Cognome, Indirizzo FROM User
Campi_1 = array('Id', 'Nome', 'Cognome', 'Indirizzo')

Query_2 = SELECT Id, Libro, Titolo, Autore, Pagine, CasaEditrice FROM Biblioteca
Campi_2 = array ('Id', 'Libro', 'Titolo', 'Autore', 'Pagine', 'CasaEditrice')

Query_3 = SELECT Id, Città, Codice FROM City
Campi_3 = array('Id','Città','Codice')

e quello che tento di fare è che in base alla query e ai campi di creare una tabella dinamica in righe e colonne. Se ad esempio seleziono il gruppo _1 io avrò n righe e 4 colonne; se seleziono il gruppo _2 avrò n righe e 6 colonne, per il gruppo _3 avrò n righe e 3 colonne

quello che cerco di fare è:
PHP:
$data = new MysqlClass(); 
$data->connetti(); 
$post_sql = $data->query($Query);

<table> 
while($post_obj = $data->estrai($post_sql)){  
echo "<tr>";  
foreach($Campi as $Campo) {   
echo "<TD>".$post_obj->$Campo."</TD>"; 
echo "</tr>";   
}  
</table>

Non ho messaggi di errori, ma non viene eseguita la riga:
PHP:
 echo "<TD>".$post_obj->$Campo."</TD>";

la mia classe MysqlClass:
PHP:
class MysqlClass
{
  // parametri per la connessione al database
  private $nomehost = "localhost";     
  private $nomeuser = "root";          
  private $password = "root"; 
  private $nomedb = "database";
          
  // controllo sulle connessioni attive
  private $attiva = false;
 
// funzione per la connessione a MySQL
  public function connetti()
  {
   if(!$this->attiva)
    {
     if ($connessione = mysql_connect($this->nomehost,$this->nomeuser,$this->password) or die (mysql_error()))
      {
       // selezione del database
       $selezione = mysql_select_db($this->nomedb,$connessione) or die (mysql_error());
      }
    }
   else
    {
     return true;
    }
  }
    

//funzione per l'esecuzione delle query 
  public function query($sql)
  {
   if(isset($this->attiva))
    {
     $sql = mysql_query($sql) or die (mysql_error());
  	 return $sql;
    } 
   else 
    {
   	 return false; 
  	}
  }


//funzione per la disconnessione
  public function disconnetti()
  {
   if($this->attiva)
    {
     if(mysql_close())
      {
       $this->attiva = false; 
       return true; 
      } 
     else
      {
       return false; 
      }
    }
  }  
  
//funzione per l'estrazione dei dati
  public function estrai($risultato)
  {
   if(isset($this->attiva))
    {
	 $r = mysql_fetch_object($risultato);
     return $r;
    }
   else
    {
     return false; 
    }
  }

}    
?>

Mi potreste aiutare, Grazie
 
Nella prima parte del messaggio indicavo che mi trovo nella situazione in cui ho diverse query differenti tra loro a cui e' associato un array contenente i campi da visualizzare. Query (_1) bla bla bla, Campi (_1) bla bla bla, Query (_2) bla bla bla, Campi (_2) bla bla. Con precedenti passaggi prelevo la Query e l'array di interesse e cerco di creare la tabella a seconda dei campi. Nel mess ho omesso <table> ... </table> ma ovvio che ho una pagina completa di tutti i tag. Il problema rimane nella riga:
echo "<td>".$post_obj->$campo."</td>";
Mi scuso per eventuali errori ma digito da un telefono!

Grazie!
 
Nella prima parte del messaggio indicavo che mi trovo nella situazione in cui ho diverse query differenti tra loro a cui e' associato un array contenente i campi da visualizzare. Query (_1) bla bla bla, Campi (_1) bla bla bla, Query (_2) bla bla bla, Campi (_2) bla bla. Con precedenti passaggi prelevo la Query e l'array di interesse e cerco di creare la tabella a seconda dei campi. Nel mess ho omesso <table> ... </table> ma ovvio che ho una pagina completa di tutti i tag. Il problema rimane nella riga:
echo "<td>".$post_obj->$campo."</td>";
Mi scuso per eventuali errori ma digito da un telefono!

Grazie!
La classe del mysql ha molte cose superflue e migliorabili comunque essendo un fetch_object dovresti fare cosi

PHP:
echo "<TD>".$post_obj->Camposql."</TD>";
senza $ essendo un oggetto instanziato
 
Mettendo $post_obj->CampoSql preclude che io conosca dall'inizio i campi SQL cosa che invece ho salvato in un array, pensavo di far fare tutto in automatico al foreach. Invece io cambio sia Query che campi, a seconda delle funzioni precedentemente eseguite.
Mi viene da pensare che debba modificare la classe MySqlClass, ma non so come.
 
Mettendo $post_obj->CampoSql preclude che io conosca dall'inizio i campi SQL cosa che invece ho salvato in un array, pensavo di far fare tutto in automatico al foreach. Invece io cambio sia Query che campi, a seconda delle funzioni precedentemente eseguite.
Mi viene da pensare che debba modificare la classe MySqlClass, ma non so come.
Essendo un oggetto in ogni caso deve essere richiamato come istanza e no come variabile comunque
dove dichiari $Campi?
 
Ultima modifica:
ciao
non ho molta esperienze sull'uso delle classi (mi sono antipatiche) quindi perdonerete la mia put....ta quotidiana.
ma non potrebbe essere così?
PHP:
echo "<TD>".$post_obj->Camposql=$Campo."</TD>"
una risposta (anche offensiva) servirebbe anche a me per chiarirmi le idee
 
ciao
non ho molta esperienze sull'uso delle classi (mi sono antipatiche) quindi perdonerete la mia put....ta quotidiana.
ma non potrebbe essere così?
PHP:
echo "<TD>".$post_obj->Camposql=$Campo."</TD>"
una risposta (anche offensiva) servirebbe anche a me per chiarirmi le idee
No, tranquillo se non sai una cosa basta chiedere, $post_obj essendo un oggetto
richiama solo istanze di esso quindi questa "Camposql=$Campo" verrebbe considerata come un unica
istanza senza valore o errata, la soluzione migliore in questo caso sarebbe usare un fetch_array al posto dell'object
e fare una cosa simile:

PHP:
foreach($campi as $campo) echo $post_array[$campo];
 
ciao
grazie, ma se cambiassi nella classe
$r = mysql_fetch_object($risultato);
in
$r = mysql_fetch_array($risultato);
o
$r = mysql_fetch_assoc($risultato);
?
 

Discussioni simili