• Moderatore

    Funzione creata da utente e cicli

    Ciao a tutti,
    sto imparando a usare le funzioni che mi sono molto utili per i miei siti.

    Avrei bisogno di usare una funzione con all' interno 2 cicli, ma non funziona.

    Nelle funzioni si possono inserire dei cicli for e foreach?

    Qui vi lascio il codice (che fuori dalla funziona funziona):
    [PHP]function pertour ($chi) {
    if ($chi['tour']=='S'){
    for ($mul = 1; $mul <= 6; ++$mul) {
    $dataout='dataout'.$qqq;
    $datain='datain'.$qqq;
    $cittatour='cittatour'.$qqq;
    if ($chi[$dataout] >= $oggi and $chi[$datain] <= $oggi){
    foreach ($allcity as $k){
    if ($k['Idcitta']==$chi[$cittatour]){
    return $k['nomecitta'];
    }
    }
    }
    }
    }
    }[/PHP]

    Dove sbaglio?


  • ModSenior

    Ciao Ivan88,
    ma $qqq dove è stata definita? E $oggi?


  • Moderatore

    Sì sono entrambe definite.
    Per accorciare il codice non ho postato questa parte:
    [PHP]if ($mul==1) {
    $qqq='';
    } else {
    $qqq=$mul;
    }[/PHP]
    che si colloca dopo il for


  • Moderatore

    Riducendo la funzione a livello base ho trovato l' errore.

    [PHP]
    $oggi = date('Y-m-d');

    function pertour () {
    $datain='2011-09-18';
    $dataout='2011-09-21';
    if ($dataout >= $oggi and $datain <= $oggi){
    return 'Funziona';
    }
    }

    echo pertour();[/PHP]

    Così non funziona, ma se inserisco la riga $oggi dentro la funzione va.
    Va inoltre togliendo il secondo richiamo a $oggi
    [PHP]if ($dataout >= $oggi)[/PHP]

    Avete idea di come mai?


  • ModSenior

    $oggi non è esiste all'interno della funzione, ma è esclusivamente all'esterno.


  • User

    Il motivo è lo scope della variabile $oggi:
    dentro la funzione non è definita e quindi richiamarla ti genera l'errore.

    per utilizzare una variabile esterna alla funzione all'interno della funzione stessa gliela devi "far conoscere", aggiungi dentro alla funzione il codice:
    [PHP]
    global $oggi;
    [/PHP]

    oppure devi creare la funzione passandogli il parametro
    [PHP]
    $oggi = date('Y-m-d');

    function pertour ($param1) {
    $datain='2011-09-18';
    $dataout='2011-09-21';
    if ($dataout >= $param1 and $datain <= $param1){
    return 'Funziona';
    }
    }

    echo pertour($oggi );
    [/PHP]