Visualizzazione risultati 1 fino 12 di 12

Discussione: Problema invocazione metodo classe esterna (PHP)

  1. #1
    Guest

    Predefinito Problema invocazione metodo classe esterna (PHP)

    Buonasera a tutti !!

    Vi avverto che da pochissimo sto studiando il php quindi se per le prossime righe ho scritto delle cavolate, vi prego di non lapidarmi a tempo record!

    Sto progettando un sito web che faccia uso di PHP5 a classi.
    Dato che derivo da anni con Java, ho strutturato le mie classi php proprio come se stessi facendo un progetto java, quindi con il classico costruttore, distruttore, getter/setter, ecc.

    Il mio problema è questo:
    -------
    Cosa voglio fare:

    Una volta che ho eseguito la login del sito, devo stampare a video le mie informazioni personali (nome, cognome, telefono, ecc).
    Tutte queste informazioni vengono memorizzate in un oggetto che chiamo Utente e valorizzate subito dopo il riconoscimento nel DB.
    -------
    Cosa succede:

    La connessione al database avviene correttamente, ma l'invocazione del metodo della classe Utente, che mi consentirà di valorizzare i campi e stamparne i valori, non viene effettuata.

    Vi posto il codice:

    Codice PHP:

    //prelevo nome utente/pass inseriti
    extract($_POST);

    //richiedo i file DatabaseDAO (gestione DB) e Utente (per caricarne i dati)
    require_once 'DatabaseDAO.php';
    require_once
    'Utente.php';

    //dichiaro l'oggetto database (qui mi fa la connessione che VA A BUON FINE)
    $db = new Database;

    //qui non va avanti
    //pare che non riconosca l'operatore "->" per invocare il metodo della classe Database

    if ($db->eseguiLogin($txtUser,$txtPassword)){
    autorizzato();
    $utente = new Utente;
    $id_utente = $db->getValoreFromDB("utenti", "id_utente", "username", $txtUser);
    $utente->estraiUtente($id_utente);
    carica_info_utente($utente);
    }else
    negato();
    Secondo me l'errore è proprio questa riga di codice

    Codice PHP:
    if ($db->eseguiLogin($txtUser,$txtPassword)){
    in quanto non entra nella if e nemmeno nell'else.

    Un piccolo appunto, in locale funziona tutto a meraviglia ma su Altervista no.

    Ho il timore che non sia perfettamente supportato PHP ad oggetti ma molto probabilmente sto commettendo qualche errore da neofita.

    Come posso risolvere?

    Attendo risposta, grazie a tutti

  2. #2
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Senza il codice della classe Database, dubito che qualcuno possa aiutarti.
    Postalo, se puoi.

  3. #3
    Guest

    Predefinito

    Grazie per la risposta, javascripter.

    Posto il codice ovviamente con nome del db, username e password fittizie.

    Codice PHP:

    <?php
    class Database{

    private
    $user_DB = "nomeutentedeldb";
    private
    $pass_DB = "passworddeldb";
    private
    $host="localhost";
    private
    $connessione;
    private
    $database="mio_database";

    public function
    __construct(){
    $this->connessione = mysql_connect($this->host, $this->user_DB, $this->pass_DB);
    mysql_select_db($this->database);
    }

    public function
    __destruct(){
    $this->chiudiDB();
    }

    public function
    riattivaDB(){
    $this->__destruct();
    $this->__construct();
    }

    public function
    chiudiDB(){
    if (!
    mysql_stat()){
    mysql_close();
    }
    }

    //query login utenze
    public function eseguiLogin($user, $pass){
    $this->riattivaDB();

    $query = sprintf("SELECT * FROM TABELLADEGLIUTENTI WHERE USERNAME='$user' AND PASSWORD='");
    $query.=md5($pass);
    $query.="'";
    $result = mysql_query($query) or die("Errore nella query: " + mysql_error());

    return (
    mysql_num_rows($result)==1);
    }
    }
    ?>
    il metodo eseguiLogin restiruisce un (mysql_num_rows($result)==1) quindi un valore booleano. (è una buona scelta?)


    Grazie per l'attenzione :)

  4. #4
    L'avatar di radiodelmomento
    radiodelmomento non è connesso AlterGuru
    Data registrazione
    09-09-2010
    Messaggi
    1,075

    Predefinito

    Ciao, guardando velocissimamente il codice secondo me sei un po' troppo complicato qui:
    Codice PHP:
    $query = sprintf("SELECT * FROM TABELLADEGLIUTENTI WHERE USERNAME='$user' AND PASSWORD='");
    $query.=md5($pass);
    $query.="'";
    Prova a modificare con:
    Codice PHP:
    $query = sprintf("SELECT * FROM TABELLADEGLIUTENTI WHERE USERNAME='$user' AND PASSWORD= '".md5($pass)."'");
    Ciao!

  5. #5
    Guest

    Predefinito

    Ciao!
    Il codice l'ho modificato come mi hai detto per scrupolo :) evidentemente è la forma meno "zozza".

    Detto questo, il problema non si è risolto... ripeto, in locale funge tutto ma in remoto no..

  6. #6
    L'avatar di radiodelmomento
    radiodelmomento non è connesso AlterGuru
    Data registrazione
    09-09-2010
    Messaggi
    1,075

    Predefinito

    Che non funzionasse era sicuro, era solo per renderlo più pulito.
    Ma il nome e i campi della tabella li scrivi rispettando maiuscole e minuscole, giusto?
    Ricordi inoltre che non è mio_database ma my_database?
    Lo dico solo per non andare a cercare i minimi errori cominciando dai più banali.
    Ciao ciao!

  7. #7
    Guest

    Predefinito

    Ma il nome e i campi della tabella li scrivi rispettando maiuscole e minuscole, giusto?
    Intendi proprio nella query sql?

    Ricordi inoltre che non è mio_database ma my_database?
    Si

  8. #8
    L'avatar di radiodelmomento
    radiodelmomento non è connesso AlterGuru
    Data registrazione
    09-09-2010
    Messaggi
    1,075

    Predefinito

    Dico che se una tabella si chiama "nometabella" non puoi richiamarla come "NOMETABELLA".
    La stessa cosa per i campi.
    Inoltre non è sicuramente un errore di sintassi perché hai detto che in locale funge, quindi controlla che i dati inseriti siano corretti.
    Example:
    Codice PHP:
    private $user_DB = "gruppomenabrea";
    private
    $pass_DB = "";
    private
    $host = "localhost";
    private
    $connessione;
    private
    $database="my_gruppomenabrea";

  9. #9
    Guest

    Predefinito

    I dati sono corretti, nel mio secondo post li avevo modificati perchè dovevo pubblicare la classe e non volevo rendere visibili i dati reali..

    Poi ho pensato che sono facilmente reperibili :D

    Comunque, provato anche rispettando il case-sensitive per la query, nulla di fatto.

  10. #10
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Allora, sprintf usata in quel modo è inutile.
    Ti consiglio di dare un'occhiata qui.

    Quindi, usando semplicemente le stringhe e la sintassi per concatenare una variabile in essa:
    Codice PHP:
    $query = "SELECT * FROM TABELLADEGLIUTENTI WHERE USERNAME='$user' AND PASSWORD= '".md5($pass)."'"; // senza sprintf
    .

    Prendendo in considerazione tutto il metodo eseguiLogin, lo cambierei così:
    Codice PHP:
    public function eseguiLogin($user, $pass){
    // a cosa serve -> $this->riattivaDB(); ?
    $user = mysql_real_escape_string($user); // anti sql-injection
    $pass = mysql_real_escape_string($pass); // come sopra

    $query = "SELECT * FROM TABELLADEGLIUTENTI WHERE USERNAME='$user' AND PASSWORD= MD5('$pass')";
    $result = mysql_query($query, $this->connessione) or die("Errore nella query: " . mysql_error()); // in php il simbolo + non concatena le stringhe.

    return mysql_num_rows($result) == 1;
    }
    Ultima modifica di javascripter : 25-06-2011 alle ore 18.11.37

  11. #11
    Guest

    Predefinito

    Perfetto javascripter!!!
    Ora funziona tutto a dovere!

    Citazione Originalmente inviato da javascripter Visualizza messaggio
    // a cosa serve -> $this->riattivaDB(); ?
    quel metodo non fa altro che invocare il distruttore e il costruttore... in pratica l'ho fatto per "svegliare" il database.

    Sono abituato ad aprire/chiudere il database ad ogni interrogazione/manipolazione dei dati per evitare inutili sessioni "fantasme".... o meglio in ambiente desktop faccio così.

    In PHP è inutile?


    Grazie ancora!!

  12. #12
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Citazione Originalmente inviato da gruppomenabrea Visualizza messaggio
    Sono abituato ad aprire/chiudere il database ad ogni interrogazione/manipolazione dei dati per evitare inutili sessioni "fantasme".... o meglio in ambiente desktop faccio così.

    In PHP è inutile?
    Una volta stabilita la connessione al database, puoi interrogarlo fin quanto ti pare ( entro i limiti di 15 secondi di esecuzione di uno script ).
    Non hai bisogno di "risvegliare" il database, non in php.
    Ultima modifica di javascripter : 25-06-2011 alle ore 21.58.47

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •