Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][JavaScript][PHP]Sprawdzanie w bazie danych czy coś istnieje
Forum PHP.pl > Forum > Przedszkole
goukan
Witam. Mam formularz w html (index.php):
  1. <script type="text/javascript" src="js/register_form.js"></script>
  2. <form id="registerForm" action="#" method="post">
  3. <input type="hidden" value="includes/fast_register.php" name="send_register_form" id="send_register_form" />
  4. <div>
  5. <input name="fast_register_nick" id="register_nick" type="text" class="form-poshytip" title="Wpisz swój nick" />
  6. <label>Nick</label>
  7. </div>
  8. <div>
  9. <input name="fast_register_email" id="register_email" type="text" class="form-poshytip" title="Wpisz swój email" />
  10. <label>Email</label>
  11. </div>
  12. <p><input type="button" value="Rejestruj" name="register_submit" id="register_submit" /> <span id="register_error" class="warning">Message</span></p>
  13. </form>
  14.  
  15. <p id="register_success" class="success">Gratulacje! Zarejestrowałeś się.</p>


jak widać korzystam tu z javy script w którym jest(register_form.js) który wysyła metodą post dane do fast_register.php:

  1. $(document).ready(function(){
  2.  
  3. // hide messages
  4. $("#register_error").hide();
  5. $("#register_success").hide();
  6.  
  7. // on submit...
  8. $("#registerForm #register_submit").click(function() {
  9. $("#register_error").hide();
  10.  
  11. //required:
  12.  
  13. //register_name
  14. var name = $("input#register_nick").val();
  15. if(name == ""){
  16. $("#register_error").fadeIn().text("Wpisz swój nick.");
  17. $("input#register_nick").focus();
  18. return false;
  19. }
  20.  
  21. // register_email
  22. var email = $("input#register_email").val();
  23. if(email == ""){
  24. $("#register_error").fadeIn().text("Wpisz swój email.");
  25. $("input#register_email").focus();
  26. return false;
  27. }
  28.  
  29. // send mail php
  30. var sendMailUrl = $("#send_register_form").val();
  31.  
  32. // data string
  33. var dataString = 'fast_register_nick='+ name
  34. + '&fast_register_email=' + email;
  35.  
  36. // ajax
  37. $.ajax({
  38. type:"POST",
  39. url: sendMailUrl,
  40. data: dataString,
  41. success: success()
  42. });
  43. });
  44.  
  45. // on success...
  46. function success(){
  47. $("#register_success").fadeIn();
  48. $("#registerForm").fadeOut();
  49. }
  50.  
  51. return false;
  52. });
  53.  


oraz (fast_register.php):
  1. <?php
  2. include('config.php');
  3. include('function.php');
  4. $data = date("Y-m-d H:i");
  5. $nick = protect($_POST['fast_register_nick']);
  6. $email = protect($_POST['fast_register_email']);
  7. $haslo = protect(passwordGenerator(6));
  8. mysql_query("insert into uzytkownik values('','$nick','$haslo','$email','$data','')");
  9.  
  10. ?>


W tym formularzu jeżeli ktoś nie wpiszę nicku i emaila to wyskakuje w miejscu "register_error" odpowiednia wiadomość która jest zapisana w pliku js.
Jednak ja chciałbym sprawdzić czy w bazie danych np nie istnieje już użytkownik o podanym nicku w $_POST['fast_register_nick'];
i wypisanie błędu w miejscu "register_error". Nie mam pojęcia jak to zrobić. pomógłby ktoś?
Jeśli ktoś chce zobaczyć jak to wygląda to mogę podać linka do dema.
I mam jeszcze jeden problem z tym. Ta szybka rejestracja ogólnie działa, ale dodaje mi 2 wpisy do bazy danych z rejestracją uzytkownika;/
werdan
W fast_register.php dajesz najpierw sprawdzenie czy user o danym nicku juz istnieje.
Jesli tak, to jako odpowiedz ajax, dajesz info o tym, jesli nie - to skrypt wykonuje sie dalej, czyli dodajesz usera do bazy.

Daj link do demka, moze byc na PW.
goukan
rozumiem że mam zrobić mniej więcej tak:
jeśli użytkownik nie istnieje
{
zarejestruj
}
else
{
odpowiedź ajax
}

ale jak zrobić taką odpowiedź ajax która zwróci mi do pliku index.php w miejsce "register_error" odpowiedni tekst
werdan
w fast_register.php robisz:

jesli (user istnieje) to
  1. return print json_decode(array("error"=>"Podany nick jest już zarezerwowany"));



a w register_form.js

  1. function success(response){
  2. var response = $.parseJSON(response);
  3. if(response.error){
  4. $("#register_error").fadeIn().text(response.error);
  5. return false;
  6. } else {
  7. $("#register_success").fadeIn();
  8. $("#registerForm").fadeOut();
  9. }
  10.  
  11. }
goukan
jak wklejam twojąfunkcję succes to po wpisaniu w formularzu danych i kliknięciu "rejestruj" nic się nie robi ;/
werdan
Coś sie pojawia na konsoli? Co wraca ajaxem?
goukan
kompletnie nic nie zwraca. nawet nie da się wcisnąć buttona wysyłającego formularz.
werdan
Skoro wczesniej działo, a teraz nie, a tym bardziej ze nie zmieniałes nic w obsłudze clicka tego buttona - to powinien byc bład na consoli. Daj obecny kod.
goukan
fast_register.php
  1. <?php
  2. include('config.php');
  3. include('function.php');
  4. if($_POST)
  5. {
  6. $data = date("Y-m-d H:i");
  7. $nick = protect($_POST['fast_register_nick']);
  8. $email = protect($_POST['fast_register_email']);
  9. $haslo = protect(passwordGenerator(6));
  10. $sql = mysql_query("select * from uzytkownik where username='$nick'");
  11. $result = mysql_num_rows($sql);
  12. if($result!=0)
  13. {
  14. return print json_decode(array("error"=>"Podany nick jest już zarezerwowany."));
  15. }
  16. else
  17. {
  18. mysql_query("insert into uzytkownik values('','$nick','$haslo','$email','$data','')");
  19. }
  20. }
  21. else
  22. {
  23. echo 'Nie masz tu wstępu kolego.';
  24. }
  25. ?>


register_form.js
  1. $(document).ready(function(){
  2.  
  3. // hide messages
  4. $("#register_error").hide();
  5. $("#register_success").hide();
  6.  
  7. // on submit...
  8. $("#registerForm #register_submit").click(function() {
  9. $("#register_error").hide();
  10.  
  11. //required:
  12.  
  13. //register_name
  14. var name = $("input#register_nick").val();
  15. if(name == ""){
  16. $("#register_error").fadeIn().text("Wpisz swój nick.");
  17. $("input#register_nick").focus();
  18. return false;
  19. }
  20.  
  21. // register_email
  22. var email = $("input#register_email").val();
  23. if(email == ""){
  24. $("#register_error").fadeIn().text("Wpisz swój email.");
  25. $("input#register_email").focus();
  26. return false;
  27. }
  28.  
  29. // send mail php
  30. var sendMailUrl = $("#send_register_form").val();
  31.  
  32. // data string
  33. var dataString = 'fast_register_nick='+ name
  34. + '&fast_register_email=' + email;
  35.  
  36. // ajax
  37. $.ajax({
  38. type:"POST",
  39. url: sendMailUrl,
  40. data: dataString,
  41. success: success()
  42. });
  43. });
  44.  
  45. // on success...
  46. function success(){
  47. $("#register_success").fadeIn();
  48. $("#registerForm").fadeOut();
  49. }
  50.  
  51. return false;
  52. });
  53.  

i jak zamieniam funkcję success na twoją to nie chce się nawet wcisnąć button w celu wysłania formularza, a jak jest tak jak w tej chwili to formularz wysyła, tworzy się konto jeśli nie ma takiej nazwy w bazie danych, ale jak jest to powinno wysyłać ten json_decode i chyba wysyła bo do bazy danych nic się nie dodaje.
werdan
Daj tak jak było

  1. function success(response){
  2. var response = $.parseJSON(response);
  3. if(response.error){
  4. $("#register_error").fadeIn().text(response.error);
  5. return false;
  6. } else {
  7. $("#register_success").fadeIn();
  8. $("#registerForm").fadeOut();
  9. }
  10.  
  11. }



i dopisz tu argument funkcji:

  1. $.ajax({
  2. type:"POST",
  3. url: sendMailUrl,
  4. data: dataString,
  5. success: success(response)
  6. });

Zapomniałem o tym.
goukan
tak też robiłem i ciągle to samo ;/
werdan
To debuguj! biggrin.gif
Powstawiaj console.log() i patrz co sie tam dzieje.

  1. function success(response){
  2. console.log("response: ", response);
  3. var response = $.parseJSON(response);
  4. console.log("response.parse: ", response);
  5. if(response.error){
  6. $("#register_error").fadeIn().text(response.error);
  7. return false;
  8. } else {
  9. $("#register_success").fadeIn();
  10. $("#registerForm").fadeOut();
  11. }
  12.  
  13. }

Wklej co ci wyszlo.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.