Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ CSS _ wyświetlanie informacji w DIV w zależności od zmiennych PHP

Napisany przez: topcio 15.11.2017, 16:02:39

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

Napisany przez: viking 15.11.2017, 16:13:29

Poczytaj o ajax. I na ma pewno nie ma to być zrobione w javie tylko javascript.

Napisany przez: topcio 16.11.2017, 00:06:01

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

Napisany przez: viking 16.11.2017, 05:50:17

Jeśli nie chcesz przeładować całej strony to inaczej się nie da.
https://prophp.pl/advice/show/20/pierwsze_kroki_z_ajax._jak_dziala_i_czym_jest%3F

Napisany przez: topcio 19.11.2017, 20:37:06

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.

Napisany przez: trueblue 19.11.2017, 22:06:44

  1. eval(element_w_ktorym_jest_odpowiedz_z_ajaxa.querySelector('script').innerHTML);

Napisany przez: topcio 19.11.2017, 22:48:01

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

Napisany przez: trueblue 19.11.2017, 22:53:55

Wywołujesz po tym jak wstawisz odpowiedź do danego elementu.
Zobacz na czym operuje metoda querySelector: https://developer.mozilla.org/pl/docs/Web/API/Element/querySelector

Napisany przez: topcio 20.11.2017, 02:32:54

sorki, ale nie potrafię tego zrozumieć. Czy mogę prosić o łopatologiczne wytłumaczenie tego zagadnienia.

Napisany przez: viking 20.11.2017, 03:08:23

Poczytaj o jsonp.
Kod ma być wywołany na done (jqury). Zależy co tam użyłeś.

Napisany przez: topcio 20.11.2017, 03:51:25

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


Napisany przez: viking 20.11.2017, 07:40:28

Mieszasz jquery z czystym js. Zdecyduj się co chcesz używać. Albo sobie ułatwiasz życie, albo rezygnujesz z jquery.

Napisany przez: topcio 20.11.2017, 10:53:06

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.

Napisany przez: viking 20.11.2017, 10:54:52

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.

Napisany przez: topcio 20.11.2017, 22:59:56

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


Napisany przez: viking 21.11.2017, 08:16:29

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ć.

Napisany przez: topcio 21.11.2017, 12:07:31

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ę

Napisany przez: viking 21.11.2017, 12:14:39

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'] ?? ''

Napisany przez: topcio 21.11.2017, 12:35:52

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.

Napisany przez: viking 21.11.2017, 12:59:14

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.

Napisany przez: topcio 21.11.2017, 13:44:28

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?

Napisany przez: viking 21.11.2017, 13:50:26

A po co programować enter zamiast zwykłej wysyłki?

Kod
$("#form_login").on('submit', function(e) {
  e.preventDefault();
  LoginTest();
})

Napisany przez: topcio 21.11.2017, 13:56:43

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.

Napisany przez: viking 21.11.2017, 13:57:55

Pokaż gdzieś cały działający kod bo tak można sobie strzelać.

Napisany przez: topcio 21.11.2017, 14:08:15

index.php

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




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

Napisany przez: viking 21.11.2017, 14:18:31

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"?

Napisany przez: topcio 21.11.2017, 14:33:28

działający kod jest na

http://topcio.pl

działanie możesz sprawdzić dla usera topcio_02

Napisany przez: viking 21.11.2017, 14:50:08

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

Napisany przez: topcio 21.11.2017, 14:53:56

poprawione

Napisany przez: viking 21.11.2017, 14:55:47

No i zwraca poprawnie odpowiedź. Jak zamienisz w końcu na submit i poprawisz url to będzie dobrze.

Napisany przez: topcio 21.11.2017, 14:58:11

zmieniłem na submit, i jak włączony jest javascript to dokument jest przeładowywany po enterze

Napisany przez: viking 21.11.2017, 15:03:29

To już ci dawałem kod jaki masz wstawić. I ma być na DOMContentLoaded/$.ready załadowany.

Napisany przez: topcio 21.11.2017, 23:47:48

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

Napisany przez: viking 22.11.2017, 05:56:01

Wykonuje się dlatego że dwa razy przypinasz w kodzie to samo zdarzenie.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)