Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    107

    evento legato all'invio di una form

    Ciao a tutti!
    Ho un problema dal quale non riesco a venirne fuori...ho creato una form in php e all'invio (click sul tasto invia) dovrei fare un controllo sulla correttezza dei dati inseriti dall'utente.
    Allora, ho pensato di creare una funzione a parte, sempre in php, che mi faccia il controllo dei dati ricevuti, il problema è che non so come fare per farla partire non appena viene inviato il form.
    So che centra JavaScript, usando onSubmit...ad esempio:

    Codice PHP:
    echo "<form action= " $_SERVER['PHP_SELF'] ." method='post' onSubmit=\"...\">"
    il problema è che non so cosa mettere, o meglio, come metterlo, dopo onSubmit.
    La mia idea era quella di far partire una funzione controllaForm() (che restituisce un boolean, true se il form è corretto, false altrimenti) in seguito all'evento onSubmit; dopodiché, se restituisce true, carica un'altra pagina con i dati ricevuti, altrimenti ricarica la stessa pagina per il re-inserimento dei dati nella form.

    Come posso ottenere il tutto? Cioè la funzione e il form li ho già fatti in php, l'unica cosa è che non so come si usa onSubmit, se vuole codice JavaScript solo o no.

    Grazie per l'aiuto!

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Non puoi, se vuoi farla sull'onclick, la funzione deve essere in javascript.
    Il php può solo controllare i dati dopo che sono stati inviati e ricevuti dalla pagina specificata nell'action.

  3. #3
    io che non sono bravissimo, con la mia risicata esperienza utilizzo sempre javascript per fare questo genere di controlli.
    Cosa mettere... dipende da cosa devi fare...

    sfogliati gli scritp presenti qui e vedi se trovi quello a caso tuo

    link1

    link2

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    107
    Il problema è che so come fare il controllo della form, ma non come impostare il "quando" deve farla, e cioè dopo l'invio della form..per dire mi basterebbe anche poter impostare che in seguito all'evento dell'invio della form una tale variabile booleana $test (impostata a false), diventi true! non so se mi sono spiegato...

    Ma quindi, altro problema simile ma più semplice che ho riscontrato..un banalissimo link per il logout da una sessione. Se, ad esempio, volessi che la sessione termini appena l'utente collegato clicca su questo link, non c'è nessun modo per collegare l'evento onClick con la funzione session_destroy() di php?
    dovrei creare una funzione JavaScript che a sua volta richiami la funzione session__destroy() di php?

    Vi spiego..sono alle prime armi, e php lo sto capendo abbastanza bene, ma non so come fare interagire php con javascript.. :master:

  5. #5
    anche io sono alle prime armi e proprio ieri ho postato qui sul forum uno dei miei primi lavori funzionanti in cui applico il session_destroy per fare il logout di un sistema di login.

    qui

    vedi se può esserti utile...

  6. #6
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Originariamente inviato da pape86
    Il problema è che so come fare il controllo della form, ma non come impostare il "quando" deve farla, e cioè dopo l'invio della form..per dire mi basterebbe anche poter impostare che in seguito all'evento dell'invio della form una tale variabile booleana $test (impostata a false), diventi true! non so se mi sono spiegato...
    Si, ti sei spiegato, ma farlo nel momento in cui premi su onclick, prima che i dati del form vengano inviati, è possibile farlo solo in javascript.
    Se vuoi farlo in php i dati devono venire trasmessi, quindi l'onclick lo puoi tranquillamente togliere (se non fain il controllo anche in js.
    Invii i dati del form col pulsante submit, alla pagina presente nell'action (anche se è la stessa del form) fai leggere i dati dalla variabile $_POST e controlli che sia ciò che ti aspetti.
    Se i dati sono ok setti la variabile a true, altrimenti la lasci false.
    Per tale variabile hai 2 possibilità:
    - se deve essere sempre disponibile la metti in sessione
    - se serve solo quando controlli i dati, la setti a false prima dei controlli e la modifichi dopo nel caso in cui si andato tutto bene.
    ...
    Vi spiego..sono alle prime armi, e php lo sto capendo abbastanza bene, ma non so come fare interagire php con javascript.. :master:
    Come ti ripeto, php può inviare dati a js, ma js non può inviare dati a php.
    Questo perché php viene processato sul server e la pagina viene inviata al client (il browser dell'utente), solo adesso entra in gioco js, ma php ha finito il suo lavoro, non puoi più dirgli nulla su questa pagina.

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    107
    @Alhazred
    ho provato a creare una pagina di transizione, a cui passare tramite action i dati della form, poi da là faccio il controllo se sono corretti e re-indirizzamento ad un'altra pagina se è tutto ok, altrimenti alla pagina con la form per il reinserimento.
    Adesso ho qualche problema con il controllo, visto che non è una form semplice e ho molte variabili..poi se i dati inseriti sono corretti devo anche salvarli sul db, quindi devo ancora lavorarci un po'.
    Altrimenti, quasi quasi, proverei a fare tutto in javascript..però là dovrei capire meglio come si fa perchè non si usano le variabili $_POST, e quindi magari mi guarderò qualche script già fatto.

    @oly1982
    ho letto la tua discussione per quanto riguarda la pagina logout..in effetti non ci avevo pensato, la tua soluzione è molto semplice e non necessita di lavorare con js.


    Grazie ad entrambi! Ciao!

  8. #8
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Originariamente inviato da pape86
    @Alhazred
    ...
    Altrimenti, quasi quasi, proverei a fare tutto in javascript..però là dovrei capire meglio come si fa perchè non si usano le variabili $_POST, e quindi magari mi guarderò qualche script già fatto.
    Per quanto riguarda i controlli direttamente in JS, supponendo:
    - che si tratti di un form di registrazione (ma vale per qualsiasi altra cosa)
    - di chiamare la funzione checkform
    - che il form abbia id="reg" e definito così <form id="reg" action="registrazione.php" method="post">
    - in document.getElementById("reg").cognome.value, "cognome" è il "name" del campo da controllare
    - la funzione focus() rimetterà il cursore nel campo col dato sbagliato
    - invece del pulsante submit, alla fine metti:
    <input type="button" name="invia" value="Registrati" onClick="checkForm()">

    Il codice della funzione js sarà poi strutturato così
    Codice PHP:
    function checkForm(obj) {
       
    //controllo che il campo non sia vuoto (da mettere solo se il campo è obbligatorio)
       
    if((document.getElementById("reg").cognome.value == "") || (document.getElementById("reg").cognome.value == "undefined")) {
          
    alert("Inserire il proprio cognome");
          
    document.getElementById("reg").cognome.focus();
          return 
    false;
       }

    /*********************************************************
    di seguito metti allo stesso modo i controlli per tutti gli altri campi obbligatori
    un "else if" per ogni altro campo
    *********************************************************/

       //se c'è da mettere una password e confermarla (lo stesso vale per l'indirizzo email)
       //questo controlla che siano uguali
       
    else if(document.getElementById("reg").password.value != document.getElementById("reg").passconf.value) {
          
    alert("Le due password inserite non coincidono!\nDigitarle nuovamente");
          
    document.getElementById("reg").password.value "";
          
    document.getElementById("reg").passconf.value "";        
          
    document.getElementById("reg").password.focus();
          return 
    false;
       }

       
    //alla fine, se tutti i controlli sono passati, si fa il submit del form
       
    else {
          
    document.getElementById("reg").submit();
       }

    E' comunque buona norma mantenere i controlli in php, altrimenti a chi visita la pagina, se ha js disabilitato, i controlli non verranno effettuati.

    Edit: in realtà strutturato in questo modo puoi fare a meno dei controlli in php, perché se uno ha js disabilitato non viene neanche effettuato il submit.
    Sarebbe però il caso di mettere un avviso per i visitatori, altrimenti non sanno perché non va l'invio dei dati.

  9. #9
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    107
    Intanto grazie ancora per l'aiuto e la disponibilità...molto gentile!!
    Originariamente inviato da Alhazred
    E' comunque buona norma mantenere i controlli in php, altrimenti a chi visita la pagina, se ha js disabilitato, i controlli non verranno effettuati.
    Beh, se mi dici che è meglio fare il controllo della form in php, allora, visto che l'ho già fatto e in javascript avrei qualche difficoltà, lo lascio così.
    In pratica ho creato una pagina "di passaggio", ad esempio test.php, che la destinataria dell'action della form.
    In questa faccio i vari controlli, riassunti sono più o meno così:


    Codice PHP:
    $formOK=false;
    $formOK=$verifica->verForm(); // verifica correttezza form con una funzione di una classe
    if($formOK) { // se la form è completa e corretta
      
    echo "<script type=\"text/javascript\">alert(\"Form OK!\");</script>";
      
    header("Location: pagina.php");
      exit;
    } else {    
    // se la form non è valida, reindirizzo alla pagina per l'inserimento della form
      
    echo "<script type=\"text/javascript\">alert(\"Form non valida!\");</script>"
      
    header("Location: inserisci_form.php");
      exit;

    Funziona tutto, o quasi...cioè, il controllo lo esegue correttamente e anche il reindirizzamento.
    Volevo, però, aggiungere un messaggio, tipo finestra pop-up di JavaScript, per segnalare all'utente se l'inserimento della form è andata o meno a buon fine. Il problema è che scritto così il messaggio non compare e viene eseguito direttamente il reindirizzamento alla pagina.

    Pensavo tipo di creare altre due variabili di sessione, ad esempio $_SESSION['formOK'] e $_SESSION['formERR'] e settarle rispettivamente al posto delle echo del codice precedente..poi, nelle rispettive pagine di reindirizzamanto (pagina.php e inserisci_form.php) eseguire subito il controllo if(isset($_SESSION['formOK'])) echo "form valido"; e nell'altra if(isset($_SESSION['formERR'])) echo "form non valido"; anche in JS.
    Può andare come soluzione?

    Dato che finora ho creato molte variabili di sessione, posso avere qualche problema? nel senso è una buona norma avere poche variabili di sessione oppure non ci sono limiti?

  10. #10
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Puoi provare a ritardare il redirect così:
    sleep(5); //è in secondi
    header("Location: inserisci_form.php");

    Per quanto riguarda le variabili in sessione: penso che si parli al più delle decine per quanto riguarda l'ordine di grandezza delle variabili di sessione che usi, quindi nessun problema.
    Ad ogni modo, invece che introdurne 2 te ne basterebbe una sola da impostare a true o false e fare una cosa del tipo
    Codice PHP:
    if(isset($_SESSION['formOK']) && $_SESSION['formOK']) { //se è settata ed è true
       
    echo "Tutto ok";
    }
    else (isset(
    $_SESSION['formOK']) && !$_SESSION['formOK']) { //se è settata ed è false
       
    echo "Errore";


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.