Visualizzazione risultati 1 fino 11 di 11

Discussione: problema con le funzioni

  1. #1
    Guest

    Predefinito

    Se scrivo:
    $query = "SELECT username, password FROM gestsez_utenti WHERE username='federico' and password='".MD5("federico")."'";
    $result = mysql_query($query,$db);

    Funziona tutto.
    Ora metto tutto quanto in una funzione, mantenendo tutto inalterato.

    function prova()
    {
    $query = "SELECT username, password FROM gestsez_utenti WHERE username='federico' and password='".MD5("federico")."'";
    $result = mysql_query($query,$db);
    }

    Se in un altra pagina (in un altro file *.php) includo questo file e chiamo la funzione prova(), mi dà errore:

    Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in include\funzioni.lib.php on line 6

    Perchè?

  2. #2
    Guest

    Predefinito

    verifica che sia $query che $db siano definite PRIMA di chiamare la funzione...

  3. #3
    Guest

    Predefinito

    Citazione Originalmente inviato da numerone
    verifica che sia $query che $db siano definite PRIMA di chiamare la funzione...
    $db viene definita nel file config.inc.php al momento della connessione con il database, mentre $query la definisco ALL'INTERNO della funzione, sto sbagliando?

  4. #4
    Guest

    Predefinito

    se tolgo il ", $db" in
    $result = mysql_query($query, $db);
    funziona tutto, mi viene il dubbio che la variabile db venga persa per strada... ma il ", $db" non dovrebbe essere un parametro indispensabile?

    Cmq ti chiedo ancora una roba se non ti secca:

    in index.php scrivo
    include "ciao.php";
    include "come_va.php";

    se in "come_va.php" inserisco una funzione facente riferimento a variabili in "ciao.php" esse vengo perse per strada? se sì come devo fare?

    Grazie anticipate :D

  5. #5
    Guest

    Predefinito

    Citazione Originalmente inviato da wanttobefree
    se tolgo il ", $db" in
    $result = mysql_query($query, $db);
    funziona tutto, mi viene il dubbio che la variabile db venga persa per strada... ma il ", $db" non dovrebbe essere un parametro indispensabile?

    Cmq ti chiedo ancora una roba se non ti secca:

    in index.php scrivo
    include "ciao.php";
    include "come_va.php";

    se in "come_va.php" inserisco una funzione facente riferimento a variabili in "ciao.php" esse vengo perse per strada? se sì come devo fare?

    Grazie anticipate :D
    $db non è un parametro indispensabile..anche se dipende da che gli hai associato :-)

    di solito se fai $ris = mysql_query($query); basta e avanza :-)

    per quanto riguarda la perdita per strada di tale variabile devi sapere che le funzioni possono essere considerate come degli script a se stanti...questo sognifica che le variabili da te dichiarate in tale file o nei file legati in qualche modo alla funzione vengono considerate come nuove, vuote, inseistenti.

    Per evitare che accada ciò devi "dichiarare" la variabile che ti interessa dentro la funzione in questo modo "global $variabile;" senza gli apici..

    nel tuo caso dovresti fare global $db;

    Questo serve per rendere le variabili esterne alla funzione globali di modo che siano riconosciute anche dalla funzione :-)

    prova ad aggiungere global $db; nella tua funzione e riscrivi la query per vedere se poi funge :-)

    ciauz!

    P.S. Per le superglobali $_GET $_POST ecc ecc non devi fare sto lavoro :-)

  6. #6
    Guest

    Predefinito

    Infatti, tecnicamente, le variabili definite in una pagina (script) sono valide in un contesto (detto "scope") che non è in comune con il contesto delle function, immaginateli su livelli diversi:
    immaginati un grande livello base (il contesto della pagina php) e immaginati invece ciascuna function come un piccolo livello a sé stante che "fluttua" sopra questa base.
    Le variabili definite su questo contesto base non possono essere "viste" dal livello delle function. Se vuoi vedere le stesse variabili nel contesto di una function devi richiamarle con global. Senza il global, due variabili con nome identico possono "coesistere" in livelli diversi senza che ci sia alcun legame tra loro (valor distinti).

    Gli include invece non hanno un contesto a parte: se richiami con include un pezzo di script all'interno dello script php principale il codice incluso è da considerarsi come facente parte della pagina stessa, dunque una variabile dichiarata in un include (ad es. i file config) è direttamente "visibile" nello script senza dichiararlo global (che appunto in questo caso non c'entra nulla).

  7. #7
    Guest

    Predefinito

    Citazione Originalmente inviato da NoSpam
    Gli include invece non hanno un contesto a parte: se richiami con include un pezzo di script all'interno dello script php principale il codice incluso è da considerarsi come facente parte della pagina stessa, dunque una variabile dichiarata in un include (ad es. i file config) è direttamente "visibile" nello script senza dichiararlo global (che appunto in questo caso non c'entra nulla).
    uhm, non ne sono tanto sicuro di questo

    perchè tempo fa mi è capitato di avere una pagina dove avevo incluso il file config.inc.php con le variabili per la connessione e il codice per connettersi al database

    nel file principale c'era anche una funzione con all'interno una query al database...quando ho provato lo script ho riscontrato un errore, adesso non ricordo bene se di connessione al db o di qualche altro tipo...fatto sta che se scrivevo include("config.inc.php") dentro alla funzione lo script faceva la query correttamente e fungeva tutto..

    perciò ho detto di provare a rendere globali le variabili del file incluso perchè comunque sia se includi il config all'esterno delle funzioni, le variabili in esso contenute diventano parte della pagine principale ma non della funzione..come tutte le altre variabili

    cmq è bene fare dei tentativi :-)

  8. #8
    Guest

    Predefinito

    Oddio che confiuscion :D
    Includere un file all'interno di una function!!
    Il config poi..
    Penso non sia una pratica "sana", al massimo includi (come si fa tipicamente) un file al cui interno sono definite funzioni.


    uhm, non ne sono tanto sicuro di questo
    Guarda è la prima cosa che ho letto quando ho deciso di vedermi il php, il "variable scope" è fondamentale, come per qualsiasi altro linguaggio (ognuno ha le sue peculiarità).

    Dimenticavo il link al manuale php sul variable scope:
    http://www.php.net/manual/it/languag...bles.scope.php

  9. #9
    Guest

    Predefinito

    Citazione Originalmente inviato da NoSpam
    Oddio che confiuscion :D
    Includere un file all'interno di una function!!
    Il config poi..
    Penso non sia una pratica "sana", al massimo includi (come si fa tipicamente) un file al cui interno sono definite funzioni.


    uhm, non ne sono tanto sicuro di questo
    Guarda è la prima cosa che ho letto quando ho deciso di vedermi il php, il "variable scope" è fondamentale, come per qualsiasi altro linguaggio (ognuno ha le sue peculiarità).
    il fatto è che quando riscontro qualche problema insolito cerco di capire da cosa è dato..e certe volte bisogna andare per tentativi...nel caso citato precedentemente ho provato ad inserire l'include dentro ad una funzione e ho visto che risolveva il mio problema...a wanttobefree però non gli ho detto di includere un file dentro ad una funzione, ma bensì di rendere globali all'interno di una funzione le variabili del file incluso nel file principale ma all'esterno della funzione..questo dovrebbe risolvere il suo problema :-)

    Interessante il tuo sito nospam :-)

  10. #10
    Guest

    Predefinito

    ho risolto... era a causa della variabile non globale, come avete detto... grazie mille! :D

  11. #11
    Guest

    Predefinito

    Citazione Originalmente inviato da wanttobefree
    ho risolto... era a causa della variabile non globale, come avete detto... grazie mille! :D
    so forte! non c'è verso lol 8)

Regole di scrittura

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