• User Attivo

    Funzione php che restituisce text form

    Ciao a tutti,
    vorrei migliorare parte del codice di un sito che avevo creato tempo fa.

    La pagina principale chiama una funzione. La funzione esegue delle operazioni.

    Se tutte le operazioni vanno a buon fine allora la funzione restituisce un'array che viene creata in modo automatico.

    Se le operazioni non vanno a buon fine allora vi è un header location: pagina-di-errore.php seguito da un exit();

    Io vorrei che al posto del redirect venga chiesto all'utente di compilare alcuni campi di testo con i quali andrò a popolare l'array che verrà inserita dentro al return($array) della funzione.

    Come posso aggiungere questa possibilità di scrivere in questi campi e prelevare il testo senza "uscire" dalla funzione? Serve per forza usare AJAX? Ma in che modo?

    Non vi sto chiedendo del codice ma che tipo di approccio utilizzare per risolvere il problema.

    Grazie


  • User Attivo

    Direi che AJAX non c'entra molto: semplicemente in pagina-di-errore.php ci metti il form che i tuoi utenti dovranno compilare e poi passi quello.

    Ricorda che le "funzioni" PHP non hanno niente a che vedere con le "pagine" web: forse ti sarebbe utile studiare un po' il pattern Model-View-Controller (cerca "MVC" su Google)


  • User Attivo

    Ma nel momento in cui io faccio l'header location: pagina-di-errore.php esco dalla funzione che dovrebbe ritornarmi l'array quindi non può funzionare come dici tu....!

    Non penso di avere confusione tra pagina e funzione. Quando scrivo funzione intendo una funzione, mentre quando scrivo pagina intendo pagina.....

    
    function crea array($param1,$param2){
      //esegui operazioni
      
      if (operazioni eseguite correttamente){
        //crea array in modo automatico
      }else{
        //crea array in modo manuale chiedendo all'utente di compilare un form
      }
    
      return($array);
    
    }
    
    

    Che soluzione posso usare per richiedere all'utente di creare lui la matrice in modo poi da poterla mandare al return($array) ?

    Grazie


  • User Attivo

    🙂

    Invece a mio modo di vedere le idee chiarissime su "funzioni" e "pagine" non ce le hai e soprattutto sulla differenza fra client-side e server-side.

    Una pagina HTML (qualunque essa sia) è un documento "statico" che tu invii all'utente.

    Una "funzione" (o uno script) è un pezzo di codice che viene eseguito dal server web e che produce (molto probabilmente) la pagina HTML di cui sopra.

    Nel momento in cui tu invii la pagina il tuo script ha finito la sua esecuzione quindi tu sei fuori da qualsivoglia funzione, ciclo, classe o qualsiasi altra cosa che riguarda il lato server (cioè lo script).

    Per fare quello che vuoi tu devi allora "spezzare" la procedura: ad esempio fai il redirect alla pagina di errore passando i parametri nella query string (se possibile), dopodiché raccogli i dati utente in un form e li ripassi (tramite post, ad esempio) allo script che li processa.

    Ma non puoi far intervenire il client (l'utente con il suo browser) durante l'esecuzione dello script sul server.

    Spero di essere stato un po' più chiaro... 😉


  • User Attivo
    Ma non puoi far intervenire il client (l'utente con il suo browser) durante l'esecuzione dello script sul server.
    

    Con javascript si...è proprio per questo che avevo pensato di usare qualcosa di asincrono per creare manualmente l'array.

    Per fare quello che vuoi tu devi allora "spezzare" la procedura: ad esempio fai il redirect alla pagina di errore passando i parametri nella query string (se possibile), dopodiché raccogli i dati utente in un form e li ripassi (tramite post, ad esempio) allo script che li processa.

    Lo "script che li processa" è una funzione che riceve $param1 e $param2 in ingresso e in uscita ha l'array. Non posso passare l'array creata manualmente alla funzione!

    Vabbè visto che non ci stiamo capendo e che di ajax non sono un grande esperto mi sa che modificherò ancora più a monte il codice del sito e risolverò in altro modo...

    Grazie ciao


  • User Attivo

    @zanna86 said:

    Con javascript si...è proprio per questo che avevo pensato di usare qualcosa di asincrono per creare manualmente l'array.
    NO! 😉

    javascript = client (browser)
    PHP = server

    E non c'è AJAX che tenga, AJAX è solo un modo di fare l'aggiornamento di pezzi di pagina (<div>) a prescindere dal resto, non c'entra NULLA con il tuo script PHP e l'architettura client/server

    @zanna86 said:

    Lo "script che li processa" è una funzione che riceve $param1 e $param2 in ingresso e in uscita ha l'array. Non posso passare l'array creata manualmente alla funzione!
    E perchè no? Dimentica il concetto di funzione e passa a quello di script: tu puoi passare quello che ti pare ad uno script (via POST o GET, ad esempio) e dunque puoi far agire il tuo script in maniera diversa a seconda dell'input che riceve (proprio come - questo sì... - una funzione :2:


  • User Attivo

    Non sono esperto di ajax, ma con ajax puoi fare molte più cose che aggiornare semplici div!
    Per esempio con delle richieste GET puoi richiamare in modo asincrono un'altra pagina e farci tante belle cose!

    La soluizione che mi hai proposto è quella che avevo in mente.....ma dovrei rivoluzionare un pò tutto il codice dell'intero sito perchè quella funzione creaarray viene usata da diverse pagine e con scopi diversi...

    Vabè...se in altri modi non è possibile allora mi metterò con tanta pazienza a rifare un pò tutto..!