Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: wyświetlanie informacji w DIV w zależności od zmiennych PHP
Forum PHP.pl > Forum > Po stronie przeglądarki > CSS
topcio
Witajcie

Borykam się z problemem, jak zrobić by zależności od tego co powie php podmieniany był DIV a nie przeładowywana cała strona

strona projektu

http://cctv-online.pl

Zerknijcie o co mi chodzi,
w tym momencie kiedy podane jest błędne hasło albo login strona się przeładowuje, a docelowo ma być tak, że podmieniany będzie tylko ten div co ma bg czerwone, tak jak to zrobiłem w przypadku włączenia CapsLock i chęci wpisania hasła.

Nie wiem jak to ugryźć, bo informacji jest kilka?
Czy ma to być zrobiona w Javie czy po stronie serwera, jak do tej pory.

Wszelkie sugestie i podpowiedzi mile widziane

Pozdrawiam Tomek

Czy dobrze myślę, że powinienem zrobić tak aby po kliknięciu nie przekierowywał na początek strony tylko, do jakiegoś CASE, który będzie w zależności od wyników PHP otrzymywał daną zawartość w div o takim samym ID, a potem w css zrobić taki szablon dla tego jednego DIVa. I zrobić to JS
viking
Poczytaj o ajax. I na ma pewno nie ma to być zrobione w javie tylko javascript.
topcio
Wiem, że JS a nie Java - napisałem skrót myślowy smile.gif
Nie da się tego zrobić bez AJAXa, jakoś mi nie po drodze w tej chwili opanowywać AJAXa
viking
Jeśli nie chcesz przeładować całej strony to inaczej się nie da.
https://prophp.pl/advice/show/20/pierwsze_k..._i_czym_jest%3F
topcio
Witam

Przeprosiłem się do AJAXa, udało się, ale mam pewien problem.
Od rana szukam rozwiązania ale jakoś bez skutecznie

Otóż jeden ze skryptów JS siedzi w pliku ładowanym przez AJAX, i tu jest problem nie wiem jak zrobić by się on wykonał po wczytaniu.

Proszę o pomoc.
trueblue
  1. eval(element_w_ktorym_jest_odpowiedz_z_ajaxa.querySelector('script').innerHTML);
topcio
próbowałem, ale albo jestem zbyt tępy na to albo coś źle robię

wpisuję to w plik zewnętrzny scripts.js, który jest ładowany w head - czy tak ma być questionmark.gif
od razu po nawiasie wpisuję id diva questionmark.gif

w konsoli dostaję:
scripts.js:92 Uncaught TypeError: Cannot read property 'querySelector' of null
at scripts.js:92
scripts.js:92 Uncaught TypeError: Cannot read property 'innerHTML' of null
at scripts.js:92
trueblue
Wywołujesz po tym jak wstawisz odpowiedź do danego elementu.
Zobacz na czym operuje metoda querySelector: https://developer.mozilla.org/pl/docs/Web/A...t/querySelector
topcio
sorki, ale nie potrafię tego zrozumieć. Czy mogę prosić o łopatologiczne wytłumaczenie tego zagadnienia.
viking
Poczytaj o jsonp.
Kod ma być wywołany na done (jqury). Zależy co tam użyłeś.
topcio
zrobiłem trochę na około ale efekt, którego oczekiwałem

  1. function LoginTest() {
  2. request = "";
  3. request = new XMLHttpRequest();
  4. var InputLogin = document.getElementById("input_login").value;
  5. var InputPass = document.getElementById("input_pass").value;
  6. var post = "user_login=" + InputLogin + "&user_pass=" + InputPass;
  7. var url = "../php_function/user_check.php";
  8. request.onreadystatechange = LoginTestRequest;
  9. request.open("POST", url, true);
  10. request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  11. request.send(post);
  12. }
  13. id=document.getElementById('user_blocked_time')
  14. function odliczaj(id,sek){
  15. seconds = Math.floor(sek)%60;
  16. minutes = Math.floor(sek/60)%60;
  17. id.innerHTML=((minutes < 10) ? '0' + minutes : minutes)+ ':' +((seconds < 10) ? '0' + seconds : seconds);
  18. if(sek>0)setTimeout(function(){
  19. odliczaj(id,--sek)
  20. },1e3)
  21. }
  22.  
  23. function LoginTestRequest() {
  24. if(request.readyState == 4 && request.status == 200) {
  25. if(request.responseText == "User Logged IN") {
  26. window.location = "index.php";
  27. }
  28. if (!isNaN(request.responseText)){
  29. $("#login_message_one").empty();
  30. var time_to_unlock = request.responseText;
  31. var newdiv = document.createElement('div');
  32. newdiv.setAttribute("class", "div_testowy");
  33.  
  34. var script = document.createElement('script');
  35. script.setAttribute("language", "javascript");
  36. script.innerHTML = "odliczaj(user_blocked_time, " + time_to_unlock + ");";
  37. newdiv.appendChild(script);
  38. var newspan = document.createElement('span');
  39. newspan.setAttribute("id", "user_blocked_time");
  40. newdiv.appendChild(newspan);
  41.  
  42. document.getElementById('login_message_one').appendChild(newdiv);
  43. }
  44. else {
  45. document.getElementById("login_message_one").innerHTML = request.responseText;
  46. }
  47. }
  48. else {
  49. document.getElementById("login_message_one").innerHTML = request.status+" "+request.statusText;
  50. }
  51. }
  52.  


Jeszcze trochę muszę dopisać, ale już prawie jest cel

viking
Mieszasz jquery z czystym js. Zdecyduj się co chcesz używać. Albo sobie ułatwiasz życie, albo rezygnujesz z jquery.
topcio
to tylko jedna rzecz w jquery, ale masz rację poprawię na zwykłe js.
Ach i pytanko, może wiecie czemu to nie działa w IE, w pozostałych jest OK. Chrome, ff, opera.
viking
Więc jaki sens osadzania dodatkowego kodu na stronie skoro jedna rzecz? Chociaż myślę że akurat tobie na początek w drugą stronę by bardziej pasowało. Nie ma co ukrywać że pisze się łatwiej i nie pewnie nie było by nullem.
topcio
mówisz, że w jquery pisze się łatwiej?
Tylko najpierw muszę bardziej opanować czystego js, bo za chwilę zrobi mi się w głowie sieczka. Wcześniej się tym nie zajmowałem, robiłem tylko w php, trochę w VB. Teraz musiałem zacząć poszerzać wiedzę o css, js, pewnie jeszcze coś się znajdzie.


No to pojawił mi się jeszcze jeden problem.
Mianowicie. Wszystko ładnie działa gdy js jest włączone w przeglądarce ale gdy wyłączę to już nie jest tak pięknie.

  1. case 'log_in':
  2. $users->cookie_form();
  3. echo "<div id=\"wrapper\">";
  4. echo "<header>";
  5. echo "<div class=\"login\">";
  6. echo "<div class=\"test\">";
  7. echo "SYSTEM ZARZĄDZANIA MONITORINGIEM";
  8. echo "</div>";
  9. echo "<div class=\"test\">";
  10.  
  11.  
  12.  
  13. echo "<form id=\"form_login\" method=\"post\">";
  14.  
  15.  
  16.  
  17. echo "<script type=\"text/javascript\"><!--document.write('<input type=\"hidden\" name=\"js\" value=\"1\">');//--></script>";
  18. echo "<noscript><input type=\"hidden\" name=\"js\" value=\"0\"></noscript>";
  19.  
  20.  
  21. echo "<span id=\"span_login\">LOGOWANIE</span>";
  22. echo "<div class=\"text_login\">";
  23. echo "<span class=\"login\">Login: </span>";
  24. echo "<input class=\"login\" id=\"input_login\" type=\"text\" placeholder=\"Login\" name=\"user_login\" value=\"" . ((isset($_COOKIE['user_login'])) ? $_COOKIE['user_login'] : '' . ((isset($_POST['user_login'])) ? ($_POST['user_login']) : '' ) . '' ) . "\">";
  25. echo "</div>";
  26. echo "<div class=\"text_login\">";
  27. echo "<span class=\"login\">Hasło: </span>";
  28. echo "<input class=\"login\" id=\"input_pass\" type=\"password\" placeholder=\"Hasło\" onkeypress=\"capLock(event)\" name=\"user_pass\" value=\"\">";
  29. echo "</div>";
  30. echo "</div>";
  31. echo "<div class=\"test\">";
  32. echo "<span id=\"info\" style=\"visibility:hidden\">INFORMACJA</span>";
  33. echo "<span id=\"login_message_one\"></span>";
  34. echo "</div>";
  35. echo "<div class=\"test\">";
  36. echo "<button id=\"submit\" class=\"submit_button\" type=\"button\" form=\"form_login\"><span class=\"submit\">LOGIN</span></button>";
  37.  
  38. echo "</form>";
  39.  
  40.  
  41.  
  42. echo "</div>";
  43. echo "<div class=\"test\" id=\"CapLock\">";
  44. echo "CAPS LOCK IS ON";
  45. echo "</div>";
  46. echo "</div>";
  47. echo "</header>";
  48. echo "</div>";
  49. break;
  50.  



I nie działa submit po wciśnieciu enter.
Wiem czemu, bo w formularzu nie ma action ani w button nie ma formaction.
Gdy jednak to wpiszę to enter działa, ale wszystkie info zamiast pojawiać się ajaxem w wyznaczonym DIV pojawiają się w nowo otwartym oknie jako wynik funkcji php.
Jak to ze sobą pogodzić.

Czego oczekuję.
Enter dla formularza ma działać.
Po przesłaniu formularza php sprawdza najpierw czy jest włączona javascript, jeśli tak wykonuje swoje, jeśli nie wyświetla info i też wykonuje swoje ale bez obsługi js.
Jest to do osiągnięcia?

viking
Ty poważnie tak piszesz? 40 linijek oddzielnie echowanych z czego jedna potrzebuje php?
button nie jest type=submit więc co sie ma wysłać.
topcio
Tak, poważnie tak piszę, a jest w tym jakiś błąd? Po za tym, że mam więcej do napisania. Z tym, że to jest tylko wycinek pliku, jeden mały formularz, reszta pliku jest w php pisana.
Ale rzeczywiście wolę napisać echo niż zamykać phpa, potem go otwierać, albo pisać kod w kilku liniach bez echa.


A wracając do problemu, masz rację nie jest submit, ale gdy go zrobię submit to przy entarze odświerza mi całą stronę
viking
Skoro robisz to na wyłączonym JS (przynajmniej tak zakładam z wcześniejszego posta) to czego się spodziewasz? event.preventDefault nie zadziała.
Problem taki że dajesz parserowi mase niepotrzebnej pracy. No i wygląda tragicznie.
Poza tym w PHP7
$_COOKIE['user_login'] ?? $_POST['user_login'] ?? ''
topcio
Myśle, że to kwestia przyzwyczajenie. Dla mnie jest to czytelne. I tak mi się lepiej pisze.

Sprawdzam na włączonym i wyłączonym JS.
viking
Poważnie taka sieczka jest dla ciebie czytelna? Nieźle. Już nawet można to było wyrzucić do zewnętrznego pliku i zaincludować a tam tylko zostawić jedną linię.
Domyślną akcją formularza jest wysyłka. Jak nie ma kodu JS który ją blokuje to jest prawidłowe działanie przeglądarki.
topcio
zrobiłem na około, jak zwykle smile.gif i wiem zrobiłem to w jguery
dopisałem funkcję entera dla js

  1. $("#form_login").keypress(function(e) {
  2. var keycode = (e.keyCode ? e.keyCode : e.which);
  3. if (keycode == '13') {
  4. LoginTest();
  5. }
  6. });


czy takie coś przejdzie?
viking
A po co programować enter zamiast zwykłej wysyłki?

Kod
$("#form_login").on('submit', function(e) {
  e.preventDefault();
  LoginTest();
})
topcio
bo inaczej nie chce działać jak powinno.
Jest ten button, jak zrobię mu typ submit to wynik otwiera w nowym oknie, ale wówczas działa on jako submit na klawisz enter.
Jeśli usunę mu action, to wynik dostaję zgodnie z zapytaniem ajax (w wyznaczonym div), ale przeładowuje mi cały dokument i wynik znika.

Nie wiem już co robię źle.
viking
Pokaż gdzieś cały działający kod bo tak można sobie strzelać.
topcio
index.php

  1. <?php
  2.  
  3. // Wczytuje potrzebne pliki
  4. require_once 'class/db_login.php';
  5. require_once 'class/Sql.class.php';
  6. require_once 'class/Users.class.php';
  7.  
  8. // Zmienna sesyjna adresu strony
  9. $_SESSION[ 'home_page' ] = "http://topcio.pl";
  10. // Tworzę połączenie z Bazą Danych
  11. $sql = new Sql( $db_host, $db_user, $db_passwd, $db_name );
  12. // Zapisujemy zmienną sesyjną ses_id
  13. $ses_id = session_id();
  14. // Jeśli nie ma utworzonej zmiennej sesyjnej user_id to ustawiamy ją na NULL
  15. if ( !isset( $_SESSION[ 'user_id' ] ) ) {
  16. $_SESSION[ 'user_id' ] = null;
  17. }
  18. // Jeśli zmienna sesyjna wygasła przekierowujemy do strony logowania
  19. if ( $_SESSION[ 'user_id' ] == "null" ) {
  20. header( "Location: index.php?action=log_in" );
  21. }
  22. // Filtrujemy wszystkie zmienne $_POST
  23. if ( !empty( $_POST ) ) {
  24. foreach ( $_POST as $post_value ) {
  25. $post_value = $sql->clear( $post_value );
  26. }
  27. }
  28.  
  29. # RAPORTOWANIE BŁĘDÓW
  30. error_reporting( E_ALL );
  31. ini_set( 'display_errors', 1 );
  32.  
  33. $users = new Users( $sql, $_SESSION[ 'user_id' ] );
  34.  
  35. # WYŚWIETLAMY NAGŁÓWEK STRONY
  36. include 'head.html';
  37. echo "</head>";
  38. echo "<body>";
  39. echo "<div id=\"wall\"></div>";
  40.  
  41. # PRZEŁĄCZNIK STRON
  42. switch ( isset( $_GET[ 'action' ] ) ? $_GET[ 'action' ] : 'user_logged_in' ) {
  43.  
  44. case 'user_logged_in':
  45. $users = new Users( $sql, $_SESSION[ 'user_id' ] );
  46. if ( $users->is_logged() ) {
  47. $data = $users->get_user_data();
  48. $first_login = $users->if_first_login( $data );
  49. if ( $first_login === true ) {
  50. header( "Location: ../index.php?action=first_login" );
  51. } else {
  52. if ( $users->is_there_temp_pass( $data[ 'user_id' ] ) === true ) {
  53. header( "Location: ../index.php?action=login_with_temp_pass" );
  54. } else {
  55. if ( $data[ 'user_range' ] == 1 ) {
  56. header( "Location: ../index.php?action=user_login" );
  57. }
  58. if ( $data[ 'user_range' ] == 2 ) {
  59. header( "Location: ../index.php?action=admin_login" );
  60. }
  61. if ( $data[ 'user_range' ] == 3 ) {
  62. header( "Location: ../index.php?action=devel_login" );
  63. }
  64. }
  65. }
  66. } else {
  67. header( "Location: ../index.php?action=log_in" );
  68. }
  69. break;
  70.  
  71. case 'log_in':
  72. $users->cookie_form();
  73. echo "<div id=\"wrapper\">";
  74. echo "<header>";
  75. echo "<div class=\"login\">";
  76. echo "<div class=\"test\">";
  77. echo "SYSTEM ZARZĄDZANIA MONITORINGIEM";
  78. echo "</div>";
  79. echo "<div class=\"test\">";
  80. echo "<form id=\"form_login\" action=\"../php_function/user_check.php\" enctype=\"multipart/form-data\" method=\"post\">";
  81. echo "<script type=\"text/javascript\"><!--document.write('<input type=\"hidden\" name=\"js\" value=\"1\">');//--></script>";
  82. echo "<noscript><input type=\"hidden\" name=\"js\" value=\"0\"></noscript>";
  83. echo "<span id=\"span_login\">LOGOWANIE</span>";
  84. echo "<div class=\"text_login\">";
  85. echo "<span class=\"login\">Login: </span>";
  86. echo "<input class=\"login\" id=\"input_login\" type=\"text\" placeholder=\"Login\" name=\"user_login\" value=\"" . ( ( isset( $_COOKIE[ 'user_login' ] ) ) ? $_COOKIE[ 'user_login' ] : '' . ( ( isset( $_POST[ 'user_login' ] ) ) ? ( $_POST[ 'user_login' ] ) : '' ) . '' ) . "\">";
  87. echo "</div>";
  88. echo "<div class=\"text_login\">";
  89. echo "<span class=\"login\">Hasło: </span>";
  90. echo "<input class=\"login\" id=\"input_pass\" type=\"password\" placeholder=\"Hasło\" onkeypress=\"capLock(event)\" name=\"user_pass\" value=\"\">";
  91. echo "</div>";
  92. echo "</div>";
  93. echo "<div class=\"test\" id=\"test_001\">";
  94. echo "<span id=\"info\" style=\"visibility:hidden\">INFORMACJA</span>";
  95. echo "<span id=\"login_message_one\"></span>";
  96. echo "</div>";
  97. echo "<div class=\"test\">";
  98. echo "<button id=\"submit\" class=\"submit_button\" type=\"button\" ><span class=\"submit\">LOGIN</span></button>";
  99. echo "</form>";
  100. echo "</div>";
  101. echo "<div class=\"test\" id=\"CapLock\">";
  102. echo "CAPS LOCK IS ON";
  103. echo "</div>";
  104. echo "</div>";
  105. echo "</header>";
  106. echo "</div>";
  107. break;
  108.  
  109. case 'login_with_temp_pass':
  110. if ( empty( $_POST ) ) {
  111. $users->change_temp_pass_form();
  112. } else {
  113. $users->change_temp_pass_form();
  114. printf( implode( '<br />', $users->change_temp_pass() ) );
  115. printf( "<br />" );
  116. printf( "<a href=\"index.php?action=log_out\">Zaloguj się ponownie.</a>" );
  117. }
  118. break;
  119.  
  120. case 'forgetten_confirm':
  121. $forgetten_message = $users->sendForgettenPassword();
  122. echo implode( '<br>', $forgetten_message ) . '</p>';
  123. echo "<a href=\"index.php?action=log_in\">Powrót do strony logowania</a><br />";
  124. break;
  125.  
  126. case 'forgetten':
  127. $users->cookie_form();
  128. if ( !empty( $_POST ) ) {
  129. if ( ( $forgetten_message = $users->forgetten( $_POST ) ) === true ) {
  130. $_SESSION[ 'tablica_post' ] = array();
  131. foreach ( $_POST as $key => $value ) {
  132. $_SESSION[ 'tablica_post' ][ $key ] = $value;
  133. }
  134. $users->forgetten_form_confirm();
  135. } else {
  136. $users->forgetten_form( $forgetten_message );
  137. }
  138. } else {
  139. if ( empty( $_POST ) ) {
  140. $forgetten_message = null;
  141. $users->forgetten_form( $forgetten_message );
  142. }
  143. }
  144. break;
  145.  
  146. case 'user_login':
  147. if ( $users->is_logged() ) {
  148. $data = $users->get_user_data();
  149. if ( $users->is_there_temp_pass( $data[ 'user_id' ] ) === true ) {
  150. header( "Location: index.php?action=login_with_temp_pass" );
  151. }
  152. if ( $data[ 'user_range' ] != 1 ) {
  153. header( "Location: index.php?action=user_logged_in" );
  154. } else {
  155. $data = $users->get_user_data();
  156. echo "USER LOGIN";
  157. foreach ( $data as $sesja => $wartosc ) {
  158. echo "<p>" . $sesja . " = " . $wartosc . "</p>";
  159. }
  160. echo "<a href=\"index.php?action=log_out\">Wyloguj . . .</a>";
  161. }
  162. } else {
  163. header( "Location: index.php?action=user_logged_in" );
  164. }
  165. break;
  166.  
  167. case 'admin_login':
  168. if ( $users->is_logged() ) {
  169. $data = $users->get_user_data();
  170. if ( $users->is_there_temp_pass( $data[ 'user_id' ] ) === true ) {
  171. header( "Location: index.php?action=login_with_temp_pass" );
  172. }
  173. if ( $data[ 'user_range' ] != 2 ) {
  174. header( "Location: index.php?action=user_logged_in" );
  175. } else {
  176. echo "<div id=\"wrapper\"><header>";
  177. $data = $users->get_user_data();
  178. echo "ADMIN LOGIN";
  179. foreach ( $data as $sesja => $wartosc ) {
  180. echo "<p>" . $sesja . " = " . $wartosc . "</p>";
  181. }
  182. echo "<a href=\"index.php?action=log_out\">Wyloguj . . .</a>";
  183. echo "</header></div>";
  184. }
  185.  
  186. } else {
  187. header( "Location: index.php?action=user_logged_in" );
  188. }
  189. break;
  190.  
  191. case 'devel_login':
  192. if ( $users->is_logged() ) {
  193. $data = $users->get_user_data();
  194. if ( $users->is_there_temp_pass( $data[ 'user_id' ] ) === true ) {
  195. header( "Location: index.php?action=login_with_temp_pass" );
  196. }
  197. if ( $data[ 'user_range' ] != 3 ) {
  198. header( "Location: index.php?action=user_logged_in" );
  199. } else {
  200. $data = $users->get_user_data();
  201. echo "SUPER USER LOGIN";
  202. foreach ( $data as $sesja => $wartosc ) {
  203. echo "<p>" . $sesja . " = " . $wartosc . "</p>";
  204. }
  205. echo "<a href=\"index.php?action=log_out\">Wyloguj . . .</a>";
  206. }
  207. } else {
  208. header( "Location: index.php?action=user_logged_in" );
  209. }
  210. break;
  211.  
  212. case 'test':
  213. echo $_SESSION[ 'user_id' ];
  214. break;
  215.  
  216.  
  217. case 'log_out':
  218. if ( $users->is_logged() ) {
  219. $_SESSION[ 'user_id' ] = null;
  220. header( "Location: " . $_SESSION[ 'home_page' ] );
  221. } else {
  222. header( "Location: " . $_SESSION[ 'home_page' ] );
  223. }
  224. break;
  225.  
  226. case 'first_login':
  227. $users->cookie_form();
  228. if ( $users->is_logged() ) {
  229. if ( empty( $_POST ) ) {
  230. $result = null;
  231. $users->first_login_form( $result );
  232. echo "<a href=\"index.php?action=log_out\">Wyloguj . . .</a>";
  233. } else {
  234. $user_id = $users->user_id;
  235. $result = $users->first_login_update( $user_id, $_POST );
  236. $users->first_login_form( $result );
  237. if ( isset( $_SESSION[ 'Update_OK' ] ) ) {
  238. unset( $_SESSION[ 'Update_OK' ] );
  239. header( "Location: index.php?action=log_in" );
  240. } else {
  241. echo "<a href=\"index.php?action=log_out\">Wyloguj . . .</a>";
  242. }
  243. }
  244. } else {
  245. header( "Location: " . $_SESSION[ 'home_page' ] );
  246. }
  247. break;
  248.  
  249. }
  250.  
  251. include 'footer.php';
  252. # ZAMYKAMY POŁĄCZENIE SQL
  253. $sql->close();
  254. ?>




scripts.js
  1. // Funkcja Caps Lock
  2.  
  3. function capLock(data) {
  4. KeyCode = data.keyCode ? data.keyCode : data.which;
  5. ShiftKey = data.shiftKey ? data.shiftKey : ((KeyCode == 16) ? true : false);
  6. if (((KeyCode >= 65 && KeyCode <= 90) && !ShiftKey) || ((KeyCode >= 97 && KeyCode <= 122) && ShiftKey)) {
  7. var elem = ((document.getElementById('CapLock')) ? true : false);
  8. if (elem)
  9. document.getElementById('CapLock').setAttribute('id', "CapLock_ON");
  10. else
  11. var elem1 = ((document.getElementById('CapLock_OFF')) ? true : false);
  12. if (elem1)
  13. document.getElementById('CapLock_OFF').setAttribute('id', "CapLock_ON");
  14. } else
  15. var elem2 = ((document.getElementById('CapLock_ON')) ? true : false);
  16. if (elem2)
  17. document.getElementById('CapLock_ON').setAttribute('id', "CapLock_OFF");
  18. }
  19.  
  20. /*/ Test Logowania
  21. $("#form_login").keypress(function(e) {
  22. var keycode = (e.keyCode ? e.keyCode : e.which);
  23. if (keycode == '13') {
  24. LoginTest();
  25. }
  26. });
  27. */
  28.  
  29. window.onload = function () {
  30. document.getElementById("submit").onclick = function () {
  31. LoginTest();
  32. }
  33. }
  34.  
  35. function LoginTest() {
  36. request = "";
  37. request = new XMLHttpRequest();
  38. var InputLogin = document.getElementById("input_login").value;
  39. var InputPass = document.getElementById("input_pass").value;
  40. var post = "user_login=" + InputLogin + "&user_pass=" + InputPass;
  41. var url = "../php_function/user_check.php";
  42. request.onreadystatechange = LoginTestRequest;
  43. request.open("POST", url, true);
  44. request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  45. request.send(post);
  46. }
  47.  
  48. // Odliczanie czasu do odblokowania loginu
  49.  
  50. id = document.getElementById('user_blocked_time')
  51.  
  52. function odliczaj(id, time_to_unlock) {
  53. seconds = Math.floor(time_to_unlock) % 60;
  54. minutes = Math.floor(time_to_unlock / 60) % 60;
  55. if (time_to_unlock == 0) {
  56. id.innerHTML = "Konto zostało odblokowane";
  57. } else {
  58. var text = "Zbyt wiele nieudanych prób, login został zablokowany <br>" + "Czas do odblokowania:";
  59. id.innerHTML = text + ((minutes < 10) ? '0' + minutes : minutes) + ':' + ((seconds < 10) ? '0' + seconds : seconds);
  60. if (time_to_unlock >= 0) setTimeout(function () {
  61. odliczaj(id, --time_to_unlock)
  62. }, 1000);
  63. }
  64. }
  65.  
  66. function LoginTestRequest() {
  67. if (request.readyState == 4 && request.status == 200) {
  68. var elem = document.getElementById('login_message_one');
  69. if (request.responseText == "User Logged IN") {
  70. window.location = "http://topcio.pl";
  71. }
  72. if (!isNaN(request.responseText)) {
  73. $("#login_message_one").empty();
  74. $("#info").show("slide", { direction: "left" }, 1000);
  75. var time_to_unlock = request.responseText;
  76. var newdiv = document.createElement('div');
  77. newdiv.setAttribute("class", "div_testowy");
  78.  
  79. var script = document.createElement('script');
  80. script.setAttribute("language", "javascript");
  81. script.innerHTML = "odliczaj(user_blocked_time, " + time_to_unlock + ");";
  82. newdiv.appendChild(script);
  83. var newspan = document.createElement('span');
  84. newspan.setAttribute("id", "user_blocked_time");
  85. newdiv.appendChild(newspan);
  86.  
  87. elem.appendChild(newdiv);
  88. } else {
  89. elem.innerHTML = request.responseText;
  90. }
  91. } else {
  92. elem.innerHTML = request.status + " " + request.statusText;
  93. }
  94. }




user_check_php
  1. <?php
  2. require_once '../class/db_login.php';
  3. require_once '../class/Sql.class.php';
  4. require_once '../class/Users.class.php';
  5. // Tworzę połączenie z Bazą Danych
  6. $sql = new Sql( $db_host, $db_user, $db_passwd, $db_name );
  7. // Zapisujemy zmienną sesyjną ses_id
  8. $ses_id = session_id();
  9. // Jeśli nie ma utworzonej zmiennej sesyjnej user_id to ustawiamy ją na NULL
  10. if ( !isset( $_SESSION[ 'user_id' ] ) ) {
  11. $_SESSION[ 'user_id' ] = null;
  12. }
  13. // Filtrujemy wszystkie zmienne $_POST
  14. if ( !empty( $_POST ) ) {
  15. foreach ( $_POST as $post_value ) {
  16. $post_value = $sql->clear( $post_value );
  17. }
  18. }
  19.  
  20. # RAPORTOWANIE BŁĘDÓW
  21. error_reporting( E_ALL );
  22. ini_set( 'display_errors', 1 );
  23.  
  24. $users = new Users( $sql, $_SESSION[ 'user_id' ] );
  25.  
  26. if ( !empty( $_POST ) ) {
  27. loop_0001: $check_user_login = $users->check_user_login( $_POST );
  28. #JEŻELI ISTNIEJE LOGIN W BAZIE
  29. if ( $check_user_login === true ) {
  30. $get_user_id = $users->get_user_id( $_POST );
  31. $info = $users->get_blocked_info( $get_user_id );
  32. # JEŻELI LOGIN ZABLOKOWANY
  33. if ( $info == 1 ) {
  34. if ( $users->login_unlock( $get_user_id ) === true ) {
  35. goto loop_0001;
  36. } else {
  37. if ( is_numeric( $users->get_blocked_time( $get_user_id ) ) ) {
  38. echo $users->get_blocked_time( $get_user_id );
  39. }
  40. }
  41. }
  42. # JEŻELI LOGIN ODBLOKOWANY
  43. if ( $info == 0 ) {
  44. # JEŻELI ISTNIEJE HASŁO TYMCZASOWE
  45. if ( $users->is_there_temp_pass( $get_user_id ) === true ) {
  46. $users->login_form();
  47. # JEŻELI LOGIN/HASŁO NIE SĄ ZGODNE
  48. if ( $users->check_compatibility( $_POST ) === NULL ) {
  49. $users->login_lock( $_POST );
  50. $login_message[] = 'Upewnij się, że wprowadzone dane są poprawne<br />' .
  51. '<a href="../index.php?action=forgetten">Wygeneruj ponownie hasło.</a>';
  52. echo implode( '<br>', $login_message );
  53. }
  54. # JEŻELI LOGIN/HASŁO SĄ ZGODNE
  55. if ( is_numeric( $users->check_compatibility( $_POST ) ) ) {
  56. $_SESSION[ 'user_id' ] = $users->check_compatibility( $_POST );
  57. $users->loged_in( $_SESSION[ 'user_id' ] );
  58. header( "Location: ../index.php?action=login_with_temp_pass" );
  59. }
  60. }
  61. # JEŻELI NIE ISTNIEJE HASŁO TYMCZASOWE
  62. if ( $users->is_there_temp_pass( $get_user_id ) === false ) {
  63. # JEŻELI LOGIN/HASŁO NIE SĄ ZGODNE
  64. if ( $users->check_compatibility( $_POST ) === NULL ) {
  65. $users->login_lock( $_POST );
  66. $login_message[] = "Podany login i/lub hasło są niepoprawne. Spróbuj Ponownie.";
  67. $login_message[] = "<a href=\"../index.php?action=forgetten\">Zapomniałem Hasła.</a>";
  68. echo implode( '<br>', $login_message );
  69. }
  70. # JEŻELI LOGIN/HASŁO SĄ ZGODNE
  71. if ( is_numeric( $users->check_compatibility( $_POST ) ) ) {
  72. $_SESSION[ 'user_id' ] = $users->check_compatibility( $_POST );
  73. $users->loged_in( $_SESSION[ 'user_id' ] );
  74. echo "User Logged IN";
  75.  
  76. }
  77. }
  78. }
  79. }
  80. #JEŻELI NIE ISTNIEJE LOGIN W BAZIE
  81. if ( $check_user_login === false ) {
  82. $get_user_id = null;
  83. $login_message[] = "Podany login i/lub hasło są niepoprawne. Spróbuj Ponownie.";
  84. $login_message[] = "<a href=\"../index.php?action=forgetten\">Zapomniałem Hasła.</a>";
  85. echo implode( '<br>', $login_message );
  86.  
  87. }
  88. }
  89. else if ( empty( $_POST ) ) {
  90. $get_user_id = null;
  91. }
  92.  
  93. ?>
  94.  
viking
Chodziło o działający kod na jakimś serwerze. Ale widać że może być problem z zasięgiem zmiennych albo samym wywołaniem js. Co w konsoli przeglądarki jest? Dlaczego raz sesja ma null a niżej sprawdzasz string "null"?
topcio
działający kod jest na

http://topcio.pl

działanie możesz sprawdzić dla usera topcio_02
viking
Konsola, TypeError: elem is undefined line 107
Po wyłaczeniu JS form ma być wysłany na ten sam adres http://topcio.pl/index.php?action=log_in a nie AJAXowy
topcio
poprawione
viking
No i zwraca poprawnie odpowiedź. Jak zamienisz w końcu na submit i poprawisz url to będzie dobrze.
topcio
zmieniłem na submit, i jak włączony jest javascript to dokument jest przeładowywany po enterze
viking
To już ci dawałem kod jaki masz wstawić. I ma być na DOMContentLoaded/$.ready załadowany.
topcio
Dzięki wielkie, wreszcie to działa i mogę iść dalej smile.gif

viking, a powiedz mi jeszcze jedno.
Zauważyłem, że przy włączonym js. zapytanie jest tak jakby wykonywane 2 razy.
W bazie danych licznik błędnych haseł wskakuje o 2, bez js zalicza o 1. Czy to normalne ?

Jeśli dobrze rozumiem dzieje się tak dlatego, że dodałem tę funkcję preventDefault.
Blokuje ona tylko wyświetlenie dokumentu w nowym oknie, ale i tak się wykonuje w tle?

zmieniłem
e.preventDefault();
na
return false;
i teraz wydaje się być ok
viking
Wykonuje się dlatego że dwa razy przypinasz w kodzie to samo zdarzenie.
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-2024 Invision Power Services, Inc.