• 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

0 głosów
190 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 (291,530 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ź 503 wizyt
pytanie zadane 3 maja 2018 w PHP przez Lynxie Nowicjusz (160 p.)
+1 głos
1 odpowiedź 331 wizyt
pytanie zadane 16 października 2020 w C# przez piotr3223 Nowicjusz (150 p.)
+1 głos
3 odpowiedzi 5,468 wizyt
pytanie zadane 23 listopada 2015 w SQL, bazy danych przez michal Mądrala (5,560 p.)

93,773 zapytań

142,731 odpowiedzi

323,383 komentarzy

63,377 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...