PHP Problém

Odpovědět
RayCodeCSC
Příspěvky: 46
Registrován: 11 črc 2019 23:52

PHP Problém

Příspěvek od RayCodeCSC » 18 říj 2019 00:39

Zdravím, tvorím svoju vlastnú web stránku pomocou HTML, CSS a PHP. Aktuálne pracujem na prihlasovacom systéme, ale je tu menší problém.

Chyba je v tom, že pokiaľ zadám rôzne údaje do formulára na prihlas. stránke, tak ma to prihlási, aj keď užívateľ v databázi neexistuje.

Script:

Kód: Vybrat vše

				<?php
					$servername = "Nemusíte vedieť...";
					$username = "Nemusíte vedieť...";
					$pass = "Nemusíte vedieť...";

					$nickname = $_POST['username'];
					$heslo_uzivatela = $_POST['pass'];

					$pripoj = mysqli_connect($servername, $username, $pass);

					$zisti_uzivatela = "SELECT nickname FROM users WHERE nickname='$nickname'";
					$zisti_heslo = "SELECT password FROM users WHERE password='$heslo_uzivatela'";

					if(isset($_POST['prihlasit-sa']))
					{
						if($pripoj)
						{
							if($zisti_uzivatela && $zisti_heslo)
							{
								echo "Prihlasujem...";
								reload("2", "../index.php");
							}
							else
							{
								echo "Zadali ste zle uzivatelske meno alebo heslo!";
								reload("2", "login.php");
							}
						}
						else
						{
							echo "Nastala chyba s MySQL!";
						}

					}
				?>

Uživatelský avatar
Escanor
Příspěvky: 14
Registrován: 17 zář 2019 21:52

Příspěvek od Escanor » 18 říj 2019 18:31

Tvôj skript nedáva zmysel

Kód: Vybrat vše

				<?php
					$servername = "Nemusíte vedieť...";
					$username = "Nemusíte vedieť...";
					$pass = "Nemusíte vedieť...";

					$nickname = $_POST['username'];
					$heslo_uzivatela = $_POST['pass'];

					$pripoj = mysqli_connect($servername, $username, $pass);

					$zisti_uzivatela = "SELECT nickname FROM users WHERE nickname='$nickname'";
					$zisti_heslo = "SELECT password FROM users WHERE password='$heslo_uzivatela'";

					if(isset($_POST['prihlasit-sa']))
					{
						if($pripoj)
						{
[color=#FF0000]							if($zisti_uzivatela && $zisti_heslo)
							{
								echo "Prihlasujem...";
								reload("2", "../index.php");
							}[/color]
							else
							{
								echo "Zadali ste zle uzivatelske meno alebo heslo!";
								reload("2", "login.php");
							}
						}
						else
						{
							echo "Nastala chyba s MySQL!";
						}

					}
				?>
ako wtf,

Kód: Vybrat vše

					$zisti_uzivatela = "SELECT nickname FROM users WHERE nickname='$nickname'";
					$zisti_heslo = "SELECT password FROM users WHERE password='$heslo_uzivatela'";

Kód: Vybrat vše

if($zisti_uzivatela && $zisti_heslo)
čo čakáš že to má spraviť? Presne tak nič. $zisti_uzivatela nerobí s databázou nič je to string ako napr $dfgf = "hi" ...
celý skript nedáva zmysel, a nikdy fungovať nebude.
https://www.w3schools.com/php/php_mysql_select.asp

RayCodeCSC
Příspěvky: 46
Registrován: 11 črc 2019 23:52

Příspěvek od RayCodeCSC » 18 říj 2019 19:33

Tak som script teda upravil podľa príkladov a zasa mi to stále vypisuje "else", teda že užívateľ neexistuje.

Script:

Kód: Vybrat vše

				<?php
					$servername = "Nie je dôležité";
					$username = "Nie je dôležité";
					$pass = "Nie je dôležité";
					$dbname = "Nie je dôležité";

					$nickname = $_POST['username'];
					$heslo_uzivatela = $_POST['pass'];

					$pripoj = mysqli_connect($servername, $username, $pass, $dbname);
					$result = mysqli_query($pripoj, $zisti_udaje);

					$zisti_udaje = "SELECT nickname, password FROM users WHERE nickname='$nickname', password='$heslo_uzivatela'";

					if(isset($_POST['prihlasit-sa']))
					{
						if($pripoj)
						{
							if($zisti_udaje && $result)
							{
								echo "Prihlasujem...";
								reload("2", "../index.php");
							}
							else
							{
								echo "Zadali ste zle uzivatelske meno alebo heslo!";
								reload("2", "login.php");
							}
						}
						else
						{
							echo "Nastala chyba s MySQL!";
							reload("2", "login.php");
						}

					}
				?>
Môžeš mi prosím napísať presný postup, ako to teda mám urobiť? Resp. prepísať script tak, aby fungoval? Som z toho magor...

Uživatelský avatar
Escanor
Příspěvky: 14
Registrován: 17 zář 2019 21:52

Příspěvek od Escanor » 18 říj 2019 21:02

Kód: Vybrat vše

					$result = mysqli_query($pripoj, $zisti_udaje);

					$zisti_udaje = "SELECT nickname, password FROM users WHERE nickname='$nickname', password='$heslo_uzivatela'";
Ty definuješ zisti udaje až po tom čo result, takže sa to nevykonna lebo zisti udaje ešte neexistuje.
Pozri, nemá cenu ti to opraviť, alebo pozrieť celý kód. Niečo určite zase pokazíš. Preto si pozri radšej tutoríal ako to spraviť..
https://www.tutorialrepublic.com/php-tu ... system.php

a ešte:

Kód: Vybrat vše

if($zisti_udaje && $result)
určite fungovať nebude.
A keď to urobíš takto

Kód: Vybrat vše

$zisti_udaje = "SELECT nickname, password FROM users WHERE nickname='$nickname', password='$heslo_uzivatela'";
tak ta niekto hackne, sql inject. Urob to podla toho tutoríalu.

RayCodeCSC
Příspěvky: 46
Registrován: 11 črc 2019 23:52

Příspěvek od RayCodeCSC » 18 říj 2019 21:45

Escanor píše:
18 říj 2019 21:02

Kód: Vybrat vše

					$result = mysqli_query($pripoj, $zisti_udaje);

					$zisti_udaje = "SELECT nickname, password FROM users WHERE nickname='$nickname', password='$heslo_uzivatela'";
Ty definuješ zisti udaje až po tom čo result, takže sa to nevykonna lebo zisti udaje ešte neexistuje.
Pozri, nemá cenu ti to opraviť, alebo pozrieť celý kód. Niečo určite zase pokazíš. Preto si pozri radšej tutoríal ako to spraviť..
https://www.tutorialrepublic.com/php-tu ... system.php

a ešte:

Kód: Vybrat vše

if($zisti_udaje && $result)
určite fungovať nebude.
A keď to urobíš takto

Kód: Vybrat vše

$zisti_udaje = "SELECT nickname, password FROM users WHERE nickname='$nickname', password='$heslo_uzivatela'";
tak ta niekto hackne, sql inject. Urob to podla toho tutoríalu.
Keď sa tak na tie tutoriály pozerám... mám lepšiu otázku: Čo všetko musím nainštalovať na VPS, aby mi naň fungovalo naplno WordPress?

Uživatelský avatar
Escanor
Příspěvky: 14
Registrován: 17 zář 2019 21:52

Příspěvek od Escanor » 18 říj 2019 23:39

Až php a mysql. Nechápem čo je to za otázku

Uživatelský avatar
Javierko
Zákaznická podpora
Příspěvky: 71
Registrován: 09 bře 2019 19:24
Bydliště: OnGameFrame()
Kontaktovat uživatele:

Příspěvek od Javierko » 20 říj 2019 00:50

Zde jsou veškeré požadavky pro WP.
Pawn, SourcePawn, Web development, MySQL, Lua, ...

YouTube: https://www.youtube.com/c/Javierko21
Twitch: https://twitch.tv/javierko

Projects:
https://steamid.cz
https://hexmania.eu/

RayCodeCSC
Příspěvky: 46
Registrován: 11 črc 2019 23:52

Příspěvek od RayCodeCSC » 20 říj 2019 17:50

Ľudia ja absolútne ale že absolútne nemám ani trocha poňatia o tom, ako mám urobiť prihlásenie!!!

PHP ovládam tak na 56%, ale vôbec netuším ako mám pracovať s MySQLi...

Takto... pracovať s MySQLi viem, výpis dat z tabuľky, zápis do nej, update, delete toto všetko viem, ale vôbec netuším, ako mám urobiť to, že po odoslaní formulára overí php script zadané údaje, a pokiaľ sa v databází zhoduje meno a heslo, tak ho to pustí ďalej, pokiaľ nie, tak to napíše chybu. Rôzne som to skúšal meniť a rôzne som si o tom prečítal na internete, ale fakt môj mozog skrátka vôbec nevie ako to urobiť...

Tu posielam celý script vrátane HTML:

Kód: Vybrat vše

<?php require_once("../functions.php"); ?>
<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>Prihlásenie</title>
</head>
<body>
	<form action="#" method="post" style="padding-top: 10px;">
		<center>
			<h2>Prihlásenie</h2>

			Nickname:<br>
			<input type="text" name="nickname" required><br><br>

			Heslo:<br>
			<input type="password" name="heslo" required><br><br>

			<button name="prihlasit">Prihlásiť sa</button><br><br>
		</center>
	</form>
	<center><a href="#" target="_blank">Zabudli ste prihlasovacie údaje?</a><br><br></center>

	<?php
		$nick = $_POST['nickname'];
		$pass = $_POST['heslo'];
		$odosli = $_POST['prihlasit'];

		// Pripojenie do databáze //
		$db_name = "Nič";
		$db_user = "Nič";
		$db_pass = "Nič";
		$db_host = "Nič";

		$connect = mysqli_connect($db_host, $db_user, $db_pass, $db_name);
		$sql = "SELECT * FROM users WHERE nickname='$nick' AND password='$pass'";
		$result = mysqli_query($connect, $sql);

		$riadok = mysqli_fetch_array($result, MYSQLI_ASSOC);
		////////////////////////////

		if(isset($odosli))
		{
			if($result && $riadok == $nick && $riadok == $pass)
			{
				echo "<center>Prebieha prihlasovanie...</center>";
				reload("2", "../index.php");
			}
			else if($result && $riadok != $nick && $riadok != $pass)
			{
				echo "<center>Zadali ste zlé údaje!</center>";
				reload("2", "login.php");
			}
		}
	?>
</body>
</html>
Teraz chcem urobiť čisto len to, aby PHP zistilo, či sú údaje v databázi a v konkrétnom riadku správne, to znamená, že pokiaľ v riadku bude "nickname='RayCodeCSC' " a "password='Heslo123' ", tak PHP kód bude vedieť, že údaje sú správne a zobrazí sa nejaká stránka... Teraz chcem poradiť čisto len ako toto urobiť, nechcem tam žiadne relácie ($_SESSION) ani nič podobné. Chcem len čisto overenie údajov...

Uživatelský avatar
Escanor
Příspěvky: 14
Registrován: 17 zář 2019 21:52

Příspěvek od Escanor » 20 říj 2019 19:51

Podla toho čo si poslal, php ovládaš na 8% najviac.
Čo je array podla teba?

Kód: Vybrat vše

$riadok = mysqli_fetch_array
asi $riadok[0] == $nick $riadok[1] == $pass a nie $riadok == $nick && $riadok == $pass

Na 56% ti chýba ešte veľmi veľa.

Uživatelský avatar
Javierko
Zákaznická podpora
Příspěvky: 71
Registrován: 09 bře 2019 19:24
Bydliště: OnGameFrame()
Kontaktovat uživatele:

Příspěvek od Javierko » 20 říj 2019 21:49

Dovoluji si říct, že to není ani 8% :D

Kód: Vybrat vše

<?php
require_once("../functions.php");

if(isset($_POST['prihlasit'])) {
    if($_POST['nickname'] != "" && $_POST['heslo'] != "") {
        $db_name = "Nič";
        $db_user = "Nič";
        $db_pass = "Nič";
        $db_host = "Nič";

        $mysql = new mysqli($db_host, $db_user, $db_pass, $db_name) or die($mysql->error);

        $nickname = $mysql->real_escape_string($_POST['nickname']);
        $password = $mysql->real_escape_string($_POST['heslo']);

        $stmt = $mysql->prepare("SELECT * FROM users WHERE nickname = ?");
        $stmt->bind_param("s", $nickname);

        if($stmt->execute()) {
            $result = $stmt->get_result();
            $numRows = $result->num_rows;

            if($numRows > 0) {
                $user = $results->fetch_assoc();

                $userPassword = $user['password'];

                //Tady bych spíše použil funkci password_verify() a heslo bych zašifroval, protože bych ho v databázi nenechával jako jenom "heslo"
                if($password == $userPassword) {
                    //Úspěšně přihlášen
                } else {
                    exit("Špatně zadané heslo.");
                }
            } else {
                exit("Uživatel s tímto jménem neexistuje.");
            }
        } else {
            exit("Chyba při execute.");
        }
    }
}
?>

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>Prihlásenie</title>
</head>
<body>
	<form action="#" method="post" style="padding-top: 10px;">
		<center>
			<h2>Prihlásenie</h2>

			Nickname:<br>
			<input type="text" name="nickname" required><br><br>

			Heslo:<br>
			<input type="password" name="heslo" required><br><br>

			<button type="submit" name="prihlasit">Prihlásiť sa</button><br><br>
		</center>
	</form>
	<center><a href="#" target="_blank">Zabudli ste prihlasovacie údaje?</a><br><br></center>
</body>
</html>
Pawn, SourcePawn, Web development, MySQL, Lua, ...

YouTube: https://www.youtube.com/c/Javierko21
Twitch: https://twitch.tv/javierko

Projects:
https://steamid.cz
https://hexmania.eu/

Odpovědět