Ciao a tutti,
prendendo spunto da un utilissimo articolo di php.html.it ho cominciato ad utilizzare le classi e gli oggetti per la gestione del mio DB.
Il login funziona correttamente.
Mi da problemi invece quando gli chiedo di farmi una query più complessa.
In pratica devo fare l'elenco di alcuni record e dopo avermi visualizzato il primo record mi viene fuori:
codice:
Fatal error</b>: Call to a member function estrai() on a non-object in
Il mio file che gestisce il db è il seguente:
codice:
class MysqlClass {
// variabili per la connessione al database
public $nomehost = "localhost";
public $nomeuser = "root";
public $password = "";
public $nomedb = "intranet";
// controllo sulle connessioni attive
public $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 = 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 l'inserimento dei dati in tabella
public function inserisci($t, $v, $r = null) {
if (isset($this->attiva)) {
$istruzione = 'INSERT INTO ' . $t;
if ($r != null) {
$istruzione .= ' (' . $r . ')';
}
for ($i = 0; $i < count($v); $i++) {
if (is_string($v[$i]))
$v[$i] = '"' . $v[$i] . '"';
}
$v = implode(',', $v);
$istruzione .= ' VALUES (' . $v . ')';
$query = mysql_query($istruzione) or die(mysql_error());
}else {
return false;
}
}
//funzione per l'estrazione dei record
public function estrai($risultato) {
if (isset($this->attiva)) {
$r = mysql_fetch_object($risultato);
return $r;
} else {
return false;
}
}
// funzione per la chiusura della connessione
public function disconnetti() {
if ($this->attiva) {
if (mysql_close()) {
$this->attiva = false;
return true;
} else {
return false;
}
}
}
}
Poi ho una mia pagina così composto dove richiamo il file sopra citato e istanzio la classe:
codice:
<?phpsession_start();
// inclusione del file di classe
include "funzioni_mysql.php";
// istanza della classe
$data = new MysqlClass();
global $data;
?>
..... CODICE HTML .....
<?php
$data->connetti();
$querySql = "SELECT richiestaintervento.titolo AS titolo, "
. "richiestaintervento.aperto AS aperto, "
. "richiestaintervento.rapportino AS rapportino, "
. "richiestaintervento.utenteRichiedente, "
. "richiestaintervento.dataApertura AS data, "
. "richiestaintervento.tipologia, "
. "tipologia.descrizione AS tipologia, "
. "luogo.descrizione AS luogo "
. "FROM "
. "richiestaintervento "
. "INNER JOIN "
. "tipologia "
. "ON "
. "richiestaintervento.tipologia = tipologia.id "
. "INNER JOIN "
. "luogo "
. "ON "
. "richiestaintervento.luogo = luogo.id "
. "WHERE "
. "richiestaintervento.tipologia = "
. "(SELECT utentitipologia.tipologia FROM utentitipologia "
. "WHERE username = '" . $_SESSION['login'] . "') "
. "AND richiestaintervento.aperto=0 "
. "ORDER BY richiestaIntervento.dataApertura DESC";
$sql_cerca = $data->query($querySql);
$trovati = mysql_num_rows($sql_cerca);
if ($trovati > 0) {
while ($cerca_obj = $data->estrai($sql_cerca)) {
$data = $cerca_obj->data;
$tipologia = stripslashes($cerca_obj->tipologia);
$luogo = stripslashes($cerca_obj->luogo);
$motivo = stripslashes($cerca_obj->titolo);
// visualizzazione dei dati
echo "<tr>\n";
echo "<th>" . $data . "</th>\n";
echo "<th>" . $tipologia . "</th>\n";
echo "<th>" . $luogo . "</th>\n";
echo "<th>" . $motivo . "</th>\n";
echo "</tr>";
}
}
// disconnessione
$data->disconnetti();
?>
Grazie mille.