Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it L'avatar di wallrider
    Registrato dal
    Apr 2003
    Messaggi
    2,755

    Visibilità variabili in funzioni


    ho questo file db_functions.php
    Codice PHP:
    <?
    include './db_config.php';
    function 
    db_connect(){
        return 
    odbc_connect($odbc_dsn,$db_utente,$db_password);
    }
    function 
    db_close($idConn){
        return 
    odbc_close($idConn);
    }
    function 
    db_exec($idConn,$query){
        return 
    odbc_exec($idConn,$query);
    }
    function 
    db_fetch_row($idRs){
        return 
    odbc_fetch_row($idRs);
    }
    function 
    db_result($idRs,$numCampo){
        return 
    odbc_result($idRs,$numCampo);
    }
    function 
    db_num_fields($idRs) {
        return 
    odbc_num_fields($idRs); 
    }
    ?>
    con db_config.php così
    Codice PHP:
    <?
    $odbc_dsn
    ="odbcOrdini";
    $db_utente="";
    $db_password="";
    ?>
    perchè la connect mi da errore
    Notice : Undefined variable: odbc_dsn in C:\symo\www\Ordini\db_functions.php on line 7
    RIP Cicciobenzina 9/11/2010

    "Riseminaciceli, i ceci nell'orto"

  2. #2
    Utente di HTML.it L'avatar di Il_Drugo
    Registrato dal
    May 2006
    Messaggi
    1,220
    A meno che le variabili non siano globali, non puoi vederle dall'interno di una funzione. O le rendi globali, o le importi nella funzione come argomenti della funzione stessa.
    Nel tuo caso direi che ti conviene cancellare quelle funzioni e usare quelle che mette a disposizione PHP...altrimenti hai dei semplici doppioni, ma rinominati a tuo piacimento.


  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    116
    Direi lodevole il fatto che tu voglia gestire le funzioni di base messe a disposizione dal php per risolvere il tuo progetto. Così facendo centralizzi di molto la tua applicazione, se vuoi modificare in futuro qualche cosa lo fai senza stravolgere l'intero progetto.

    Io ti consiglio di passare all'oop e di fare una classe chiamata connect. In questo modo riesci a risolvere il problema della visibilità.
    Oltrettutto ti consigilio di modificare le funzioni che hai creato e di mettere all'interno di esse un costrutto di controllo per verificare che in valori passati nelle variabili siano corretti.
    Ciao

  4. #4
    Utente di HTML.it L'avatar di wallrider
    Registrato dal
    Apr 2003
    Messaggi
    2,755
    Originariamente inviato da Il_Drugo
    A meno che le variabili non siano globali, non puoi vederle dall'interno di una funzione. O le rendi globali, o le importi nella funzione come argomenti della funzione stessa.
    Nel tuo caso direi che ti conviene cancellare quelle funzioni e usare quelle che mette a disposizione PHP...altrimenti hai dei semplici doppioni, ma rinominati a tuo piacimento.

    il discorso dei doppioni è perchè ora sono su un db access poi spero di poter passare a mysql
    cambiando file db_functions e mettendoci uno contenente funzioni mysql spero di cambiare base dati in maniera abbastanza indolore...

    per renderle globali devo aggiungerle a $_GLOBAL ?
    mamma mia come sono arrugginito... :rollo:
    RIP Cicciobenzina 9/11/2010

    "Riseminaciceli, i ceci nell'orto"

  5. #5
    Utente di HTML.it L'avatar di wallrider
    Registrato dal
    Apr 2003
    Messaggi
    2,755
    Originariamente inviato da djkirk
    Direi lodevole il fatto che tu voglia gestire le funzioni di base messe a disposizione dal php per risolvere il tuo progetto. Così facendo centralizzi di molto la tua applicazione, se vuoi modificare in futuro qualche cosa lo fai senza stravolgere l'intero progetto.
    Così arrossisco
    Io ti consiglio di passare all'oop e di fare una classe chiamata connect. In questo modo riesci a risolvere il problema della visibilità.
    Oltrettutto ti consigilio di modificare le funzioni che hai creato e di mettere all'interno di esse un costrutto di controllo per verificare che in valori passati nelle variabili siano corretti.
    Ciao
    Ci avevo pensato a studiare object oriented ma ora non ho proprio tempo grazie comunque!!!
    RIP Cicciobenzina 9/11/2010

    "Riseminaciceli, i ceci nell'orto"

  6. #6
    Utente di HTML.it L'avatar di Il_Drugo
    Registrato dal
    May 2006
    Messaggi
    1,220
    Codice PHP:
    <?
    include './db_config.php';
    function 
    db_connect(){
        global 
    $odbc_dsn$db_utente$db_password;
        return 
    odbc_connect($odbc_dsn,$db_utente,$db_password);
    }
    function 
    db_close($idConn){
        global 
    $odbc_dsn$db_utente$db_password;
        return 
    odbc_close($idConn);
    }
    function 
    db_exec($idConn,$query){
        global 
    $odbc_dsn$db_utente$db_password;
        return 
    odbc_exec($idConn,$query);
    }
    function 
    db_fetch_row($idRs){
        global 
    $odbc_dsn$db_utente$db_password;
        return 
    odbc_fetch_row($idRs);
    }
    function 
    db_result($idRs,$numCampo){
        global 
    $odbc_dsn$db_utente$db_password;
        return 
    odbc_result($idRs,$numCampo);
    }
    function 
    db_num_fields($idRs) {
        global 
    $odbc_dsn$db_utente$db_password;
        return 
    odbc_num_fields($idRs);
    }
    ?>
    Non ho guardato se davvero servissero in ogni funzione, cmq cosi facendo ti porti dentro la funzione il valore delle variabili che hai dichiarato fuori.


  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    116
    Cmq la soluzione è fattibile anche in una struttura procedurale... io ho fatto così:

    function db_connect (){

    $host="localhost";
    $user="root";
    $pass="";

    if ((!empty($host)) &&(!empty($user)) ){
    $link_id = mysql_connect($host,$user,$pass);
    return $link_id;
    }
    }

    function select_db ($dbname, $link_id){

    if ((!empty($dbname))&&(!empty($link_id))){
    return mysql_select_db($dbname, $link_id);
    }

    }

    function close_db (&$db_id){

    if (!empty($db_id)){
    return mysql_close($db_id);
    }
    }

    Come vedi ho messo un costrutto di controllo per evitare che vengano eseguite queste funzione in assenza di parametri. Funziona e non ho riscontrato problemi. Se mai in futuro voglio passare in oop questo non mi comporterà grossi sconvolgimenti a livello di codice...

  8. #8
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    116
    Originariamente inviato da Il_Drugo
    Codice PHP:
    <?
    include './db_config.php';
    function 
    db_connect(){
        global 
    $odbc_dsn$db_utente$db_password;
        return 
    odbc_connect($odbc_dsn,$db_utente,$db_password);
    }
    function 
    db_close($idConn){
        global 
    $odbc_dsn$db_utente$db_password;
        return 
    odbc_close($idConn);
    }
    function 
    db_exec($idConn,$query){
        global 
    $odbc_dsn$db_utente$db_password;
        return 
    odbc_exec($idConn,$query);
    }
    function 
    db_fetch_row($idRs){
        global 
    $odbc_dsn$db_utente$db_password;
        return 
    odbc_fetch_row($idRs);
    }
    function 
    db_result($idRs,$numCampo){
        global 
    $odbc_dsn$db_utente$db_password;
        return 
    odbc_result($idRs,$numCampo);
    }
    function 
    db_num_fields($idRs) {
        global 
    $odbc_dsn$db_utente$db_password;
        return 
    odbc_num_fields($idRs);
    }
    ?>
    Non ho guardato se davvero servissero in ogni funzione, cmq cosi facendo ti porti dentro la funzione il valore delle variabili che hai dichiarato fuori.


    Soluzione buona ma la sconsiglio perchè non è bello e sicuro mettere globali certe variabili

  9. #9
    Utente di HTML.it L'avatar di Il_Drugo
    Registrato dal
    May 2006
    Messaggi
    1,220
    Beh senza lanciarsi sul procedurale o sull'object oriented, direi che è l'unica soluzione. Cmq la sconsiglio anch'io...al massimo rendi globali il nome del DB e delle tabelle...ma non password o altri dati "sensibili".

  10. #10
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    116
    Originariamente inviato da Il_Drugo
    Beh senza lanciarsi sul procedurale o sull'object oriented, direi che è l'unica soluzione. Cmq la sconsiglio anch'io...al massimo rendi globali il nome del DB e delle tabelle...ma non password o altri dati "sensibili".
    ok giusto ma se vedi quello che ho postato non sono globali i nomi di tabelle o nomi di db.... basta solo mettere un costrutto di controllo così da evitare che quando il php le parserizza nella pagina (dove richiamata) metta a video certi errori.... Tutto qui

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.