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

Wyciąganie danych z bazy.

VPS Starter Arubacloud
+1 głos
420 wizyt
pytanie zadane 30 maja 2021 w PHP przez cocacola13 Nowicjusz (170 p.)

Witam zmagam się z problem którego nie potrafię rozwiązać prawidłowo,

chodzi o to że gdy zaloguje się użytkownik xxx na stronę to w panelu klienta wyświetlą się dane z bazy które są powiązane z danym użytkownikiem czyli 

na stronie bym chciał żeby wyciągało dane z bazy o danych id czyli miało by to tak wyglądać.

wygląd
ID TYP czas
957HD2 GAME 22D/14h/22m
957HD1 WEB 22D/14h/22m

 

Problem polega na tym iż nie wiem jak wyciągnąć różne kolumny z bazy przypisane do danego użytkownika oraz nie wiem jak je przypisać użytkownikowi w sposób rzetelny i kompetentny,.

mój system logowania:

<?php 

include 'config.php';

session_start();

error_reporting(0);

if (isset($_SESSION['username'])) {
    header("Location: /menage/profile.php");
}

if (isset($_POST['submit'])) {
	$email = $_POST['email'];
	$authkey = $_POST['authkey'];
	$password = md5($_POST['password']);
			

	$sql = "SELECT * FROM users WHERE email='$email' AND password='$password' AND authkey='$authkey'  ";
	$result = mysqli_query($conn, $sql,);
	if ($result->num_rows > 0) {
		$row = mysqli_fetch_assoc($result);
		$_SESSION['username'] = $row['username'];
		$_SESSION['saldo'] = $row['saldo'];
		$_SESSION['email'] = $row['email'];
		$_SESSION['user_rang'] = $row['user_rang'];
		$_SESSION['saldo'] = $row['saldo'];
		$_SESSION['kredyt'] = $row['kredyt'];

		header("Location: /menage/profile.php");
	} else {
		echo "<script>alert('Woops! Email or Password is Wrong.')</script>";
	}
	
	}
	{
	$sql = "SELECT * FROM vps WHERE ram, dysk, id";
		$result = $conn->query($sql);
		$_SESSION['id'] = $row['ids'];
		$_SESSION['dysk'] = $row['dysk'];
	}

?>

 

Wiem Jestem Laikiem ale Proszę o pomoc Pozdrawiam Miłego dnia. 

 

 

2 odpowiedzi

+1 głos
odpowiedź 31 maja 2021 przez VBService Ekspert (251,210 p.)
edycja 31 maja 2021 przez VBService
. . .
$password = md5($_POST['password']);
. . .

Moim zdaniem powinieneś przemyśleć zaprzestanie używania md5 do "maskowania" hasła użytkownika

What is better? Password_hash vs. SHA256 vs. SHA1 vs. md5

What different between md5() .vs. hash when saving password?

Secure hash and salt for PHP passwords

 

Kolejna sprawa, to "nie ufamy danym z formularza", 

. . .
    $email = $_POST['email'];
    $authkey = $_POST['authkey'];
    $password = md5($_POST['password']);
. . .

dobrze by było jakbyś wprowadził, jakąkolwiek walidację tych danych, ponieważ używasz ich bezpośrednio w zapytaniu sql. (SQL injection)

SQL injection

Zapytanie SQL to żądanie wykonania jakiejś czynności w bazie danych, zwykle jest to zapytanie ze strony internetowej pytającej o nazwę użytkownika i hasło. Ponieważ jednak większość stron nie wymaga podania żadnych danych poza nazwami użytkownika i hasłami, haker może wykorzystać pola formularzy do wysyłania własnych żądań, tzn. wstrzykiwania kodu SQL do bazy danych. Tym sposobem hakerzy mogą tworzyć, odczytywać, aktualizować, modyfikować i usuwać dane przechowywane w bazach danych, zwykle w celu pozyskania poufnych informacji, takich jak nr PESEL lub karty kredytowej czy inne dane finansowe.

. . .

    $email = $_POST['email'];
    $authkey = $_POST['authkey'];
    $password = md5($_POST['password']);
             
 
    $sql = "SELECT * FROM users "
          ."WHERE email='$email' AND password='$password' AND authkey='$authkey' ";
. . .

np.:

PHP Sanitize and Validate Input Fields via Filters - Sanitize filters

PHP Form Validation with example

Validate Form Data with PHP

Tworzenie w bezpieczny sposób zapytań sql np.:

How to bind SQL variables in PHP?

PHP mysqli_stmt_bind_param() Function

mysqli_stmt_bind_param

 

bym chciał żeby wyciągało dane z bazy o danych id

pobierz ID - użytkownika

 . . .   
    $sql = "SELECT * FROM users WHERE email='$email' AND password='$password' AND authkey='$authkey'  ";
    $result = mysqli_query($conn, $sql,);
    if ($result->num_rows > 0) {
        $row = mysqli_fetch_assoc($result);
        $_SESSION['user_id'] = $row['id']; // <= np.
        $_SESSION['username'] = $row['username'];
        $_SESSION['saldo'] = $row['saldo'];

. . .

a później np.:

. . .
    $sql = "SELECT * FROM vps WHERE user_id='{$_SESSION['user_id']}' ";
    // oczywiście tabela `vps` musi zawierać pole `user_id`
    // takie same jak w tabeli `user`
    $result = $conn->query($sql);
. . .

 

komentarz 31 maja 2021 przez cocacola13 Nowicjusz (170 p.)
dziękuje za odpowiedzi. czyli mój kod to gówno, i najlepiej to wywalić i napisać nowy, jeżeli rozumiem dobrze tak czy inaczej musze przerobić cały kod aby było dobrze?, i mam problem jeszcze że podczas logowania xxx user ->>> otwiera połączenie mysql po zalogowaniu ---> je zamyka, i jeżeli coś zmienię w bazie a mam zapytanie php w pliku żeby wyciągało dane z kolumny po odświeżeniu strony nie ma zmian dopiero po przelogowaniu i ponownym otwarciu połączenia PHP.
komentarz 31 maja 2021 przez cocacola13 Nowicjusz (170 p.)

problem mam jeszcze jeden jeżeli mam 5 pozycji w bazie dla danego użytkownika czyli:

service_id Backup Ram Dysk Time
24advc1 tak 764 200 20.11.2021
24advc7 nie 321 50 20.05.2021

 

i żeby wyciągnąć to z bazy ale w osobnych wierszach czyli np

id                backup      time

24advc1      tak           20.11.2021

24advc7      nie           20.05.2021

chodzi o zapytanie które w kolejności z bazy wyciągnie service próbowałem i nie potrafię :/ 

Dziękuje za pomoc. miłego dnia

 


 

komentarz 31 maja 2021 przez VBService Ekspert (251,210 p.)

dziękuje za odpowiedzi. czyli mój kod to gówno, 

spokojnie, nikt tak nie twierdzi, a tym bardziej Ja.  smiley, uczysz się, popraw kod według wskazówek i będzie dobrze. smiley

1
komentarz 31 maja 2021 przez cocacola13 Nowicjusz (170 p.)
sam do siebie tak stwierdziłem wiadomo że mój kod nie jest najlepszy i też nie najgorszy ale mógł być o wiele lepszy. Proszę o nie zamykanie tematu wrzucę poprawiony kod. Pozdrawiam. Miłego dnia
komentarz 31 maja 2021 przez VBService Ekspert (251,210 p.)
edycja 31 maja 2021 przez VBService

Tabela w takiej postaci nie zawiera informacji, którego użytkownika te dane dotyczą

 

np.:

tabela użytkownicy: `user` (przykładowy wygląd i dane)

 id   email   password   authkey 
957HD1 user1@email.com user1password user1authkey
957HD2 user2@email.com user2password user2authkey

 

tabela serwisów: `service` (przykładowy wygląd i dane)

 service_id   user_id   backup   ram   dysk   time 
24advc1 957HD1 tak 764 200 20.11.2021
24advc7 957HD1 nie 321 50 20.05.2021
24adl47 957HD2 tak 256 100 12.11.2021

 

 

 

 

inne przykładowe dane

 id   email   password   authkey 
957HD1 user1@email.com user1password user1authkey
957HD2 user2@email.com user2password user2authkey
957HD3 user3@email.com user3password user3authkey

 

 service_id   user_id   backup   ram   dysk   time 
24advc1 957HD1 tak 764 200 20.11.2021
24advc7 957HD1 nie 321 50 20.05.2021
24adl47 957HD2 tak 256 100 12.11.2021
24advg2 957HD1 tak 128 250 11.02.2022
24adoo3 957HD3 tak 1024 500 01.11.2021

 

 

 

komentarz 31 maja 2021 przez cocacola13 Nowicjusz (170 p.)

rozumiem, tylko teraz jak wygenerować dany user_id podczas rejestracji mój kod rejestracji 

<?php 

include 'config.php';

error_reporting(0);

session_start();

if (isset($_SESSION['username'])) {
    header("Location: index.php");
}

if (isset($_POST['submit'])) {
	$username = $_POST['username'];
	$email = $_POST['email'];
	$password = md5($_POST['password']);
	$cpassword = md5($_POST['cpassword']);

	if ($password == $cpassword) {
		$sql = "SELECT * FROM users WHERE email='$email'";
		$result = mysqli_query($conn, $sql);
		if (!$result->num_rows > 0) {
			$sql = "INSERT INTO users (username, email, password)
					VALUES ('$username', '$email', '$password')";
			$result = mysqli_query($conn, $sql);
			if ($result) {
				echo "<script>alert('Wow! User Registration Completed.')</script>";
				$username = "";
				$email = "";
				$_POST['password'] = "";
				$_POST['cpassword'] = "";
			} else {
				echo "<script>alert('Woops! Something Wrong Went.')</script>";
			}
		} else {
			echo "<script>alert('Woops! Email Already Exists.')</script>";
		}
		
	} else {
		echo "<script>alert('Password Not Matched.')</script>";
	}
}

?>

 

0 głosów

Podobne pytania

0 głosów
2 odpowiedzi 202 wizyt
0 głosów
0 odpowiedzi 2,178 wizyt
pytanie zadane 28 października 2017 w PHP przez Undisputed Gaduła (3,040 p.)
0 głosów
2 odpowiedzi 122 wizyt
pytanie zadane 12 sierpnia 2019 w SQL, bazy danych przez Kacperhehe Bywalec (2,930 p.)

92,454 zapytań

141,262 odpowiedzi

319,099 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...