Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    Funzione in funzione e passaggio di variabili in variabili

    Salve a tutti ho un problema con la creazione e l'esecuzione di una funzione all'interno di una funzione!

    Praticamente io ho questo codice (FUNZIONANTE)
    codice:
    //Estrai l'ordine degli elementi
    			$nomi = $_POST['elementi'];
    
    //Calcola Periodo
    			$begin = new DateTime($_POST['data1']);
    			$end = new DateTime($_POST['data2']);
    			$end = $end->modify( '+1 day' ); 
    			$interval = new DateInterval('P1D');
    			$daterange = new DatePeriod($begin, $interval ,$end);
    
    $count =0
    
    //Compila database
    			foreach ($daterange as $giorno)	{ 	
    			$day = $giorno->format("Y-m-d");
    			$nomifarmacie = addslashes($nomi[$count % count($nomi)]);
    			$query = $pdo->query("UPDATE $tabella_calendario SET Farmacia='$nomifarmacie' WHERE Data='$day'");
    			$count++;
    			}
    Adesso, siccome ho vari Submit in cui avviene ogni volta quasi la stessa cosa ma ogni volta con qualche variabile e operazioni diverse, vorrei creare una funzione ma ho riscontrato vari problemi

    codice:
    //QUESTA FUNZIONE VIENE ESEGUITA CORRETTAMENTE
    function CalcolaPeriodo($DataIniziale, $DataFinale) {
        $begin = new DateTime($DataIniziale);
    	$end = new DateTime($DataFinale);
    	$end = $end->modify( '+1 day' ); 
    	$interval = new DateInterval('P1D');
    	return $Periodo = new DatePeriod($begin, $interval ,$end);
    }
    
    //Il problema risiede in questa funzione qui! Praticamente
    
    
    function Cicla($Periodo, $FarmacieRiordinate, $Query) {
    global $tabella_calendario, $count; //Di queste variabili si pu� fare l'echo quindi sono funzionanti 
    
    print_r($FarmacieRiordinate) //� un array e il print funziona correttamente
     
    foreach ($Periodo as $giorno)	{
    	$day = $giorno->format("Y-m-d");
    
    	$NomiFarmacie = addslashes($FarmacieRiordinate[$count % count($FarmacieRiordinate)]);
    
    echo $day; //� corretto
    echo $NomiFarmacie; //� corretto
    
    
    print_r($Query); //Il problema risiede qui: Posto una porzione di output in basso
    
    $count++;
    	}
    
    }
    
    			$FarmacieRiordinate = $_POST['elementi'];
    			$DataIniziale = $_POST['data1'];
    			$DataFinale = $_POST['data2'];
    			$Query = ("UPDATE $tabella_calendario SET Farmacia='$NomiFarmacie' WHERE Data='$day'");
    
    
    			Cicla(CalcolaPeriodo($DataIniziale, $DataFinale), $FarmacieRiordinate, $Query);
    OUTPUT print_r($Query):

    codice:
    UPDATE calendario SET Farmacia='Array' WHERE Data='1546297200'
    UPDATE calendario SET Farmacia='Array' WHERE Data='1546297200'
    UPDATE calendario SET Farmacia='Array' WHERE Data='1546297200'
    UPDATE calendario SET Farmacia='Array' WHERE Data='1546297200'
    UPDATE calendario SET Farmacia='Array' WHERE Data='1546297200'
    UPDATE calendario SET Farmacia='Array' WHERE Data='1546297200'
    UPDATE calendario SET Farmacia='Array' WHERE Data='1546297200'
    UPDATE calendario SET Farmacia='Array' WHERE Data='1546297200'
    UPDATE calendario SET Farmacia='Array' WHERE Data='1546297200'
    UPDATE calendario SET Farmacia='Array' WHERE Data='1546297200'
    Come posso risolvere? Grazie

  2. #2
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,359
    Secondo me quando passi $Query, la variabile è già stata valutata. Cioè ha già preso il valore finale.

    Codice PHP:
    function Cicla($Periodo$FarmacieRiordinate) {
    global 
    $tabella_calendario$count//Di queste variabili si pu� fare l'echo quindi sono funzionanti 

    print_r($FarmacieRiordinate//� un array e il print funziona correttamente
     
    foreach ($Periodo as $giorno)   {
        
    $day $giorno->format("Y-m-d");

        
    $NomiFarmacie addslashes($FarmacieRiordinate[$count count($FarmacieRiordinate)]);

    echo 
    $day//� corretto
    echo $NomiFarmacie//� corretto

    $Query = ("UPDATE $tabella_calendario SET Farmacia='$NomiFarmacie' WHERE Data='$day'"); // la query deve stare qui.

    print_r($Query); //Il problema risiede qui: Posto una porzione di output in basso

    $count++;
        }


    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  3. #3
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,359
    Oppure se ci tieni a passare la query.

    Codice PHP:
    //QUESTA FUNZIONE VIENE ESEGUITA CORRETTAMENTE
    function CalcolaPeriodo($DataIniziale$DataFinale) {
        
    $begin = new DateTime($DataIniziale);
        
    $end = new DateTime($DataFinale);
        
    $end $end->modify'+1 day' ); 
        
    $interval = new DateInterval('P1D');
        return 
    $Periodo = new DatePeriod($begin$interval ,$end);
    }

    function 
    Cicla($Periodo$FarmacieRiordinate$Query) {
    global 
    $tabella_calendario$count//Di queste variabili si pu� fare l'echo quindi sono funzionanti 

    print_r($FarmacieRiordinate
     
    foreach (
    $Periodo as $giorno)   {
        
    $day $giorno->format("Y-m-d");

        
    $NomiFarmacie addslashes($FarmacieRiordinate[$count count($FarmacieRiordinate)]);

    echo 
    $day
    echo 
    $NomiFarmacie

    $Query str_replace("#day",$day,$Query);
    $Query str_replace("#NomiFarmacie",$NomiFarmacie,$Query);


    print_r($Query);

    $count++;
        }

    }

                
    $FarmacieRiordinate $_POST['elementi'];
                
    $DataIniziale $_POST['data1'];
                
    $DataFinale $_POST['data2'];
                
    $Query = ("UPDATE $tabella_calendario SET Farmacia='#NomiFarmacie' WHERE Data='#day'"); // nota che ho messo # al posto di $


                
    Cicla(CalcolaPeriodo($DataIniziale$DataFinale), $FarmacieRiordinate$Query); 
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  4. #4
    Grazie badaze... ho risolto in questa maniera

    codice:
    function Cicla($Periodo, $FarmacieRiordinate, $Query) {
        global $tabella_calendario, $count;
    
    
        foreach ($Periodo as $giorno)   {
            $day = $giorno->format("Y-m-d");
            $NomiFarmacie = addslashes($FarmacieRiordinate[$count % count($FarmacieRiordinate)]);
    
    
            $realQuery = vsprintf($Query, array($NomiFarmacie, $day));
            print_r($realQuery);
            $count++;
        }
    }
    
    
    $FarmacieRiordinate = $_POST['elementi'];
    $DataIniziale = $_POST['data1'];
    $DataFinale = $_POST['data2'];
    $Query = ("UPDATE $tabella_calendario SET Farmacia='%s' WHERE Data='%s'");
    
    
    Cicla(CalcolaPeriodo($DataIniziale, $DataFinale), $FarmacieRiordinate, $Query);

  5. #5
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,359
    Bene bene.

    Ci sono tanti modi per risolvere un problema.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  6. #6
    Quote Originariamente inviata da badaze Visualizza il messaggio
    Oppure se ci tieni a passare la query.

    Codice PHP:
    //QUESTA FUNZIONE VIENE ESEGUITA CORRETTAMENTE
    function CalcolaPeriodo($DataIniziale$DataFinale) {
        
    $begin = new DateTime($DataIniziale);
        
    $end = new DateTime($DataFinale);
        
    $end $end->modify'+1 day' ); 
        
    $interval = new DateInterval('P1D');
        return 
    $Periodo = new DatePeriod($begin$interval ,$end);
    }

    function 
    Cicla($Periodo$FarmacieRiordinate$Query) {
    global 
    $tabella_calendario$count//Di queste variabili si pu� fare l'echo quindi sono funzionanti 

    print_r($FarmacieRiordinate
     
    foreach (
    $Periodo as $giorno)   {
        
    $day $giorno->format("Y-m-d");

        
    $NomiFarmacie addslashes($FarmacieRiordinate[$count count($FarmacieRiordinate)]);

    echo 
    $day
    echo 
    $NomiFarmacie

    $Query str_replace("#day",$day,$Query);
    $Query str_replace("#NomiFarmacie",$NomiFarmacie,$Query);


    print_r($Query);

    $count++;
        }

    }

                
    $FarmacieRiordinate $_POST['elementi'];
                
    $DataIniziale $_POST['data1'];
                
    $DataFinale $_POST['data2'];
                
    $Query = ("UPDATE $tabella_calendario SET Farmacia='#NomiFarmacie' WHERE Data='#day'"); // nota che ho messo # al posto di $


                
    Cicla(CalcolaPeriodo($DataIniziale$DataFinale), $FarmacieRiordinate$Query); 
    Badaze forse questa sarebbe una soluzione anche migliore per il mio utilizzo ma il problema persiste...ovvero mi restituisce solo ed esclusivamente il primo valore di $NomiFarmacie e di $day ergo ottengo sempre la stessa $query

  7. #7
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,359
    Beh. Succede quando non si puo' testare. Comunque avresti potuto trovare l'inghippo

    Codice PHP:

    $Query2 
    str_replace("#day",$day,$Query);
    $Query2 str_replace("#NomiFarmacie",$NomiFarmacie,$Query);
    // poi usa $Query2 per fare la query
    print_r($Query2); 
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  8. #8
    Quote Originariamente inviata da badaze Visualizza il messaggio
    Beh. Succede quando non si puo' testare. Comunque avresti potuto trovare l'inghippo

    Codice PHP:

    $Query2 
    str_replace("#day",$day,$Query);
    $Query2 str_replace("#NomiFarmacie",$NomiFarmacie,$Query);
    // poi usa $Query2 per fare la query
    print_r($Query2); 
    In questo modo mi replica correttamente solo il secondo str_replace!
    ovvero così come hai scritto mi scrive correttamente $NomiFarmacie mentre #day resta così
    e viceversa
    ovviamente dovrei scrivere

    codice:
    $Query2 = str_replace("#day",$day,$Query);
    $Query3 = str_replace("#NomiFarmacie",$NomiFarmacie,$Query2);
    Ma in questo modo perderei l'utilità che mi avrebbe fatto scegliere questa via!
    La soluzione migliore, a parer mio, sarebbe poter utilizzare
    $realQuery = vsprintf($Query, array($NomiFarmacie, $day);
    e poter scrivere ogni volta l'array corretto con le variabili corrette (cambia poco da quello che sto cercando di ottenere ovvero dichiarare una variabile prima di passarla alla funzione e popolarla correttamente una volta inserita nella funzione)

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 © 2024 vBulletin Solutions, Inc. All rights reserved.