Richiamare funzione jquery all'invio del form php

  • Creatore Discussione Creatore Discussione idrev
  • Data di inizio Data di inizio

idrev

Utente Attivo
8 Ott 2010
45
0
0
Salve, con l'aiuto di Borgo Italia sono riuscito a creare un form in php come volevo, l'inghippo sta nel fatto che quando invio il form mi ricarica la pagina quindi dovrei fare in modo che quando ricarica la pagina mi esegua una funzione che ho già creato e che uso già...in pratica invio il form, si ricarica la pagina e invece di restare su, deve andare all'ancora dove si trova il form...ma di preciso non so come inserire la funzione nel form php...qualcuno mi da un mano ?

questo il form che posto nel caso possa servire a qualcuno

PHP:
<?php 
if(isset($_POST['invia'])){//verifico che sia stato premuto il submit 
    //metto un messaggio di errore a vuoto 
    $ok_ko=""; 
    //leggo i vari input e li verifico 
    $nome=trim(strip_tags($_POST['nome']));//con stip tag tolgo i tag html 
    $cognome=trim(strip_tags($_POST['cognome'])); 
    $mittente=trim(strip_tags($_POST['mittente'])); 
    $oggetto=trim(strip_tags($_POST['oggetto'])); 
    //nel messaggio trasformo gli eventuali \n in br e non li tolgo, gli altri li elimino 
    $messaggio=trim(strip_tags(nl2br($_POST['messaggio']),"<br> <br />")); 
    $allegato_name=$_FILES['allegato']['name']; 
    //inizio i controlli 
    if($nome == ""){ 
        $ok_ko.="il nome &eacute; obbligatorio<br>"; 
    } 
    if($cognome == ""){ 
        $ok_ko.="il cognome &eacute; obbligatorio<br>"; 
    } 
    if(!filter_var($mittente, FILTER_VALIDATE_EMAIL)){ 
        $ok_ko.="l'indirizzo email &eacute; obbligatorio<br>o indirizzo non valido<br>"; 
    } 
    if($messaggio =="" || strlen($messaggio)<10){ 
        $ok_ko.="non hai scritto il messaggio<br>o troppo corto, minimo 10 caratteri<br>"; 
    } 
    $ammessi=array('doc', 'docx', 'pdf', 'txt');//puoi aggiungerne o elimininarne 
    $estensione=pathinfo($allegato_name, PATHINFO_EXTENSION);//ricavo l'estenzione del file 
    if(!in_array($estensione,$ammessi)){//verifico se l'estenzione è tra le ammesse 
        //non c'è quindi vuoto tutto 
        $allegato_name =""; 
        $allegato_si_no="non c'&eacute; allegato"; 
    }else{ 
        //e lo carico (qui se non caricato metto solamente come se fosse vuoto o errato) 
        if(move_uploaded_file($_FILES['allegato']['tmp_name'], $_FILES['allegato']['name'])){ 
            $allegato_si_no="allegato: ".basename($allegato_name); 
        }else{ 
            $allegato_name =""; 
        $allegato_si_no="non c'&eacute; allegato"; 
        } 
    }  
    //a questo punto verifico il messaggio di errore 
    //se è rimasto vuoto non sono stati fatti errori quindi posso iniziare a spedire 
    if($ok_ko==""){ 
        $destinatario="[email protected]"; //qui le tua email 
        require_once "phpmailler/class.phpmailer.php";//richiamo la classe (verifica il percorso) 
        // e comincio ad istanziarla 
        $Emailmessaggio = new PHPmailer(); 
        $Emailmessaggio->SetLanguage('it','language/'); //messo italiano, ma la scelta è vasta 
        $Emailmessaggio->IsHTML(true); // invio l'email in formato HTML 
        $Emailmessaggio->AddAddress($destinatario); 
        $Emailmessaggio->FromName= "tuo_sito";//da dove ti arriva il messaggio, cioè dal form del tuo sito 
        $Emailmessaggio->AddReplyTo($mittente,"");//a chi rispondere es. con il rispondi di outlook 
        $Emailmessaggio->Subject=$oggetto;//oggetto dell'email 
        //preparo il testo che ti verrà inviato 
        $testo="<hr>"; 
        $testo.="Nome: $nome<br>";
		$testo.="Cognome: $cognome<br>";
		$testo.="email: <a href=\"mailto:$mittente\">$mittente</a><br>";
        $testo.= "il ".date("d.m.Y H:i:s")."<hr>"; 
        $testo.="Messaggio: $messaggio<hr>Allegato: $allegato_si_no"; 
    	$Emailmessaggio->Body=$testo; 
        //preparo l'allegato se c'è o se non l'ho eliminato 
        if($allegato_name !=""){ 
            $Emailmessaggio->AddAttachment($allegato_name); 
        } 
        //ora dovrebbe essere tutto pronto per l'invio 
        if(!$Emailmessaggio->Send()){ //errore di trasmissione 
              $ok_ko="c'&eacute; stato un errore di trasmissione, riprova pi&ugrave; tardi<br>";
        }else{ //invio avvenuto 
              $ok_ko="grazie di averci contattato, sarai richiamato al pi&ugrave; presto<br>";
        } 
    } 
    //quindi mostro il messaggio di errore o di invio (a te sistemarlo graficamente) 
    echo $ok_ko;
    //e ritorno, dopo 4 secondi per dare il tempo di leggere il messaggio al form pulito 
    echo "<meta http-equiv='Refresh' content='4; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>"; 
}else{ 
?> 
<form action="<?php htmlspecialchars($_SERVER['PHP_SELF']);?>" method="POST" enctype="multipart/form-data"> 

   
    <span id="sprytextfield1">
   <input type="text" name="nome" class="nome" /> 
   <span class="textfieldRequiredMsg">È obbligatorio specificare un valore.</span></span>
   
   <span id="sprytextfield2">
    <input type="text" name="cognome"  class="cognome"/> 
   <span class="textfieldRequiredMsg">È obbligatorio specificare un valore.</span></span>
   
   <span id="sprytextfield3">
    <input type="text" name="mittente" value="" class="email"/> 
    <span class="textfieldRequiredMsg">È obbligatorio specificare un valore.</span><span class="textfieldInvalidFormatMsg">Formato non valido.</span></span>
   
   
     
   <!-- <input type="text" name="oggetto" value="" />--> 
     
     
     <span id="spryselect1">
  <select name="oggetto" id="subject" style="color:#797b6e; margin-bottom:30px; width:340px; height:30px;" tabindex="4">
    <option value="" selected="selected">Choose</option>
    <option value="Question">Question</option>
    <option value="Business">Business</option>
    <option value="Work with us">Work with us</option>
  </select>
   <span class="selectRequiredMsg"></span></span>
   
    <span id="sprytextarea1">  
    <textarea cols="40" rows="4" name="messaggio"></textarea> 
    <span class="textareaRequiredMsg">È obbligatorio specificare un valore.</span></span> 
   
  
   <input type="text" value="doc - docx - txt - pdf" id="fileName" class="file_input_textbox" readonly="readonly" style="width:225px; height:29px;"/>
 
<div class="file_input_div">
  <input type="button" value="Select files" class="file_input_button" />
  <input type="file" name="allegato" class="file_input_hidden" onchange="javascript: document.getElementById('fileName').value = this.value" />
</div>
        
  <div style="font-size:10px; margin-top:30px; margin-bottom:30px;float:left;">
  <input  class="acconsento" name="acconsento" type="checkbox" value="acconsento al trattamento dei miei dati personali" checked="checked">
  I agree to the treatment of my personal data</div>
  <div style="float:right;">
  <input type="reset" value="Reset" id="submit" tabindex="7" class="pulsanteinv">
  <input type="submit" name ="invia" value="Sign up" id="submit" tabindex="8" class="pulsanteinv"></div>
     
     
   
  
</form> 
<!--qui ci andrebbe un link per uscire dalla pagina --> 
<?php 
}


questa invece la funzione che deve fare una volta che ha inviato il form

PHP:
$('html,body,,main,header,griglia').animate({ scrollTop: $("#contact").offset().top },'slow');

Ho provato a richiamarla sul pulsante submit ma non mi funziona
 
Ultima modifica:
Ciao, nello script che hai postato non vedo il richiamo alla funzione JQuery nel tasto submit.
Bada bene: per implementare il framework di Javascript "JQuery" devi prima richiamare
il file del framework con estensione min possibilmente poi devi richiamare la funzione dal tasto.
Tuttavia non ho capito cosa vuoi che faccia il form al click del tasto submit.
Vuoi che resti dove si trova o vuoi che si sposti in una data posizione ?
 
Ho provato sia a mettere la funzione nel php direttamente sia sul pulsante submit in modo che mi faccia determinati movimenti e azioni ma non mi funziona, non risponde al comando cosa che invece non succede per un'altro pulsante dove uso la stessa funzione e va tranquillamente.

Questa la funzione da js esterno sul pulsante submit
PHP:
$("#submit").click(
      function() {
		 $("#s1").slideUp();
		$('html,body,,main,header,griglia').animate({ scrollTop: $("#contact").offset().top },'slow');
		});

e nel messaggio precedente la mia prova ad implementarlo nel php direttamente.


In ogni caso quello che voglio ottenere è questo: Ho creato un sito in un'unica pagina dividendo le varie sezioni incolonnate e la sezione contact con il form si trova alla fine della pagina. Il problema che mi crea il form è che quando lo compilo e lo invio questo mi riporta in cima alla pagina e non mi permette di vedere i messaggi di risposta del form, se non scrollando fino alla sezione. La soluzione potrebbe essere o che non vada all'inizio ma che resti fermo li, ma sono troppo poco esperto di php per farlo solo io, oppure inserire un richiamo alla funzione jquery che mi riporta la pagina a quel form una volta che è stato inviato, ma anche in questo caso non saprei preciso dove andare ad inserire la stringa js nel php, oppure altre soluzioni da me non vagliate ancora.
 
Ciao, per risolvere il tuo problema devi utilizzare una chiamata Ajax con JQuery
e mostrare a video o un semplice alert al termine della compilazione dei campi
o una stringa dinamica all'interno di un div.
 
forse puoi risolvere semplicemente con le ancore dell'HTML
HTML:
<a name="ancora"></a>
<form action="pagina.php#ancora" method="post">
 
Ciao criric, valida soluzione ( ma mostrerebbe un salto )
e dovrebbe collegare l'ancora al submit del form.
Molto più professionale richiamare Ajax con JQuery.
 
Ho risolto impostando i messaggi di risposta in finestre popup...così anche se va su almeno vedo i messaggi
 

Discussioni simili