[risolto] Undefined variable: in programmazione oop

luigi777

Utente Attivo
14 Feb 2008
1.086
1
38
42
Massa, Italy
salve, ho questo classe che sto facendo ma non riesco a capire perché mi da errore:
PHP:
connessione effetuata
Notice: Undefined variable: db in /media/dati/www/prove/database.php on line 13

Fatal error: Call to a member function query() on a non-object in /media/dati/www/prove/database.php on line 13

il codice della query è cosi:
PHP:
//query sulla tabella 
 function Query($sql){
	  $return_sql = $db->query($sql) or die($db->error);
	  return $return_sql;
  }

e il codice che sto provando è cosi:
PHP:
<?php
ini_set('error_reporting', E_ALL);
ini_set("display_errors", 1);
include_once("database.php");

$db=new Database();
$db->connect("localhost","root","root","myDatabase");
echo "connessione effetuata";	
$sql ="INSERT INTO Uscite (importo)values('1.200,30');";
$db->Query($sql);
?>

come posso risolvere il problema ?

grazie mille e buona giornata.
 

Nefyt

Utente Attivo
17 Apr 2012
1.102
0
0
$db da dove lo prendi? Per caso è una proprietà della classe? Se si devi utilizzare $this
PHP:
$this->db->query($sql) or die($this->db->error);

Sennò utilizza global (anche se è concettualmente scorretto)
PHP:
global $db;
 

luigi777

Utente Attivo
14 Feb 2008
1.086
1
38
42
Massa, Italy
ciao la classe e questa:
PHP:
<?PHP
class Database {
	
  var $db;
	
//connessione al DBMS
 function Connect($db_host, $db_utente, $db_password, $db_nomedb){
	$db = new mysqli($db_host, $db_utente, $db_password, $db_nomedb);
  }

//query sulla tabella 
 function Query($sql){
	  $return_sql = $this->db->query($sql) or die($this->db->error);
	  return $return_sql;
  }

//estrazione di un record
 function FetchRow($sql){
	  $rows = $db->fetch_assoc($sql);
	  return $rows;
  }

//conteggio dei records
 function FetchNum($sql){
	  $num = $db->num_rows($sql);
	  return $num;
  }

//estrazione dei records  
  function FetchArray($sql){
	  $array = $db->fetch_array($sql);
	  return $array;
  }

//chiusura della connessione
 function Close(){
	$db->close;
  }
}
?>

mi aiuti a vedere come mai non funziona?

ti ringrazio molto.

buona giornata
 

luigi777

Utente Attivo
14 Feb 2008
1.086
1
38
42
Massa, Italy
ora mi dice cosi:
Fatal error: Call to a member function query() on a non-object in /media/dati/www/prove/database.php on line 13
 

Nefyt

Utente Attivo
17 Apr 2012
1.102
0
0
PHP:
class Database {

    var $db;

//connessione al DBMS 
    function Connect($db_host, $db_utente, $db_password, $db_nomedb){
        $this->db = new mysqli($db_host, $db_utente, $db_password, $db_nomedb);
    }

//query sulla tabella  
    function Query($sql){
        $return_sql = $this->db->query($sql) or die($this->db->error);
        return $return_sql;
    }

//estrazione di un record 
    function FetchRow($sql){
        $rows = $this->db->fetch_assoc($sql);
        return $rows;
    }

//conteggio dei records 
    function FetchNum($sql){
        $num = $this->db->num_rows($sql);
        return $num;
    }

//estrazione dei records   
    function FetchArray($sql){
        $array = $this->db->fetch_array($sql);
        return $array;
    }

//chiusura della connessione 
    function Close(){
        $this->db->close();
    }
}

Per connettere sarebbe più ideale utilizzare __construct()
 

luigi777

Utente Attivo
14 Feb 2008
1.086
1
38
42
Massa, Italy
ho un'altro problema.. il select fetch array

io ho fatto cosi nella index.php
PHP:
$data = $db->Query("SELECT * FROM Uscite; ");

while($f = $data->FetchArray($sql))
{
	echo "".$f["importo"]."";
}

$db->close();

ma mi da:
Fatal error: Call to undefined method mysqli_result::FetchArray() in /media/dati/www/prove/index.php on line 13
che vuol dire?

grazie mille
 

Nefyt

Utente Attivo
17 Apr 2012
1.102
0
0
__construct() serve per inizializzare la classe, puoi semplicemente mettere i parametri di connect li e connettere

L'altro errore vuol dire quello che c'è scritto, cioè che FetchArray non esiste perché Query() ritorna il risultato di una query mysqli e non la stessa classe, quindi semmai dovresti chiamare fetch_array()
 

luigi777

Utente Attivo
14 Feb 2008
1.086
1
38
42
Massa, Italy
__construct() serve per inizializzare la classe, puoi semplicemente mettere i parametri di connect li e connettere

L'altro errore vuol dire quello che c'è scritto, cioè che FetchArray non esiste perché Query() ritorna il risultato di una query mysqli e non la stessa classe, quindi semmai dovresti chiamare fetch_array()

ok, ti ringrazio e ho capito..

per l'array come faccio fare una funzione che posso fare un'if che posso usare assoc e l'altro if posso usare array,
e usarlo come ti ho scritto prima..

mi protesti aiutarmi a creare questa funzione con gli if ?

grazie mille. saluti.
 

flameseeker

Utente Attivo
27 Nov 2013
699
0
0
PHP:
    //query sulla tabella  
    function Query($sql){
        $return_sql = $this->db->query($sql) or die($this->db->error);
        return $return_sql;
    }

Quel modo di catturare gli errori va semplicemente contro tutto il senso di usare una classe per il tuo layer di astrazione.
Ti consiglierei di dire a mysqli di tornare gli errori come eccezioni tramite il report_mode, così che tu possa usare il paradigma try/catch nei tuoi script per gestirli
 

luigi777

Utente Attivo
14 Feb 2008
1.086
1
38
42
Massa, Italy
PHP:
    //query sulla tabella  
    function Query($sql){
        $return_sql = $this->db->query($sql) or die($this->db->error);
        return $return_sql;
    }

Quel modo di catturare gli errori va semplicemente contro tutto il senso di usare una classe per il tuo layer di astrazione.
Ti consiglierei di dire a mysqli di tornare gli errori come eccezioni tramite il report_mode, così che tu possa usare il paradigma try/catch nei tuoi script per gestirli

ho fatto cosi come mi hai detto:
PHP:
function Query($sql){
		try {
        $return_sql = $this->db->query($sql);
        return $return_sql;
		} 
		catch (mysqli_sql_exception $e) {
          echo $e->__toString();
       }
    }

e nella index di prova ho messo cosi:
PHP:
<?php
ini_set('error_reporting', E_ALL);
ini_set("display_errors", 1);
include_once("database.php");
$db=new Database();
$db->connect("localhost","root","root","myDatabase");
echo "connessione effetuata";	
$sql ="INSERT INTO Uscite (importo)values('2,30')+;";
$db->Query($sql);
$db->close();
?>

non dovrebbe darmi un errore di sintassi perché ci ho messo il + in fondo alla query?

grazie mille e buona giornata e grazie a tutti per gli aiuti.

vi ringrazio molto.
 

flameseeker

Utente Attivo
27 Nov 2013
699
0
0
Nel costruttore della tua classe, dopo aver creato la connessione con mysqli devi comunicare al driver di notificare gli errori sottoforma di eccezioni, così:
PHP:
/* activate reporting */
$driver = new mysqli_driver();
$driver->report_mode = MYSQLI_REPORT_STRICT;

A questo punto il try/catch dovrebbe segnalarti l'errore nella query.
 

luigi777

Utente Attivo
14 Feb 2008
1.086
1
38
42
Massa, Italy
riuscito e grazie mille. ecco il codice se gli serve a qualcun altro.

PHP:
function __construct($db_host, $db_utente, $db_password, $db_nomedb){
		/* activate reporting */
		$driver = new mysqli_driver();
		$driver->report_mode = MYSQLI_REPORT_ALL; 
        $this->db = new mysqli($db_host, $db_utente, $db_password, $db_nomedb);
    }

in questo modo me lo segnala.
ti ringrazio molto.
 
Discussioni simili
Autore Titolo Forum Risposte Data
elpirata [PHP][RISOLTO] Errore di tipo Notice: Undefined index - Come risolvere quando si hanno tante var PHP 10
M [RISOLTO] jQuery non funziona... valore "undefined" jQuery 2
L (risolto) MySQL 0
B getElementById su piu id(Risolto) Javascript 7
L Esercitarsi con Js [RISOLTO] Javascript 4
C [RISOLTO]Inserimento variabile php in input html PHP 20
L risolto visualizzazione e ordinamento dati PHP 1
moustache [RISOLTO] SQL PHP IIS PHP 8
Sergio Unia Ricezione email con destinatari multipli [Risolto] PHP 2
L update tabelle in php mysql [risolto] PHP 6
M Semplice visualizzatore di immagini [risolto con plugin wp] PHP 7
L [RISOLTO] Stampa a video risultato count in html PHP 13
L [RISOLTO] Eliminare una discussione creata PHP 3
tomorc [HTML] Problema con scroll bar (risolto) HTML e CSS 0
A [PHP] Problema query insert [RISOLTO] PHP 14
B [PHP] recuperare IP dei server in load balancing [RISOLTO] PHP 3
K [RISOLTO] Problema Griglia Php+Mysql PHP 13
S [RISOLTO] aggiorna tabella da select option asp classic Classic ASP 7
elpirata [RISOLTO][Javascript] Datapicker e autocompletamento campo input Javascript 2
elpirata [RISOLTO][Mysql] Problema insert valori apostrofati MySQL 1
elpirata [RISOLTO][Mysql] Contare le occorrenze in un campo tipo varchar MySQL 2
G [MS Access] Gestione biglietti [RISOLTO] MS Access 2
G [MS Access] Casella combinata & Query [RISOLTO] MS Access 4
G [MS Access] Query mese corrente con conteggio [RISOLTO] MS Access 2
M [RISOLTO]Windows media player non mi funziona più su win 10 pro 64 bit Windows e Software 2
C [RISOLTO][PHP] Errore di sintassi PHP 8
IT9-Gpp [RISOLTO] Leggere variabile restituita da success Ajax 3
Kolop [RISOLTO][PHP] Problema Pagination PHP 2
C [RISOLTO][PHP] Funzione ONclick PHP 14
C [RISOLTO][PHP] Conteggio righe di una tabella PHP 4
N [PHP] Utilizzo variabili di sessione [Risolto] PHP 13
Tommy03 [RISOLTO][PHP] Webserver o devserver? PHP 2
Sergio Unia Recupero dati da una vecchia versione MySql [Risolto] MySQL 4
spider81man [PHP] Problemi cancellazione dato su DB [RISOLTO] PHP 1
A [RISOLTO]Inserimento Immagini da pc a MySql PHP 15
A [PHP] RISOLTO Invio Mail con Tabella PHP 2
felino Risolto - [Wordpress][WooCommerce] PayPal Checkout e campi di fatturazione WordPress 2
elpirata [PHP][RISOLTO] Sommare gli importi estratti da un ciclo while PHP 3
elpirata [PHP][RISOLTO] Effettuare la somma dei tempi di lavorazione PHP 3
elpirata [PHP] [RISOLTO]Sovrascrivere testo in una tabella PHP 2
A [RISOLTO]Recuperare dati inviati con json tramite php PHP 4
C [RISOLTO][PHP] Passaggio variabili senza refresh di pagina PHP 7
S Problema in PHP per invio file XML - RISOLTO- PHP 8
A [Javascript] [RISOLTO] Doppio "submit", in uno stesso "Form" , che puntino ad "action" diversi Javascript 1
marino51 [Risolto]videochat di messenger ha smesso di funzionare sul telefonino Smartphone e tablet 1
A [Javascript] [HTML] RISOLTO...Allungare un box all'apertura della pagina No Mouse over Javascript 9
ken_korn [Javascript][Risolto] browser.tab.Tabs.favIconUrl non funziona Javascript 5
A [RISOLTO] HighChart e PHP PHP 4
A [RISOLTO] PHP Selezionare tutti i file con stessa estensione PHP 2
A [RISOLTO] Table elaborata da codice PHP con dati da DB non visualizzata in IFRAME PHP 15

Discussioni simili