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

question-closed OSADNICY / Natknąłem się na mur / PANEL ADMINA

Object Storage Arubacloud
0 głosów
483 wizyt
pytanie zadane 16 kwietnia 2020 w PHP przez spicedagger Użytkownik (530 p.)
zamknięte 20 kwietnia 2020 przez spicedagger

Niestety dotarłem do ściany przerabiając, grę osadnicy próbując dodać panel admina gdzie można aktualizować dane surowców itd. amina  nadałem użytkownikowi adam hasło qwerty, po zalogowaniu tylko jemu wyświetla się odnośnik do Panelu Admina.

Po przejściu do panelu wpisujemy login użytkownika którego dane chcemy zaktualizować i klikamy wybierz

Po wybraniu użytkownika wpisujemy dane które chcemy zaktualizować i klikamy aktualizuj (na razie jedno pole tylko) i się to pole powinno zaktualizować po odświeżeniu nie wiem co źle z robię utknąłem, proszę o wybaczenie jestem początkującym. DODAJE ZAŁĄCZNIK  z Plikami na końcu

MAM NADZIEJĘ ŻE DOBRZE WYJAŚNIŁEM, a pliki rozwieją wątpliwości, było by miło jakby ktoś na to zerknął :)

LINK DO PLIKÓW

 

 

 

 

 
komentarz zamknięcia: najlepsza
komentarz 16 kwietnia 2020 przez Arkadiusz Waluk Ekspert (287,950 p.)

Włącz czasowo wyświetlanie błędów PHP, czyli to:

ini_set("display_errors", 0);

ustaw na 1 (lub tylko usuń jeśli odgórnie w php.ini masz włączone) i sprawdź. Jeśli nadal nic to sprawdź czy MySQL po wykonaniu zapytania zwraca jakiś błąd: https://www.php.net/manual/en/mysqli.error.php lub ustaw aby wszystkie błędy rzucał jako wyjątki: https://www.php.net/manual/en/mysqli-driver.report-mode.php

komentarz 16 kwietnia 2020 przez spicedagger Użytkownik (530 p.)
panie jestem początkującym, ale spróbuje zobaczyć jak piszesz

takie coś wywala:

Undefined variable: database
komentarz 16 kwietnia 2020 przez Arkadiusz Waluk Ekspert (287,950 p.)

Skoro jesteś początkujący to tym bardziej dobrze, abyś wiedział jak się szuka błędów w swoim kodzie :)

Powiedział Ci, ze zmienna database jest niezdefiniowana. No i faktycznie, jak się spojrzy do Twojego kodu to masz:

mysqli_select_db($polaczenie, $database);

i nie widzę abyś gdzieś wcześniej zdefiniował. Nie wiem nawet po co tu wybierasz jeszcze raz bazę danych skoro przy samym łączeniu już to robisz. Nie jestem też pewien czy to jest rozwiązanie właściwego problemu (czy jak nie dostanie bazy do zmiany to i tak będzie próbował zmienić i dlatego się sypie, czy ominie), ale na pewno warto poprawić.

komentarz 20 kwietnia 2020 przez spicedagger Użytkownik (530 p.)

Poprawiłem tam rzeczy ale mimo to nie aktualizuje się, nie mam pojęcia dlaczego, żadnych błędów nie wywala,  a mimo to że zmienne $nowa i $ku są wyświetlane poprawie, to zapytanie nie chce ich użyć do aktualizacji, bo aktualizacja działa gdy wpiszę ręcznie bez pobierania z zmiennych 

<?php
session_start();
if(!isset($_SESSION['zalogowany']))
{
		header('Location:index.php');
	exit();
}
?>

<?php 

if(!isset($_POST['dnipremium1'])){
		header('Location:graa.php');
}

else {



require_once 'connect.php';
$polanczenie = @ new mysqli($host, $db_user, $db_password, $db_name); 

if ($polanczenie->connect_errno!=0)
	{
		echo "Error: ".$polanczenie->connect_errno;
	}
	
	$ku=$_POST['dnipremium1'];
$nowa = $_SESSION['nu'];
echo $nowa;
echo $ku;

$sql =('UPDATE uzytkownicy SET dnipremium="$ku" WHERE user="$nowa"');
if(mysqli_query($polanczenie, $sql)){ 
    echo "Udało się zaaktualizować."; 
} 
else { 
    echo "ERROR: Nie udało się zaaktualizować $sql. "  
                            . mysqli_error($polanczenie); 
}  
mysqli_close($polanczenie); 
}




?>

 

komentarz 20 kwietnia 2020 przez Arkadiusz Waluk Ekspert (287,950 p.)
$sql =('UPDATE uzytkownicy SET dnipremium="$ku" WHERE user="$nowa"');

Tu na pewno masz źle zapisany string. Nic co jest zapisane w ciągu między apostrofami nie zostanie zinterpretowane, czyli zamiast nazw zmiennych $ku i $nowa nie pojawią się tam wartości.

A już najlepiej to byłoby bindować wszystkie wartości jakie wysyłasz do bazy, to wtedy jest zabezpieczenie przed atakiem SQL injection.

komentarz 20 kwietnia 2020 przez spicedagger Użytkownik (530 p.)
To jak mam wstawić to co jest w tych zmiennych do zapytania? myślałem że tak się to robi
1
komentarz 20 kwietnia 2020 przez Arkadiusz Waluk Ekspert (287,950 p.)

Nie, tak się nie robi. Pół biedy to co masz z sesji o ile to jest wcześniej sprawdzane zanim się tam znajdzie, ale jeśli na to co przychodzi z $_POST nie masz dodatkowej walidacji/czyszczenia wartości to można przeprowadzić atak wstrzyknięcia kodu SQL i wykonać sobie jakieś zapytanie bez dostępu do bazy.

Zalecałbym wszystkie przesyłane wartości bindować, np. tu jest opisane pokazane jak to wygląda dla mysqli: https://www.php.net/manual/en/mysqli-stmt.bind-param.php

A jak już tak jak zrobiłeś to trzeba by zamienić cudzysłowy/apostrofy miejscami:

$sql = "UPDATE uzytkownicy SET dnipremium='$ku' WHERE user='$nowa'";

i dopiero to będzie miało szansę zadziałać (chyba że $ku/$nowa to liczby, wtedy można też bez tych apostrofów).

komentarz 20 kwietnia 2020 przez spicedagger Użytkownik (530 p.)
No działa teraz, pomyliło mi się cudzysłowy/apostrofy kolejność: ) Co do walidacji, to zwykły użytkownik nie admin nie może się dostać to tego formularza aktualizacji, więc chyba, nie mam jak wyszczekiwać, ale tu nie jestem pewnie czy dobrze to rozmieniłem,  będę nad tym pracował, spróbuję tęż ogarnąć to z bindami jak pisałeś, dzięki za pomoc
komentarz 20 kwietnia 2020 przez Arkadiusz Waluk Ekspert (287,950 p.)
Zasadniczo nie chodzi o samą kolejność, a o to, że w cudzysłowach wstawione zmienne będą podstawione, a w apostrofach nie. Co do walidacji, to nie ma znaczenia jaki użytkownik tak naprawdę. Może być tak, że dasz komuś administratora, ale nie chcesz aby mógł się włamać do całej bazę albo wyczyścić wszystkie dane. Tak się po prostu nie robi, trzeba takie rzeczy zabezpieczać. Powodzenia
1
komentarz 20 kwietnia 2020 przez spicedagger Użytkownik (530 p.)
No wiem, że trzeba, będę nad tym pracował, to dopiero początki :) jeszcze raz dzięki

1 odpowiedź

+1 głos
odpowiedź 16 kwietnia 2020 przez franz Gaduła (4,940 p.)

 

Skasuj tą "@" pokaże błędy i być może sam wpadniesz na to gdzie jest błąd 

$polaczenie = @new mysqli($host, $db_user, $db_password, $db_name);

Zapytanie powinno chyba wyglądać tak 

"UPDATE uzytkownicy SET dnipremium='$ku' WHERE user='$nowa' "

nazwy kolumn chyba nie powinny być w apostrofach ,ale zmienne które przekazują stringi powinny być umieszczone w apostrofach.

komentarz 16 kwietnia 2020 przez spicedagger Użytkownik (530 p.)
Tak wiem że w apostrofach ale testowałem tak jak działa w phpmyadmin więc zapomniałem zmienić , i błędów żadnych nie wywala, poprawiłem w pliku te apostrofy
komentarz 16 kwietnia 2020 przez franz Gaduła (4,940 p.)
Ta zmienna sesyjna "$_SESSION['nu']" zawiera prawidłowy nick

Nic mi nie przychodzi innego do głowy
komentarz 16 kwietnia 2020 przez spicedagger Użytkownik (530 p.)
tak po to echo dałem w update żeby widzieć czy dane dobrze przyszły

Podobne pytania

0 głosów
1 odpowiedź 245 wizyt
pytanie zadane 1 lipca 2020 w PHP przez Samek2222 Początkujący (440 p.)
0 głosów
2 odpowiedzi 236 wizyt
pytanie zadane 9 listopada 2019 w Nasze projekty przez kordix Gaduła (3,910 p.)
0 głosów
1 odpowiedź 98 wizyt
pytanie zadane 6 maja 2020 w Systemy operacyjne, programy przez Eriss69 Gaduła (4,470 p.)

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

61,960 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!

...