Kostur za jednostavnu Ajax kontakt formu



  • Ovo moze sigurno da se uradi na vise nacina, ali ovo je jedan koji je meni najlaksi:
    U functions.php ili vec negde ubacimo:

    
    session_start();
    $_SESSION["nonce"] = wp_create_nonce( '23848_nonce' );
    $_SESSION["ajax_url"]=admin_url( 'admin-ajax.php' );
    
    add_action('wp_ajax_proccess_form_23848', 'proccess_form_23848');
    add_action('wp_ajax_nopriv_proccess_form_23848', 'proccess_form_23848');
    
    function proccess_form_23848(){
    		$nonce = $_REQUEST['_wpnonce'];
    		if ( ! wp_verify_nonce( $nonce, '23848_nonce' ) ) {
    			die( 'Sigurnosna greska.' ); 
    		} 
    parse_str(sanitize_text_field( $_POST['data'] ),$data);	
    
    // $data sadrzi podatke uradis nesto sa njima
    
    echo 'Pozdravna poruka';
    die;
    }
    

    Sesiji se dodeljuje info o url adresi WP handlera za ajax i nonce kod koji sluzi za prevencoju XSS-a. Potom se pravi action koji ce WP ajax handleru reci koju finkciiju da koristi za hendlovanje upita i naravno sama funkcija.
    Unutar templejta ili gde god da treba da se form prikaze unesite:

    <div id="poruka">
    	<form id="form">
    		First name:<br>
    		<input type="text" name="firstname" value="Mickey">
    		<br>
    		Last name:<br>
    		<input type="text" name="lastname" value="Mouse">
    		<br><br>
    		<input type="submit" value="Submit">
    	</form>
    </div>
    
    <script>
    jQuery("#form").submit(function(e) {
        e.preventDefault();
        // validacija
    	posalji_form(jQuery(this));
    });
    
    function posalji_form(form){
    	var ajax_url= "<?php echo $_SESSION['ajax_url'] ?>";
    	var nonce= "<?php echo $_SESSION['nonce'] ?>";
    	var response=jQuery('#poruka');
    	 jQuery.ajax({
              url: ajax_url,
              action:'proccess_form_23848',
    		  data: form.serialize()
    		},
              dataType: 'HTML',
    		  beforeSend: function() {
    			response.html('<img src="nekaloadingslika.gif">');
    		  },
              success:function(data){
    				 response.html(data);
    				 },
              error: function(errorThrown){
                  console.log(errorThrown);
              }
         });
    }
    </script>
    

    Form moze biti bilo sta, ovde je neka osnovna verzija bez clientside validacije. Princip je prost. Na submit formulara umesto da posaljemo form izvrsava se funkcija posalji_form sa parametrom formulara koji smo napravili. Unutar finkcije citamo podatke o url-u i nonce polju ranije dodeljene u functions.php ili negde drugde. Potom radimo ajax call. unutar funkcije beforeSend izvrsavamo neki je (ovde se koristi neka loader slika koja popuni prostor za poruku i pritom izbrise form, moze se naravno koristiti i append() ili nesto trece).
    Po ajax upitu izvrsi se ili funkcija success ili se loguje greska u konzoli sa error. U slucaju uspeha varijabla data sadrzi nas html iz echo-van php funkcije echo 'Pozdravna poruka'; a moze biti bilo sta i na tom mestu mozemo poslati mail ili vec nesto trece…



  • Sta ce ti informacija o nonce i adresi u sesiji kada se ta informacija vrlo lako moze dobiti putem JS-a?

    U svakoj laži ima pola istine, što znači da se laž sastoji od 1&#x2F;2 koja je istina i 1&#x2F;2 koja je laž. Ako na ovu drugu polovinu primenimo aksiomu da u svakoj laži ima pola istine, zaključujemo da u prvobitnoj laži ima 3&#x2F;4 istine, a 1&#x2F;4 laži. Matematičkom indukcijom dalje lako dolazimo do rezultata da je limes istinitosti svake laži = 1, tj. da je u pitanju sušta i neokaljana istina.

    0


  • Moze naravno, tako sam i radio ranije, ali ovo je nekako elegantnije…


Log in to reply