Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> formularz + js
attimo
post
Post #1





Grupa: Zarejestrowani
Postów: 115
Pomógł: 6
Dołączył: 23.01.2010

Ostrzeżenie: (0%)
-----


Witam,

Chce zrobić formularz który przy błędnym wpisaniu któregoś z pól nie będzie odświeżał strony tylko wyświetli komunikat gdzie znajduje się błąd.

Formularz wygląda tak:
  1. <form action = "<? echo $_SERVER['PHP_SELF'];?>"method = "post" name="forma" onsubmit="sprawdz()" >

poniżej pola np.
  1. <input type='text' name='imie'/>
  2. <input type='submit' name='ok' value='ok'/>


kod js

[JAVASCRIPT] pobierz, plaintext
  1. <script type="text/javascript">
  2. function sprawdz()
  3. {
  4. var imie = document.forms['forma']["imie"].value;
  5. if (imie == "")
  6. {
  7. alert("nic nie wpisales");
  8. }
  9. }
  10. </script>
[JAVASCRIPT] pobierz, plaintext


Nie sugerujcie się treścią to tylko prosty przykład opisujący mój problem polegający na tym, że strona się odświeża a chce aby wyświetlił sie tylko błąd bez odświerzania.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
kur3k
post
Post #2





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 28.02.2010
Skąd: Stargard Szczeciński

Ostrzeżenie: (0%)
-----


Nie piszę w JS, jednak bym wrzucił to w pętle ;>

Ale pamiętaj, że nie każdy obsługuje JS.

Masz w PHP
  1. <?php
  2. if (empty($_POST['submit'])) {
  3. echo "<form method=\"post\" action=\"\">
  4. <table summary=\"Formularz zamówienia\" class=\"formularz\">
  5. <tr>
  6. <td>Imię, nazwisko:</td>
  7. <td><input type=\"text\" name=\"imie\" class=\"kontakt_pola\" /></td>
  8. </tr>
  9. <tr>
  10. <td>Numer kontaktowy:</td>
  11. <td><input type=\"text\" name=\"kontakt\" class=\"kontakt_pola\" /></td>
  12. </tr>
  13. <tr>
  14. <td>Adres e-mail:</td>
  15. <td><input type=\"text\" name=\"email\" class=\"kontakt_pola\" /></td>
  16. </tr>
  17. <tr>
  18. <td>Wiadomość:</td>
  19. <td><textarea name=\"tresc\" rows=\"\" cols=\"\" class=\"kontakt_tresc\"></textarea></td>
  20. </tr>
  21. <tr>
  22. <td></td>
  23. <td><input type=\"submit\" name=\"submit\" value=\"Wyślij\" class=\"kontakt_przycisk\" /> <input type=\"reset\" value=\"Usuń\" class=\"kontakt_przycisk_dwa\" /></td>
  24. </tr>
  25. </table>
  26. </form>"; }
  27. elseif (!empty($_POST['imie']) && !empty($_POST['kontakt']) && !empty($_POST['email']) && !empty($_POST['tresc']))
  28. {
  29. $message = "\nImię, naziwsko: $_POST[imie]\n\nNumer kontaktowy: $_POST[kontakt]\n\nAdres e-mail: $_POST[email]\n\nTresc wiadomości: $_POST[tresc]";
  30. $header = "From: $_POST[email]";
  31. @mail("pawel@niewazne.pl","POSITUM - nowa wiadomosc!","$message","$header")
  32. or die('<br /> Forumlarz konatktowy aktualnie nie działa poprawnie, spróbuj ponownie!');
  33. echo "<div id=\"kontakt_wiadomosc\">Wiadomość została wysłana poprawnie!</div> <br /> Postaramy się odpisać jak najszybciej jest to możliwe, czekaj!";
  34. }
  35. else echo "<div id=\"kontakt_blad\">BŁĄD - wypełnij wszystkie pola formularza kontaktowego!</div> <br /> Wróć do działu <a href=\"kontakt\" title=\"\">kontakt</a>.";
  36. ?>
Nie będę Ci podawać kodu CSS, sam sformatuj sobie już :]
Go to the top of the page
+Quote Post
QooBooS
post
Post #3





Grupa: Zarejestrowani
Postów: 16
Pomógł: 1
Dołączył: 15.10.2008

Ostrzeżenie: (0%)
-----


Witam.
Wystarczy dodać mały szczegół - return.
Oprócz tego proponuję zrobić to nieco inaczej:
funkcję niech wywołuje wciśnięcie przycisku 'OK', a nie zdarzenie onSubmit formularza.
Będzie to wyglądało tak:
Z form usuwasz zdarzenie onSubmit:
  1. <form action = "<? echo $_SERVER['PHP_SELF'];?>"method = "post" name="forma">

Do przycisku 'OK' dodajesz onClick i zmieniasz go z type='submit' na type='button':
  1. <input type='button' name='ok' value='OK' onClick='return sprawdz();'/>

A w funkcji dodajesz odpowiednio:
  1. <script type="text/javascript">
  2. function sprawdz(){
  3. var imie = document.forms['forma']["imie"].value;
  4. var nazwisko = document.forms['forma']['nazwisko'].value;
  5. if (imie == "")
  6. {
  7. alert("Nie wpisales imienia!");
  8. return false;
  9. } else if (nazwisko == "")
  10. {
  11. alert("Nie wpisales nazwiska!");
  12. return false;
  13. } else {
  14. return true;
  15. document.forms['forma'].submit();
  16. }

Co tu zrobiłem:
Sprawdzasz każde pole z osobna. Jeśli jest puste, wyświetlasz komunikat i nie wysyłasz formularza, a jeśli wszystkie są wypełnione - zwraca true i wykonuje submit() dla formularza (innymi słowy - wysyła go (IMG:style_emoticons/default/smile.gif) ). Pole nazwisko wymyśliłem, żeby pokazać Ci, jak to wygląda z większą ilością pól.
Go to the top of the page
+Quote Post
attimo
post
Post #4





Grupa: Zarejestrowani
Postów: 115
Pomógł: 6
Dołączył: 23.01.2010

Ostrzeżenie: (0%)
-----


Niestety po kliknieciu w przycisk nic sie nie dzieje

Wiecie może dlaczego ?
Go to the top of the page
+Quote Post
gothye
post
Post #5





Grupa: Zarejestrowani
Postów: 702
Pomógł: 65
Dołączył: 16.03.2009

Ostrzeżenie: (0%)
-----


zobacz jak to wygląda u mnie (wyszukiwarka prosta) :

  1. <script type='text/javascript'>
  2. function checkform(frm){
  3. if(frm.f_key.value==''){
  4. alert('Łatwiej będzie mi coś znaleść jeśli podasz czego mam szukać :) ');
  5. return false;
  6. }
  7. }
  8. </script>
  9.  
  10. <form method="post" action="{$ROOT}/szukaj" onsubmit='return checkform(this);'>
  11. <input type="text" class="text" value="" name="f_key" id="s">
  12.   <input type="submit" value="Szukaj" name="s_key">&nbsp;&nbsp;<a href='szukaj'>Zaawansowane szukanie</a>
  13. </form>



Go to the top of the page
+Quote Post
wiiir
post
Post #6





Grupa: Zarejestrowani
Postów: 260
Pomógł: 34
Dołączył: 22.02.2010

Ostrzeżenie: (0%)
-----


dodatkowo mozesz po kazdej zmianie pola sprawdzic wartosc pola poprzez onChange
jesli pola te definiuja np email login itd mozesz ajaxem sprawdzic czy email jest wolny czy nie, poczym podac odpowiednia informacje przy danym polu
jesli nie chcesz wyslac formularza z bledami mozesz zrobic sobie funkcje js ktora zbada ci wszystkie pola a pozniej wywola submit
czyli document.nazwa_fomularza.submit...
Go to the top of the page
+Quote Post
attimo
post
Post #7





Grupa: Zarejestrowani
Postów: 115
Pomógł: 6
Dołączył: 23.01.2010

Ostrzeżenie: (0%)
-----


Poprawiłem kod i teraz działa poprawnie tylko mam jeszcze jedno pytanie.

np.
[JAVASCRIPT] pobierz, plaintext
  1. function sprawdz(){
  2. var imie = document.forms['forma'].imie.value;
  3. var nazwisko = document.forms['forma'].nazwisko.value;
  4. var haslo = document.forms['forma'].haslo.value;
  5. if(imie == "")
  6. {
  7. alert("nie wpisales imienia");
  8. return false;
  9. }
  10. else if(nazwisko == "")
  11. {
  12. alert("nie wpisales nazwiska");
  13. document.forms['forma'].nazwisko.style.border = "2px solid #FF0000";
  14. return false;
  15.  
  16. }
  17. else if(haslo == "")
  18. {
  19. alert("Nie wpisales hasla");
  20. return false;
  21. }
  22. else
  23. {
  24. return true;
  25. }
  26. }
[JAVASCRIPT] pobierz, plaintext



Ustawiłem styl w razie gdyby nazwisko zostało źle wpisane, teoretycznie działa. Tylko, że jeśli wpisze coś do tego pola nadal jest aktywny ten styl czyli czerwona ramka a chciałbym aby po wpisaniu było normalnie.

Ten post edytował attimo 1.03.2010, 17:11:37
Go to the top of the page
+Quote Post
QooBooS
post
Post #8





Grupa: Zarejestrowani
Postów: 16
Pomógł: 1
Dołączył: 15.10.2008

Ostrzeżenie: (0%)
-----


Zrób tak:
Do pola, które ma być wyróżnione (nazwisko), dodaj:
  1. onChange="document.forms['forma'].nazwisko.style.border = 'none';"

Teraz po zmianie zawartości pola, ramka będzie automatycznie usuwana.
Możesz też zamiast onChange użyć onFocus - wtedy ramka zniknie po uaktywnieniu tego pola (np. kliknięciu w nim)

Ten post edytował QooBooS 1.03.2010, 21:19:34
Go to the top of the page
+Quote Post
attimo
post
Post #9





Grupa: Zarejestrowani
Postów: 115
Pomógł: 6
Dołączył: 23.01.2010

Ostrzeżenie: (0%)
-----


Z tym sobie poradziłem, ale bez Ajaxa to raczej nie ma sensu. Jeśli pole to np. login to po przejsciu do następnego trzeba byłoby sprawdzić to poprzednie z użyciem php a dokładniej sprawdzić czy w bazie nie ma już takiego użytkownika. mógłbym użyć dla inputa onChange ale nie bardzo wiem jak miała by wyglądać taka funkcja sprawdzająca w ajaxie.
Go to the top of the page
+Quote Post
wiiir
post
Post #10





Grupa: Zarejestrowani
Postów: 260
Pomógł: 34
Dołączył: 22.02.2010

Ostrzeżenie: (0%)
-----


ajax nie sluzy do sprawdzania twoich pol tylko komunikacji z serwerem.. musisz napisac sobie funkcje ktora pobierze wartosc pola, nastepnie zbudowac sobie ajaxa, albo skorzystac z gotowych rozwiazan typu jQuery, ajax, wysle ci ta wartosc do skryptu php, w php sprawdzasz sobie czy istnieje np uzytkownik, pozniej musisz jeszcze obsluzyc powrot ajaxa i koniec, nie wiem jak dziala ajax w jQuery bo korzytam ze swojego ajaxa, u mnie jest tak ze w powrocie wykonywana jest funkcja taka jaka wsakrze przy wywolaniu ajaxa,
np:
  1. ajax(plik.php, parametry, funkcja przy powrocie)


teraz mi przyszlo do glowy ze JQ fajnie obsluguje JSON-a wiec mozesz sobie zwrocic json-a a potem tylko eval();

Ten post edytował wiiir 2.03.2010, 08:54:09
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 12:33