Jak dodać wartość do konkretnego ID w bazie?

0

Cześć,
Piszę projekt w ramach nauki PHP i napotkałem problem.
Mam bazę z dwoma tabelami users oraz scores, napisałem też panel rejestracji i logowania. Podczas rejestracji, do tabeli scores wpada wartość np. 200 oraz userID, który jest taki sam jak ID utworzonego użytkownika(no raczej).
I gdy jestem zalogowany na danego użytkownika chciałbym, klikając w button dodać w tabeli scores np. wartość 400 do tych 200, ale tylko do wiersza z userID takim jaki ma mój użytkownik, żeby punkty dostał tylko user na którego jestem zalogowany.

Przycisk:

<form method="POST" action="scores">
		<div class="input-group">
		    <button type="submit" class="btn" name="add_400">Add</button>
	    </div>
</form>

Logowanie:

if (isset($_POST['login_user'])) {
		$username = mysqli_real_escape_string($conn, $_POST['username']);
		$password = mysqli_real_escape_string($conn, $_POST['password']);

			$sql = "SELECT * FROM users WHERE username='$username'";
			$results = mysqli_query($conn, $sql);
			if (mysqli_num_rows($results) == 1) {
				$row = mysqli_fetch_assoc($results);
					if(password_verify($password,$row['password'])){
						$id = $row['ID'];

						$sql = "SELECT * FROM scores WHERE userID='$id'";
						$results = mysqli_query($conn, $sql);
						if (mysqli_num_rows($results) == 1) {
							$row = mysqli_fetch_assoc($results);							
										$wartosc = $row['wartosc'];
																					
										$_SESSION['wartosc'] = $wartosc;
										$_SESSION['username'] = $username;
										$_SESSION['ID'] = $id;
								
										header('location: page');
										}
				
			
					}

			}
		
}		

Dodawania punków:

if (isset($_POST['add_400'])) {
mysqli_query($conn, 'UPDATE resources SET wartosc = wartosc+400');
}
```		
No i to dodawanie punktów działa tylko, że oczywiście dodaje punkty do wszystkich wartości w ```scores```. Kombinowałem na różne sposoby, ale wciąż nie wiem jak to rozwiązać.
Będę wdzięczny za pomoc.
0

Ok, zmieniam ton odpowiedzi :)
Przecież masz wszystko co trzeba (id usera w sesji), zatem jedyne czego Ci brakuje to where'a w zapytaniu z update'm.

0

@axelbest: Wiem, że mogę zrobićnp. WHERE userID = $id Tylko jak mam się dobrać właśnie do ID żeby przypisać do zmiennej $id ? edit. No właśnie nie działa mi ta sesja z id poza kodem logowania.

0

Zmienna $_SESSION['ID'] przechowuje ID Twojego usera prawda? $_SESSION['ID'] jest też dostępne globalnie. A skoro sesja Ci nigdzie indziej nie działa to pewnie nie robisz czegoś takiego jak session_start().

0
mysqli_query($conn, 'UPDATE resources SET wood = wood+100 WHERE userID = '$_SESSION['ID']'');

Wywala, że zmienna nieznana - próbowałem już tak :/
Mam session_start()
Czy może coś nie tak jest w tej składni zapytania ?

2

A dodałeś session_start()? Ogólnie to na Twoim miejscu zacząłbym od tego żeby zrobić poprawne logowanie/wylogowanie. Na chwilę obecną polecam używać polecenia var_dump($nazwaZmiennej), dzięki czemu zobaczysz co siedzi obecnie w danej zmiennej.

[edit] - dla bezpieczeństwa średników :) zrób lepiej tak

mysqli_query($conn, 'UPDATE resources SET wood = wood+100 WHERE userID = ' . $_SESSION['ID']);

aa no i chwila moment - wywala Ci info, ze zmienna nieznana, ale ktora zmienna? Bo mam podejrzenie, ze to raczej $conn Ci brakuje

0

Dobra sukces, session_start() miałem oczywiście w złym miejscu i Twój kod zadziałał, więc pewnie brak $conn. Muszę ogarnąć ten kod bo już się w nim miotam. Dziękować za pomoc.

1

Super, fajnie, że pomogłem. Podpowiem jeszcze, żebyś odseparowywał kod, to będziesz miał porzadek i łatwiej Ci będzie coś robić. Kilka mikro porad:

  1. Połączenie z bazą wpakuj do funkcji jakiejś.
  2. Unikaj drabinek if'ów.
  3. Jeśli chcesz poznawać dobre praktyki, to poczytaj o sql injection i prepared statements.

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