Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [JavaScript][PHP]osługa błędów js+php
jacusek
post
Post #1





Grupa: Zarejestrowani
Postów: 262
Pomógł: 3
Dołączył: 18.10.2009
Skąd: Łódź

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


Stworzyłem sobie plik wrzucający dane do bazy. Chcąc uniknąć powtarzania rekordów chciałem wymusić sprawdzenie czy dane osoby będące już w bazie (MYSQL) nie są już raz wpisane. Sprawdzam to na podstawie pytania:
  1. $sql="select concat(nazwisko,imie,rok_ur) dane_os from klienci where concat(nazwisko,imie,rok_ur)='$dane_os'";
  2. $result = mysqli_query($mysqli, $sql) or die(mysqli_error($mysqli));

gdzie
  1. $dane_os=$_POST['nazwisko'].$_POST['imie'].$_POST['rok_ur'];

Wymyśliłem sobie, że będę informował użytkownika, żeby sprawdził czy dana osoba czasami nie jest już w bazie (a przecież te same nazwiska i rok urodzenia mogą się zdarzyć). Takie ostrzeżenie miałoby mieć formę komunikatu js w następującej formie:
  1. $result = mysqli_query($mysqli, $sql) or die(mysqli_error($mysqli));
  2. if(mysqli_num_rows($result)>0){
  3. $naz=$_POST['nazwisko'];
  4. $imn=$_POST['imie'];
  5. $tekst='Dane prawdopodobnie znajdują się w bazie. OK->wyszukiwarka, Anuluj->wpisze dane do bazy';
  6. $header="wyszukaj_robocze2.php?nazwisko=$naz&imie=$imn";
  7. echo "<script>if(confirm(\"$tekst\"))
  8. {
  9. window.location.href = '$header';
  10.  
  11. }
  12. else
  13. {
  14.  
  15. }
  16. </script>";
  17. }}

No właśnie - kiedy warunek jest spełniony to owszem pokazuje mi się informacja o konieczności sprawdzenia, ale kiedy potwierdzam to owszem przekierowuje mnie do wyszukiwarki, ale już z wpisanymi danymmi, czy ze zduplikowanym rekordem. Z kolei po naciśnięciu anuluj jest tak jak sobie założyłem - tzn wpisuje mi dane do bazy.
Cały problem wydaje się polegać na konieczności zatrzymania działania skryptu PHP przy spełnieniu tych warunków (tzn. przekierownia do wyszukiwarki). Niestety exit w js nie spełnia swojej funkcji. Czy może mi ktoś pomóc jak ten problem rozwiązać.
Z góry dziękuję.
Go to the top of the page
+Quote Post
ghost1511
post
Post #2





Grupa: Zarejestrowani
Postów: 186
Pomógł: 18
Dołączył: 2.09.2010

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


Przecież JS działający w przeglądarce nie zatrzymuje działania PHP na serwerze. Musisz zdefiniować akcję po kliknięciu potwierdzenia która doda rekord do bazy. Pomijam już sposób sprawdzania czy dana osoba jest już w bazie który jest... hmm dziwny smile.gif
Go to the top of the page
+Quote Post
L0k0
post
Post #3





Grupa: Zarejestrowani
Postów: 161
Pomógł: 4
Dołączył: 18.03.2011

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


Witam!

Po co robić sprawdzanie czy ktoś istnieje w bazie skoro może się zduplikować? Na jakiej podstawie określisz czy jednak ktoś ma być dodany czy nie?

Wg mnie to sprawdzanie traci sens. Nawet jeśli się ktoś powtórzy i dostaniesz komunikat to co wtedy? Poszukasz w bazie? Ale czego? A co z użytkownikiem, który takiej możliwości nie ma?

Jeśli coś może się potarzać sprawdzanie nie ma sensu.

Jeśli jednak patrzymy już czysto technicznie to sprawdzanie i działanie sprawdzania należy zrobić w PHP. Jak napisał Kolega wyżej - js nie zatrzyma PHP.
Musisz więc zrobić coś na sposób:

  1. if(cos_istnieje) { return false; } else { dodaj_do_bazy return true; }


Następnie na podstawie danych z return'a wyświetlasz odpowiedni komunikat o powodzeniu lub powtórzeniu.

Jeśli w przypadku wystąpienia powtórzenia mimo wszystko chcesz dodać do bazy to musisz obsłużyć kolejny element.

Według mnie najlepiej to zrobić przy użyciu Ajax'a i jQuery.

Pozdrawiam!

P.S. Rozwalił mnie tekst 'Dane prawdopodobnie znajdują się w bazie.' biggrin.gif
Go to the top of the page
+Quote Post
jacusek
post
Post #4





Grupa: Zarejestrowani
Postów: 262
Pomógł: 3
Dołączył: 18.10.2009
Skąd: Łódź

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


Dlaczego uważasz, że taki sposób jest dziwny?W bazie mam aktualnie trochę powtórzonych rekordów. Masz jakiś lepszy pomysł, bo na niego nie wpadłem niestety. Po PESELu (jak mam) to już sprawdzam. Ale chętnie jakiś inny pomysł wdrożę.
Co do js to wiem, ze nie zatrzymuje php (to by było kompletnie nielogiczne) ale nie miałem pomysłu jak to inaczej zrobić dlatego napisałęm pierwszego posta.

Nie zauważyłem nowej odpowiedzi. smile.gif
@L0k0
pozwolę się nie do końca z Tobą zgodzić. To sprawdzanie chce wprowadzić po 2 latach prowadzenia bazy. Ludzie wpisujący różne rzeczy są z natury leniwi, a ja nie chcę dwa razy wpisywać do bazy tej samej osoby. To nie są jedyne dane, które posiadam (jest też adres, nr tel i inne), dlatego bez sensu po dwa razy wpisywać to samo.
A jeżeli ktoś się powtórzy to użytkownik, żeby sprawdzić jest przekierowywany do przeglądarki, gdzie może sobie zweryfikować czy osoba, którą wprowadza jest już raz wprowadzona (choćby po tych dodatkowych danych, które już posiadam). Właśnie dlatego napisałem, że dane PRAWDOPODOBNIE znajdują się w bazie.
Mimo wszystko dziękuję za sugestię i pozdrawiam

Ten post edytował jacusek 19.03.2014, 14:53:11
Go to the top of the page
+Quote Post
ghost1511
post
Post #5





Grupa: Zarejestrowani
Postów: 186
Pomógł: 18
Dołączył: 2.09.2010

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


Chodziło mi o to że robisz konkatenację łańcuchów i po niej wyszukujesz rekordy. W ten sposób nie korzystasz m.in. z indeksów (o ile masz takie założone).

--edit
Poza tym jeżeli zbierasz numery pesel to dlaczego nie sprawdzasz czy taki jest już w bazie? W przeciwnym wypadku i tak nie masz pewności czy Jan Kowalski jest tym Janem Kowalskim którego masz już w bazie?

Ten post edytował ghost1511 20.03.2014, 08:39:45
Go to the top of the page
+Quote Post
L0k0
post
Post #6





Grupa: Zarejestrowani
Postów: 161
Pomógł: 4
Dołączył: 18.03.2011

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


No to sprawa wydaje się być bardzo prosta:

1. Sprawdzasz czy pewne dane już istnieją w bazie
2. Jeśli istnieją pobierasz rekord
3. Zwracasz rekord i wyświetlasz go w komunikacie (jakiś dialog czy coś)
4. Dialog posiada przyciski 'Dodać mimo wszystko' oraz 'Nie dodawaj'
5. Po wciśnięciu odpowiedniego wykonujesz kod PHP

Czyli masz PHP + jQuery (dialog) + Ajax (jedna funkcja).

Pozdrawiam!
Go to the top of the page
+Quote Post
jacusek
post
Post #7





Grupa: Zarejestrowani
Postów: 262
Pomógł: 3
Dołączył: 18.10.2009
Skąd: Łódź

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


Już się tłumaczę wink.gif.
Po numerach PESEL też sprawdzam i tam oczywiście nie mam problemów - tylko nie zawsze ten numer PESEL posiadam (z różnych historycznych już powodów). W momencie kiedy sprawdzam PESEL to oczywiście nie sprawdzam już dalej konkatenacją, bo to rzeczywiście byłoby bez sensu.
W takim przypadku nie mogę założyć indeksów bo i na czym i jakich? Indeks ma na id rekordu, PESEL unique i właściwie to wszystko co ma sens żeby zrobić.

Z ajaxem czuję się słabo, wiem, że można to zrobić w ten sposób, ale muszę jeszcze doczytać smile.gif. Niemniej dziękuję za pomoc. Powalczę i mam nadzieję, że mi się yda.
Go to the top of the page
+Quote Post
ghost1511
post
Post #8





Grupa: Zarejestrowani
Postów: 186
Pomógł: 18
Dołączył: 2.09.2010

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


No nie wiem... wydaje mi się że "klasyczny" sposób jest bardziej elastyczny i łatwiejszy do modyfikacji.

Co do AJAX'a to użyj np jQuery, które odwala za Ciebie 90% roboty związanej z ajaxem.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 21.08.2025 - 20:29