Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    378

    [problema classe PHP e MYSQL]

    ciao a tutti, ho da poco cominciato a programmare in PHP e mi sono bloccato nella comunicazione con il Database MySql.

    Ho scritto una classe che si connette dal DB e creo un oggetto del tipo di quella classe dentro alla pagina PHP. La classe ha una funzione eseguiQuery() che mi ritorna il risultato della query.

    Il problema è che funziona solo la prima volta che viene invocato all'interno della pagina.

    questo è il codice della classe:

    <?php

    class dbManager{

    var $host;
    var $db;
    var $user;
    var $pwd;

    function __construct($host, $db, $user, $pwd){
    $this->host = $host;
    $this->db = $db;
    $this->user = $user;
    $this->pwd = $pwd;
    // connetto al DB MYSQL
    if(!($link = mysql_connect($this->host, $this->user, $this->pwd))){
    die("ERRORE: " . mysql_error());
    }
    // scelgo il DB su cui lavorare
    if(!(mysql_select_db($this->db)))
    die("ERRORE: " . mysql_error());
    }

    function eseguiQuery($query){
    return(mysql_query($query));
    }

    }
    ?>


    All'interno della pagina php ho fatto questo:

    $db = new DBmanager($conf->getHost(), $conf->getDb(), $conf->getUserid(), $conf->getPassword());

    $rs = $db->eseguiQuery($query);

    Scorro il risultato recuprenso i dati che mi servono e la seconda volta che invoco quella funione non va più....

  2. #2
    ci sono alcune imprecisioni...

    innanzitutto perchè salvare come attributi i parametri di accesso??? sbaglio o ti servono SOLO nel momento della connessione?? se fossi in te userei come attributo la risorsa connessione che serve anche successivamente...

    ti riporto l'eventuale correzione

    Codice PHP:
    class dbManager{

      var 
    $conn;

      function 
    __construct($host$db$user$pwd){
        
    // connetto al DB MYSQL
        
    if(!($this->conn mysql_connect($host$user$pwd))) die("ERRORE: " mysql_error());
        
    // scelgo il DB su cui lavorare
        
    if(!(mysql_select_db($db$this->conn))) die("ERRORE: " mysql_error());
      }

      function 
    eseguiQuery($query){
        return(
    mysql_query($query$this->conn));
      }


    www.gext.it

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    378
    ciao, ti ringrazio per la risposta e ho coambiato il codice con quello che mi hai postato, ma persiste sempre lo stesso problema.

    mi potresti spiegare cosa cambia dal mio codice al tuo ?? vedo di diverso solamente che non ti salvi i dati per la connessione....


    grazie !!

  4. #4
    prova a pastare anche il codice dove utilizzi la classe
    www.gext.it

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    378
    ciao e grazie ancora per l'aiuto. Ti posto tutti i blocchi di codice PHP presenti all'interno della pagina:

    1)

    <?php
    session_start();
    include("util/configurazione.php");
    include("util/dbManager.php");
    ?>

    2)

    <?php
    $conf = new configurazione("conf/adea.conf");
    $db = new DBmanager($conf->getHost(), $conf->getDb(), $conf->getUserid(), $conf->getPassword());

    $_SESSION['conf'] = $conf;
    ?>

    3)

    <?php
    $i = 0;
    $query = "SELECT * FROM hosting WHERE visualizza=1";
    $rs = $db->eseguiQuery($query);
    while( ($riga = mysql_fetch_array($rs)) && ($i < 4) ){
    print(" <a href=\"" . $riga['indirizzo'] . "\">" . $riga['titolo'] . "</a> ");
    $i ++;
    }
    ?>

    4) se commento il blocco di codice 3 esegue anche il prossimo, altrimenti no

    <?php
    $indice = 0;
    $query = "SELECT * FROM news ORDER BY id DESC";
    $rs = $db->eseguiQuery($query);
    while($riga = mysql_fetch_array($rs)){
    if($i == 0){
    print("
    <tr valign=\"top\">
    <td class=\"storyLeft\">


    <a href=\"#\" class=\"capsule\">" . $riga['data'] . "</a>" . $riga['news'] . "</p>
    </td>");
    }
    else if($i == 1){
    print("
    <td>


    <a href=\"#\" class=\"capsule\">" . $riga['data'] . "</a>" . $riga['news'] . "</p>
    </td>
    </tr>
    ");
    }
    else if($i == 2){
    print("
    <tr valign=\"top\">
    <td class=\"storyLeft\">


    <a href=\"#\" class=\"capsule\">" . $riga['data'] . "</a>" . $riga['news'] . "</p>
    </td>
    ");
    }
    else if($i == 3){
    print("
    <td>


    <a href=\"#\" class=\"capsule\">" . $riga['data'] . "</a>" . $riga['news'] . "</p>
    </td>
    </tr>
    ");
    }
    $i ++;
    //print($riga['id']. " - " . $riga['nome'] . "

    ");
    }
    ?>

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    378
    sono riuscito a risolvere, il probleman non era nella classe che effettuava la connessione ma in un errore di scrittura....

    a quanto pare PHP nn gradisce gli spazi bianchi e $i ++; non è uguale a $i++; !!!

    ora riesco a accedere al DB senza problemi peò mi sorge un nuovo problema. Vorrei mettere in sessione l'oggetto che accede al DB ma non ci riesco, quello che funziona per una normale stringa non funziona per un oggetto ???

    grazie

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    595
    Attenzione. Mettere un oggetto in sessione (si può fare tramite la funzione serialize()) non ti fa comunque mantenere attiva la connessione al database, che deve comunque essere fatta ad ogni pagina

    Comunque, in generale, per salvare e riprendere un oggetto da una sessione (ma anche in un db) si fa in questo modo
    Codice PHP:
    include("myclass.php"); // immaginiamo che in tale file c'è la definizione della class
    $obj = new myclass();
    $serialized serialize($obj);
    $_SESSION["obj"] = $serialized
    E lo riprendi così
    Codice PHP:
    include("myclass.php"); // questo se non lo metti l'oggetto non verrà ripreso correttamente
    $serialized $_SESSION["obj"];
    $obj unserialize($serialized); 
    Ricorda però alcuni dettagli IMPORTANTI
    1) La connessione al database è comunque persa
    2) Se un oggetto da serializzare contiene altri oggetti vanno serializzati anche quelli PRIMA (php4)

  8. #8
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    378
    ciao grazie per la risposta, a dir il vero avevo già provato in quel modo ma senza nessun risultato, mi sa che ho fatto di nuovo errori.... C'E' UN MODO PER FARSI SEGNALARE GLI ERRORI DI SCRITTURA ??!?!?


    Quindi secondo quanto mi dici anche se riuscissi a passare l'oggetto perderei comunque la connessione al DB ???

    Quindi a cosa serve passare oggetti se si perdono pezzi per strada !?!? i valori salvati dentro alle variabili dentro l'oggetto per lo meno si salvano ?? ..altrimenti non capisco a cosa possa servire consentire di passare oggetti....


    GRAZIE !!

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    595
    Gli oggetti mantengono TUTTO tranne connessioni a risorse ESTERNE, come "file", "database", "connessioni socket" e via dicendo
    Questo perchè la connessione RICHIEDE qualcuno con cui parlare. Se prendi un oggetto e lo "addormenti", questo non può più "comunicare" e si perde la connessione

    Gli oggetti che hanno "connessioni a risorse" sono fatti per "semplificare il lavoro" e separarlo concettualmente e dal punto di vista implementativo dal resto del codice, non per essere "salvati"
    In generale, il non poter "salvare" un oggetto non significa "l'oggetto non serve"... ci son ben altre questioni che gli oggetti ti risolvono

  10. #10
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    378
    ok ti ringrazio per la spiegazione, venendo da JAVA e quindi JSP mi sta facendo impazzire e non poco questa "strana" filosofia di PHP !!!

    :-)

    ormai che ci sono chiedo un ultima cosa: c'è un modo per avere una segnalazione errori migliore ?? potrei scrivere qualsiasi cosa nel codice senza ricevere nessun worning !! Abituato a completamenti automatici del java e segnalalzione in tempo reale delgi errori sto impazzendo !!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.