Stránka 1 z 2

PHP Problém

Napsal: 18 říj 2019 00:39
od RayCodeCSC
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!";
						}

					}
				?>

Re: PHP Problém

Napsal: 18 říj 2019 18:31
od Escanor
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

Re: PHP Problém

Napsal: 18 říj 2019 19:33
od RayCodeCSC
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...

Re: PHP Problém

Napsal: 18 říj 2019 21:02
od Escanor

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.

Re: PHP Problém

Napsal: 18 říj 2019 21:45
od RayCodeCSC
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?

Re: PHP Problém

Napsal: 18 říj 2019 23:39
od Escanor
Až php a mysql. Nechápem čo je to za otázku

Re: PHP Problém

Napsal: 20 říj 2019 00:50
od Javierko
Zde jsou veškeré požadavky pro WP.

Re: PHP Problém

Napsal: 20 říj 2019 17:50
od RayCodeCSC
Ľ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...

Re: PHP Problém

Napsal: 20 říj 2019 19:51
od Escanor
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.

Re: PHP Problém

Napsal: 20 říj 2019 21:49
od Javierko
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>