• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zła i nie zmieniająca się data przy wypisywaniu z bazy czasu ostatniego logowania

Object Storage Arubacloud
0 głosów
106 wizyt
pytanie zadane 18 listopada 2017 w PHP przez Macek Kolo Mądrala (5,480 p.)

Mam kod:

 <!DOCTYPE html>
<html>
<head>
</head>
<body>
<?php
	session_start();
	$conn = mysqli_connect("localhost","root","");
	mysqli_select_db($conn, "test");
?>

<?php
if (isset($_GET['wyloguj'])==1) 
{
	session_destroy();
	$_SESSION['zalogowany'] = false;
}
?>

<?php
if (isset($_POST['login_button'])) 
{
	$login = $_POST['login'];
	$password = $_POST['password'];
	
	if (mysqli_num_rows(mysqli_query($conn, "SELECT login, password FROM user WHERE login = '".$login."' AND password = '".$password."';")) > 0) 
	{	
		mysqli_query($conn, "UPDATE user SET login_time = date('m/d/Y h:m:s') WHERE login = '".$login."';");
	
		$_SESSION['zalogowany'] = true;
		$_SESSION['login'] = $login;		
	}
	else echo "Something went wrong. Try again!";
}

if (isset($_SESSION['zalogowany'])==true)
{
	echo "Hello <b>".$_SESSION['login']."</b><br><br>";
	$time = mysqli_fetch_all(mysqli_query($conn, "SELECT login_time FROM user WHERE login='".$_SESSION['login']."'"));
	echo "Czas ostatniego logowanie ";
	foreach ($time as $i) {
		echo date('m/d/Y h:m:s', implode($i));
	}
	echo '<a href="?wyloguj=1">[Logout]</a>';
}
?>

<?php if (isset($_SESSION['zalogowany'])==false): ?>
	<form method="POST" action="login.php">
		<b>Login:</b> <input type="text" name="login"><br>
		<b>Password:</b> <input type="password" name="password"><br>
		<input type="submit" value="Login" name="login_button">
	</form>
<?php endif; ?>

<?php mysqli_close($conn); ?>
</body>
</html> 

 

I mam dwa problemy. Jeden to taki, że jak kliknę "Logout" to nie pokazuje mi się panel logowana i nie wiem czy da się to zrobić w jednym pliku. A drugi problem, to taki, że za każdym razem jak się loguje to jest wypisywana ta sama data: 01/01/1970 01:01:00 a chce by była to data ostatniego logowania. Jak naprawić te błędy? Dodam, że w bazie pole login_time jest int'em

1 odpowiedź

+1 głos
odpowiedź 18 listopada 2017 przez Arkadiusz Waluk Ekspert (287,950 p.)

jak kliknę "Logout" to nie pokazuje mi się panel logowana i nie wiem czy da się to zrobić w jednym pliku.

Spójrz na swój warunek nad formularzem:

<?php if (isset($_SESSION['zalogowany'])==false): ?>

Sprawdzasz, czy $_SESSION['zalogowany'] nie istnieje i tylko wtedy wyświetlasz formularz. A gdy się wylogowujesz istnieje (sam ustawiasz w linii 16), więc formularz się nie wyświetla.

za każdym razem jak się loguje to jest wypisywana ta sama data

    foreach ($time as $i) {
        echo date('m/d/Y h:m:s', implode($i));
    }

Na jakiej zasadzie chcesz aby to działało? Pytam, bo kodu nie mogę zrozumieć. Zapytanie pobiera w domyśle jeden czas (login raczej jest unikalny), a potem wrzucasz to do pętli (skoro jest zawsze jeden rekord to po co?), a następnie jeszcze robisz implode, aby połączyć kilka wartości (jakich?) w jedną... Nie rozumiem nic. Polecam zrobić w bazie kolumnę datetime, a w kodzie operować na klasie DateTime.

PS

if (mysqli_num_rows(mysqli_query($conn, "SELECT login, password FROM user WHERE login = '".$login."' AND password = '".$password."';")) > 0) 

To jest kod wprost do wykonania ataku sql injection. I do tego hasła w bazie niehashowane.

Podobne pytania

0 głosów
1 odpowiedź 319 wizyt
pytanie zadane 3 maja 2018 w PHP przez Lynxie Nowicjusz (160 p.)
+1 głos
1 odpowiedź 203 wizyt
pytanie zadane 16 października 2020 w C# przez piotr3223 Nowicjusz (150 p.)
+1 głos
3 odpowiedzi 4,812 wizyt
pytanie zadane 23 listopada 2015 w SQL, bazy danych przez michal Mądrala (5,560 p.)

92,555 zapytań

141,403 odpowiedzi

319,557 komentarzy

61,940 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...