formularz rejestracji:
<img src="img/mono-icons/userplus32.png" class="box-icon" alt="pic"/> <form id="registerForm" action="#" method="post"> <input type="hidden" value="includes/fast_register.php" name="send_register_form" id="send_register_form" /> <fieldset> <div> <input name="fast_register_nick" id="register_nick" type="text" class="form-poshytip" title="Wpisz swój nick" /> </div> <div> <input name="fast_register_email" id="register_email" type="text" class="form-poshytip" title="Wpisz swój email" /> </div> </fieldset> </form>
register_form.js (odbiera dane i przekazuje je dalej metodą post do pliku fast_register.php)
$(document).ready(function(){ // hide messages $("#register_error").hide(); $("#register_success").hide(); // on submit... $("#registerForm #register_submit").click(function() { $("#register_error").hide(); //required: //register_name var name = $("input#register_nick").val(); if(name == ""){ $("#register_error").fadeIn().text("Wpisz swój nick."); $("input#register_nick").focus(); return false; } // register_email var email = $("input#register_email").val(); if(email == ""){ $("#register_error").fadeIn().text("Wpisz swój email."); $("input#register_email").focus(); return false; } // send mail php var sendMailUrl = $("#send_register_form").val(); // data string var dataString = 'fast_register_nick='+ name + '&fast_register_email=' + email; $.ajax({ type:"POST", url: sendMailUrl, data: dataString, success: function(response){ var res = $.parseJSON(response); if(res.error !== undefined){ $("#register_error").fadeIn().text(res.error); return false; } else { if(res.message) { $("#register_success").fadeIn(); $("#registerForm").fadeOut(); } } } }); }); // on success... return false; });
fast_register.php (rejestracja konta)
<?php include('config.php'); include('function.php'); if($_POST) { $nick = protect($_POST['fast_register_nick']); $email = protect($_POST['fast_register_email']); $haslo = protect(passwordGenerator(6)); if($result!=0) { } else { $from = 'Rejestracja na Moja Strona.'; $subject = "Rejestracja na cake made!"; $headers = "MIME-Version: 1.0\r\n"; $headers .= "Content-type: text/html; charset=UTF-8\r\n"; $headers .= "From: <".$from. ">" ; $msg = "Witaj, zarejestrowałeś się na stronie MadeCake! O to twoje wygenerowane hasło: $haslo <br>Oczywiście możesz je zmienić w panelu!"; } } else { } ?>
No i problem jest taki że jeżeli uzupełnię formularz rejestracji, po czym kliknę button to skrypt wykonuję się 2 razy i nie mam pojęcia czemu;/ W chromie w zakładce Network widzę, że po kliknięciu buttona otwiera się 2 razy plik fast_register.php, który powoduje wrzucenie do bazy danych danego użytkownika 2 razy. To samo jest z login. Formularz, javascript, oraz skrypt logowania jest podobny i również w network widzę że plik który nadaję sesje użytkownika otwiera się 3 razy, każdy z tymi samymi danymi z formularza przesłane postem. Oczywiście taki problem wydłuża czas oczekiwania na pojawienie się odpowiedniego tekstu z błędem (jeżeli użytkownik o podanym nicku istnieje, lub są złe wprowadzone dane dla danego użytkownika podczas logowania). Proszę o pomoc
Chyba doszedłem do tego, że prawdopodobnie kawałek kodu z .js przy lini success: w ajaxie jest źle napisany. I myślę że przez tą funkcję otwiera się 2 razy plik i skrypt wykonuje się dwa razy.
Oryginalnie było tak:
$.ajax({ type:"POST", url: sendMailUrl, data: dataString, success: success() }); }); // on success... function success(){ $("#contact_success").fadeIn(); $("#contactForm").fadeOut(); }
i jak jest to tak napisane to wykonuje się raz skrypt.
czytałem też o funkcji unbind, ale nie działa ona