Classe per connessione MySqli

Alessandro Gusella

Nuovo Utente
3 Set 2012
7
0
0
Salve a tutti ragazzi.
Ho dei problemi a capire come funzionano i costruttori e la propagazione delle classi.
Di seguito trovate il problema.

Questo è il contenuto del file con le impostazioni e la connessione

PHP:
define('DATA_HOST', '---------');
define('DATA_UTENTE', '--------');
define('DATA_PASS', '-------');
define('DATA_DB', '------');
define('USERS_TABLE_NAME', '-----------');

class DATA_Class {

  function __construct() {
      $db = new mysqli(DATA_HOST, DATA_UTENTE, DATA_PASS, DATA_DB);
      if ($db->connect_errno)
      echo "Connessione fallita a MySQL: " . $db->connect_error;
  }
}

e questo il file dove vengono eseguiti i metodi della classe

PHP:
include($_SERVER['DOCUMENT_ROOT'].'/........');

class User_Class  {

  public function __construct()
  {
    $data = new DATA_Class();
  }
 
  public function registra($username, $password, $email)
  {   
    $password = @sha1($password);
  
    $query = "SELECT id FROM users WHERE email = '$email'";
$result = $db->query($query);
non mi viene propagato (se così si può dire) in questo file il costruttore presente nel file delle impostazioni e connessione.

Dove sbaglio? spero abbiate capito il problema

Alessandro
 

Nefyt

Utente Attivo
17 Apr 2012
1.102
0
0
Nelle classi devi usare le proprietà le variabili si comportano come in normali funzioni quindi non richiamabili cosi


Ad esempio
PHP:
define('DATA_HOST', '---------');
define('DATA_UTENTE', '--------');
define('DATA_PASS', '-------');
define('DATA_DB', '------');
define('USERS_TABLE_NAME', '-----------');

class DATA_Class {

public $db;

  function __construct() {
      $this->db = new mysqli(DATA_HOST, DATA_UTENTE, DATA_PASS, DATA_DB);
      if ($this->db->connect_errno)
      echo "Connessione fallita a MySQL: " . $this->db->connect_error;
  }
}  

/* ALTRO FILE */

include($_SERVER['DOCUMENT_ROOT'].'/........');

class User_Class  {

public $data;

  public function __construct()
  {
    $this->data = new DATA_Class();
  }
 
  public function registra($username, $password, $email)
  {   
    $password = @sha1($password);
  
    $query = "SELECT id FROM users WHERE email = '$email'";
$result = $this->data->db->query($query);
Se dovevi ricavare solamente mysqli, ti bastava una normale funzione con un return
PHP:
function getDb() {
      $db= new mysqli(DATA_HOST, DATA_UTENTE, DATA_PASS, DATA_DB);
      if ($db->connect_errno)
       die("Connessione fallita a MySQL: " . $db->connect_error);  else return $db;
  }

//e nelle classi

//....
   $this->var = getDb();
   $this->var->query('...');
//....
 
Ultima modifica:

Alessandro Gusella

Nuovo Utente
3 Set 2012
7
0
0
perfetto, grazie, come dici tu funziona, ma vorrei capire perche se il file delle impostazioni è cosi

PHP:
class DATA_Class {
  
  function __construct() {
    
    $connessione = @mysql_connect(DATA_HOST, DATA_UTENTE, DATA_PASS) or die('Errore nella connessione: ' . mysql_error());
  
    @mysql_select_db(DATA_DB, $connessione) or die('Errore dal database: ' . mysql_error());
  }
}

e nel secondo file è cosi
PHP:
class User_Class {
  
 
  public function __construct() 
  {
    
    $data = new DATA_Class();
  }

  
  public function registra($nome_reale, $nome_utente, $password, $email) 
  {
   
    $password = @sha1($password);
   
    $query = @mysql_query("SELECT id_utente FROM iscritti WHERE nome_utente = '$nome_utente' OR email = '$email'") or die('Errore: ' . mysql_error());


funziona.
Non si posso includere classi nelle istanze?
Riesci a spiegarmelo?
Grazie e gentilissimo.
Ale
 
Ultima modifica:

Nefyt

Utente Attivo
17 Apr 2012
1.102
0
0
perfetto, grazie, come dici tu funziona, ma vorrei capire perche se il file delle impostazioni è cosi

PHP:
class DATA_Class {
  
  function __construct() {
    
    $connessione = @mysql_connect(DATA_HOST, DATA_UTENTE, DATA_PASS) or die('Errore nella connessione: ' . mysql_error());
  
    @mysql_select_db(DATA_DB, $connessione) or die('Errore dal database: ' . mysql_error());
  }
}

e nel secondo file è cosi
PHP:
class User_Class {
  
 
  public function __construct() 
  {
    
    $data = new DATA_Class();
  }

  
  public function registra($nome_reale, $nome_utente, $password, $email) 
  {
   
    $password = @sha1($password);
   
    $query = @mysql_query("SELECT id_utente FROM iscritti WHERE nome_utente = '$nome_utente' OR email = '$email'") or die('Errore: ' . mysql_error());


funziona.
Non si posso includere classi nelle istanze?
Riesci a spiegarmelo?
Grazie e gentilissimo.
Ale
Non capisco che cosa intendi, mysql lavora da procedurale è differente e poi che intendi la classe in un istanza? Un istanza è il resource di una classe in poche parole...

Spiegati meglio pls...

ps: perdi il vizio di usare la @, gli errori è meglio correggerli che nasconderli
 

Alessandro Gusella

Nuovo Utente
3 Set 2012
7
0
0
Lo perderò il vizio delle @ lo giuro :fonzie:

allora cerco di spiegarmi meglio.
Se nel primo file nel __costrutto della classe DATA_Class c'è questo
PHP:
class DATA_Class {
  
  function __construct() {
    
    $connessione = mysql_connect(DATA_HOST, DATA_UTENTE, DATA_PASS) or die('Errore nella connessione: ' . mysql_error());
  
    mysql_select_db(DATA_DB, $connessione) or die('Errore dal database: ' . mysql_error());
  }
}

perchè se nel __costrutto della classe nel secondo file basta chiamare la classe DATA_Class
come qui scritto
PHP:
class User_Class {
  
 
  public function __construct() 
  {
    
    $data = new DATA_Class();
  }

e la connessione è disponibile in tutta la classe?

Io credevo che se nel __costrutto della classe DATA_Class avessi scritto questo
PHP:
class DATA_Class {

  function __construct() {
      $db = new mysqli(DATA_HOST, DATA_UTENTE, DATA_PASS, DATA_DB);
      if ($db->connect_errno)
      echo "Connessione fallita a MySQL: " . $db->connect_error;
  }
}

tutto sarebbe andato a posto.

Non mi è facile spiegare.
Ciao.
 

Nefyt

Utente Attivo
17 Apr 2012
1.102
0
0
mysqli usa un concetto orm invece mysql lavora da procedurale, non è un istanza che ritorna ma lavora a semplici funzioni, quindi basterà stabilirlo dove vuoi perché sia disponibile ovunque perciò è anche inutile che la richiami nel construct ti basterebbe dichiararlo in un file senza classi ne nulla, invece mysqli torna con l'istanza della classe e i metodi da usare.


Ti consiglierei di adottare pdo anche se un po difficile le prime volte, perché lavora completamente ad oggetti, ma per ora continua pure su mysqli o mysql, prima devi farti un po i muscoli per sfidarlo :cool:
 
Discussioni simili
Autore Titolo Forum Risposte Data
macus_adi Classe PHP per la Geolocalizzazione del visitatore Snippet PHP 0
A [PHP] metodo di una classe per estrarre i dati con ciclo while PHP 1
L Problemi con classe di astrazione per il database PHP 20
J Problema classe per preview post PHP 2
L classe per gestire login in mysql PHP 1
M Classe in php 4 per generare file in Excel PHP 4
B ciclo con array, assegnare una classe differente per ciascun risultato PHP 3
simonetta619 creare una classe per rendere dinamico l'inserimento PHP 0
L classe per inserire dati al database PHP 2
M Consigli/Critiche su classe per la traduzione PHP 2
matrobriva Classe per elencare ed aprire file contenuti in un archivio zip PHP 3
emanuelevt funzione per entità html e classe PHP 1
M Classe per paginazione record PHP 8
MarcoGrazia Classe per la scrittura di un file XML PHP 5
I Aiuto per classe mysql PHP 5
D Esistono eventi per i moduli non di classe? Visual Basic 0
M Classe per OCR in Java Java 2
N classe per la gestione dell'autenticazione Snippet PHP 0
A classe per invio mail PHP 1
G classe CSS sovrascritta HTML e CSS 2
L php tinymce mi duplica la classe label PHP 3
P jButton1ActionPerformed passare parametri ad altra classe Java 2
L creare oggetti da una classe tramite un form Javascript 0
A Riproduzione classe Vector C/C++ 3
C [PHP] Estrarre da una classe i valori che mi interessano PHP 5
O Estendere una rete di classe C Reti LAN e Wireless 1
tucu49 PHP include classe PHP 8
M [PHP] Estendere Connessione a una Classe PHP 1
M [PHP] utilizzo di una classe e delle sue funzioni PHP 2
tritabit Classe MysqliDb mancante nelle librerie arc2 PHP 2
D [PHP] assegnare una classe PHP 1
W [PHP] Creazione classe PDO PHP 4
S Copiare attributi da una classe. Programmazione 0
D [PHP] chiamata metodi da una classe PHP 3
L [PHP] login con la classe medoo.in PHP 5
B [Javascript] Cambiare classe ed aggiornare relativi eventi Javascript 3
M [wordpress-galleria immagini]Inserire classe php in html PHP 0
L [PHP] Classe che non vede i suoi metodi PHP 3
A [Javascript] Mancata aggiunta di una classe al click Javascript 1
C [PHP] Metodo di una classe in sltra classe PHP 1
Shyson [WordPress] Mettere classe css WordPress 0
V [PHP] utilizzo di metodi statici in altra classe PHP 5
Sevenjeak [C#] Aiuto esportazione tema su libreria di classe ( dll ) .NET Framework 1
elpirata [PHP] [RISOLTO] Stampare classe css in base al risultato della query PHP 6
C Classe Prenotazione con 2 scelte Java 2
A modificare .jar con classe personalizzata Java 9
Rikk73 Passare come argomento in un metodo un parametro della classe istanziata PHP 0
M Visualizzare da una classe esistente ogni profilo utente PHP 1
napuleone Modificare attributi di una classe con js Javascript 2
C Upload immagini con classe non funzionante PHP 1

Discussioni simili