Salve a tutti,
non mi ritengo un gran programmatore, ma solitamente riesco sempre a cavarmela con l'aiuto di Google e un pizzico di intuizione, ma da due giorni mi trovo davanti ad un problema di cui non riesco ad afferrare la vera natura.
Ho strutturato un sito in modo che ci siano due classi che contengono tutti i metodi necessari all'amministrazione dei contenuti visuali (immagini) e di testo del mio sito, e del loro passaggio fra database e pagina. La parte grafica usa queste classi per recepire i dati, mentre queste due classi si appoggiano ad una classe che ho scritto per gestire il mero collegamento con mysql.
Il problema che sto riscontrando quando vado a cercare di eseguire le pagine è il seguente:
Fatal error: Call to a member function query() on a non-object in [..]monicacecchin/data/class/tele.php on line 155
normalmente cercherei di capire perchè php è convinto che l'oggetto che gli passo non sia effettivamente un oggetto, ma essendo una variabile dichiarata all'inizio della classe, che usano altri metodi prima della riga 155 mi domando: cosa c'è di diverso?
Mi da lo stesso errore in entrambe le classi, e non riesco a capire il perchè.
Nel caso della classe teleTesti (in basso) lo stesso paramentro è utilizzato in dunzioni diverse, ma è nella seconda funzione a generare errore. (param: $dbLink)
Allego codice della classe mysql e di quella più breve delle due, vi ringrazio immensamente per il tempo che dedicherete e per le risposte che mi darete! grazie ancora!
Gino
Codice PHP:
class MysqlClass
{
//Parametri per la connessione al database
private $nomehost;
private $nomeuser;
private $password;
private $nomedb;
private $mysqli;
//variabile di controllo delle connessioni attive
private $attiva;
private $arry;
public function __construct()
{
$attiva = false;
$nomehost = $GLOBALS['host'];
$nomeuser = $GLOBALS['user'];
$password = $GLOBALS['pswd'];
$nomedb = $GLOBALS['db'];
$mysqli = new mysqli($nomehost, $nomeuser, $password, $nomedb);
$this->connetti();
}
//funzione di connessione
private function connetti()
{
if (mysqli_connect_errno()) {
// notifica in caso di errore
echo "Errore in connessione al DBMS: ".mysqli_connect_error();
// interruzione delle esecuzioni i caso di errore
exit();
}
return $this->attiva;
}
//funzione di disconnessione
public function disconnetti()
{
if($this->attiva)
{
if($mysqli->close())
{
$this->attiva = false;
return true;
}
}
return false;
}
//Passaggio della variabile di connessione
public function var_con()
{
if($this->attiva)
{
return $connessione;
}
return false;
}
public function fetch()
{
$result = $this->arry->fetch_array(MySQL_BOTH);
return $result;
}
//funzione query
public function query($query, $fetch)
{
$this->arry = $mysqli->query($query) or die("Error: q: ".$query." \./ ".$mysqli->sqlstate);
if($fetch)
{
$result=$this->fetch();
return $result;
}
return false;
}
}
Codice PHP:
class teleTesti
{
private $dbLink;
private $data;
public function __construct()
{
$dbLink = new MysqlClass();
}
public function editTesti($id, $section, $lang, $text)
{
$dbLink->query("UPDATE tele SET $lang=$text WHERE section=$section LIMIT 1", false);
return true;
}
public function listTesti($section, $language)
{
$data=$dbLink->query("SELECT $language FROM testi WHERE section='$section' LIMIT 1",true);
return $data;
}
public function addLang($lang)
{
$dbLink->query("ALTER TABLE `testi` ADD `$lang` TEXT NOT NULL");
}
}