wyświetlanie logowania userów

0

Hej mam taką strone:

Która ciągnie dane z bazy:

Takim o to kodem: historia_userow.php

<!DOCTYPE HTML>
   <html lang="pl"> 
    <head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

  <title>Panel admina</title>
 </head>
 <body>
 	<h1>Panel Historii Użytkowników</h1>
 	 <table summary= TEST, id=tabela>
 	 	
 	<p><a href="index1.php" >Wróć do historii usuwania</a></p>

<tr>
  <th>Id</th><th>Użytkownik</th><th>ID użytkownika</th><th>Historia logowania</th>
</tr>
  <?php
include ('polacz.php');

$l = 1;

if ($sql =  $mysqli->prepare("SELECT * FROM logowanie")) 
{ 
        $sql->execute();

        $sql->bind_result($id, $user, $pass, $email);
		while ($sql->fetch() || $l<=1)
        { 
          
                echo "<tr>
                        <td>$l</td>
                        <td>$user</td>
                        <td>$id</td>
                        <td><a href=\"historia_userow2.php?id=$id\">Pokaż historie</a></td>
                   </tr>";
                   $l++;
        }

        $sql->close();
 }
else die( "Błąd w zapytaniu SQL! Sprawdź kod SQL w PhpMyAdmin." );

 $mysqli->close();

?>
</table>
 </body>
 </html>

Klikając pokaż historie ma mi pokazać coś takiego:

Z bazy:

O takim kodzie: historia_userow.php

<!DOCTYPE HTML>
   <html lang="pl"> 
    <head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <title>Panel admina</title>
 </head>
 <body>
 	<h1>Historia logowań</h1>
 	 <table summary= TEST, id=tabela>
 	<p><a href="historia_userow.php" >Wróć do panelu historii użytkownika</a></p>

<tr>
  <th>Id</th><th>Data i czas logowania</th>
</tr>
<?php
include('polacz.php');
$l = 1;
if ($sql =  $mysqli->prepare("SELECT * FROM historia WHERE action_type = 2")) 
{ 
        $sql->execute();

        $sql->bind_result($id, $user_id, $action_type, $created_at);
		while ($sql->fetch() || $l<=1)
        { 
          

                echo "<tr>
                        <td>$l</td>
                        <td>$created_at</td>
                   	 </tr>";
                   $l++;
        }

        $sql->close();
 }
?>
</table>

<h1>Historia wylogowań</h1>
<table summary= TEST, id=tabela>
<tr>
  <th>Id</th><th>Data i czas logowania</th>
</tr>
<?php
$l = 1;
if ($sql =  $mysqli->prepare("SELECT * FROM historia WHERE action_type = 1")) 
{ 
        $sql->execute();

        $sql->bind_result($id, $user_id, $action_type, $created_at);
		while ($sql->fetch() || $l<=1)
        { 
          

                echo "<tr>
                        <td>$l</td>
                        <td>$created_at</td>
                   	 </tr>";
                   $l++;
        }

        $sql->close();
 }
?>
</table>
</body>
</html>

I teraz do senda. Jak zauważyliście ciągnie mi z bazy dla każdego użytkownika tą samą historie logowań co wylogowań, i mam problem bo user_id z bazy historia jest inny ale nie umiem go tu wprowadzić aby dla każdego usera wprowadzał jego historie, po prostu utknąłem. proszę o pomoc.

0

Jak się logujesz na swoje konto, zapisujesz do sesji sobie id użytkownika.
np. $_SESSSION['user_id'] = $id; gdzie $id to id użytkownika.

Następnie gdy chcesz wyciągnąć historię takiego użytkownika to dodajesz zwykłe where user_id = $_SESSION['user_id'].

Czyli np. miałbyś coś takiego

if ($sql =  $mysqli->prepare("SELECT * FROM historia WHERE action_type = 2 AND user_id = '".$_SESSION['user_id']."'")) 
0
<?php
$_SESSSION['user_id'] = $id;
include('polacz.php');
$l = 1;
if ($sql =  $mysqli->prepare("SELECT * FROM historia WHERE action_type = 2 AND user_id = '".$_SESSION['user_id']."'")) 
{ 
        $sql->execute();

        $sql->bind_result($id, $user_id, $action_type, $created_at);
		while ($sql->fetch() || $l<=1)
        { 
          

                echo "<tr>
                        <td>$l</td>
                        <td>$created_at</td>
                   	 </tr>";
                   $l++;
        }

        $sql->close();
 }
?>

Takie coś zrobiłem i mam 2 błędy:
Notice: Undefined variable: id in C:\xamppp\htdocs\test\historia_userow2.php on line 58

Notice: Undefined index: user_id in C:\xamppp\htdocs\test\historia_userow2.php on line 61

0

to jakieś zadanie na studia czy bootcampie, bo już kilka razy widziałem :)

0

for fun :D

0
Wrzód napisał(a):

Takie coś zrobiłem i mam 2 błędy:
Notice: Undefined variable: id in C:\xamppp\htdocs\test\historia_userow2.php on line 58

Notice: Undefined index: user_id in C:\xamppp\htdocs\test\historia_userow2.php on line 61

Napisałem:

Jak się logujesz na swoje konto, zapisujesz do sesji sobie id użytkownika.
np. $_SESSSION['user_id'] = $id; gdzie $id to id użytkownika.

Nie wiem po co głupio zrobiłeś coś takiego:

> <?php
> $_SESSSION['user_id'] = $id;
> include('polacz.php');
> $l = 1;

Oczywiste jest, że jak do sesji spróbujesz zapisać nie istniejącą zmienną $id, to wyskoczą Ci błędy. To tak jakbyś próbował przypisać do zmiennej "NIC" i liczył na to, że to zadziała poprawnie.

0

ech czyli co miałbym gdzie dodać aby to działało?

0
Wrzód napisał(a):

ech czyli co miałbym gdzie dodać aby to działało?

Odpowiedziałem Ci na to już za pierwszym razem:

Jak się logujesz na swoje konto, zapisujesz do sesji sobie id użytkownika.
np. $_SESSSION['user_id'] = $id; gdzie $id to id użytkownika.

W momencie logowania się jakoś przeszukujesz bazę po nazwie użytkownika i porównujesz hasło. Wykorzystaj ten fakt, że wtedy musisz wyciągnąć dany rekord z bazy i masz możliwość zabrania również id tego użytkownika, a następnie przypisania tego id do sesji.

0
$id = $_GET['id'];
if ($sql =  $polaczenie->prepare("SELECT * FROM historia WHERE action_type = 2 AND user_id = '".$_GET['id']."'"))

Zrobiłem tak i działa poprawnie tylko pytanie dlaczego bo sam tego nie kapuje. w moim pliku wyloguj.php dodałem $id = $_GET['id']; aby zapisywało mi w user_id odpowiednie id przypisane dla każdego usera, więc pomyślałem że to będzie to?

0
Wrzód napisał(a):
$id = $_GET['id'];
if ($sql =  $polaczenie->prepare("SELECT * FROM historia WHERE action_type = 2 AND user_id = '".$_GET['id']."'"))

Zrobiłem tak i działa poprawnie tylko pytanie dlaczego bo sam tego nie kapuje. w moim pliku wyloguj.php dodałem $id = $_GET['id']; aby zapisywało mi w user_id odpowiednie id przypisane dla każdego usera, więc pomyślałem że to będzie to?

Po pierwsze, $_GET bazuje na urlu. Jeżeli po kliknięciu "pokaż historię" przenosi Cię np na taki link host/historia?id=1, to wystarczy zmienić id ręcznie w url'u, aby poznać historię innego użytkownika.

Co gorsza, jesteś tutaj podatny na sql injection, bo ani nie walidujesz otrzymanych danych, ani nie sanityzujesz ich.

1 użytkowników online, w tym zalogowanych: 0, gości: 1