Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: Karel2005 24. 09. 2014, 09:02:47

Název: Jednoduché PHP heslo přestalo fungovat
Přispěvatel: Karel2005 24. 09. 2014, 09:02:47
prosím, používám toto jednoduché zaheslování na další stranu a dnes mi přestalo z ničeho nic fungovat.

Kód: [Vybrat]
<?php
if($_POST["heslo"]=="trener")
{
session_start();
$_SESSION["user_register"] = "ANO";
header("location: zaheslovanastrana.php");
}
else
{
if (isset(
$_POST["heslo"]))
echo 
"Přihlášení se nepodařilo" ;
}
?>

 
<FORM ACTION="index.php" METHOD="post">
<div style="text-align: center">
<div style="text-align: center; width: 700px; margin: 30% auto">zadej heslo:
<INPUT TYPE="password" NAME="heslo" value="">
<INPUT TYPE="submit" NAME="odeslat" VALUE="GO!">
</form>

</div>
</div>
Název: Re:Jednoduché PHP heslo přestalo fungovat
Přispěvatel: 3ugeene 24. 09. 2014, 09:25:28
co znamena "prestalo fungovat"?
Název: Re:Jednoduché PHP heslo přestalo fungovat
Přispěvatel: Karel2005 24. 09. 2014, 09:56:58
Po vložení správného hesla mě to nepřesměruje na danou stránku a zůstává stále na stránce s formulářem.
Při vložení špatného hesla normálně zahlásí "Přihlášení se nepodařilo".
Název: Re:Jednoduché PHP heslo přestalo fungovat
Přispěvatel: nevim 24. 09. 2014, 10:07:39
Vas problem to neresi, ale za header(....); vzdy exit;

jinak je to mozna bezpecnosti dira.

K Vasemu problemu ...
a) spatny POST
2) spatny cookies

podivejte se co mate v tech promenych.
Název: Re:Jednoduché PHP heslo přestalo fungovat
Přispěvatel: Jimm 24. 09. 2014, 10:48:34
Tak to vyklop, o internetové bankovnictví které banky se jedná?  ;D
Název: Re:Jednoduché PHP heslo přestalo fungovat
Přispěvatel: devnull 24. 09. 2014, 11:01:07
A neni problem treba ve skriptu zaheslovanastrana.php, ze by to udelalo redirect zpatky?
Název: Re:Jednoduché PHP heslo přestalo fungovat
Přispěvatel: Jenda 24. 09. 2014, 11:24:50
Ladíš problém s HTTP, ale nepřiložil jsi HTTP hlavičky. Takže nikdo netuší, co se tam děje.
Název: Re:Jednoduché PHP heslo přestalo fungovat
Přispěvatel: renergy 24. 09. 2014, 15:08:10
S Tvým problémem to asi nesouvisí, ale </form> by měl být až na konci, jak je to teď se ti překrývají tagy. plus za header(...) přidat exit.
Jinak možná zkusit vyčistit cache prohlížeče a restartovat ho.
Název: Re:Jednoduché PHP heslo přestalo fungovat
Přispěvatel: Karel2005 24. 09. 2014, 19:40:41
Děkuji moc všem za snahu mi pomoct.Kód asi není uplně nejlepší ale učím se :)
Zkusil jsme vyčistit kešku, ale nepomohlo to. Taky je celý kód.

Kód: [Vybrat]
<!doctype html>
<html lang="cs">
<head>
<meta charset="utf-8" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>

<body>

<?php
if($_POST["heslo"]=="trener")
{
session_start();
$_SESSION["user_register"] = "ANO";
header("location: zaheslovanastrana.php");

}

else
{
if (isset(
$_POST["heslo"]))
echo 
"Přihlášení se nepodařilo" ;
}
?>

 
<FORM ACTION="index.php" METHOD="post">
<div style="text-align: center">
<div style="text-align: center; width: 700px; margin: 30% auto">zadej heslo:
<INPUT TYPE="password" NAME="heslo" value="">
<INPUT TYPE="submit" NAME="odeslat" VALUE="GO!">
</div>
</div>

</form>

</body>
</html>
Název: Re:Jednoduché PHP heslo přestalo fungovat
Přispěvatel: renergy 24. 09. 2014, 21:02:41
Tohle že někdy fungovalo? Vždyť Ti to musí psát "headers already sent by"...

Ten http header je potřeba nastavit před jakýmkoli výstupem, pod což v Tvém případě spadá vše počínaje <!doctype html> až po <body>

zkrátka oprava vypadá nějak takhle:

Kód: [Vybrat]
<?php
if($_POST["heslo"]=="trener")
{
        
session_start();
        
$_SESSION["user_register"] = "ANO";
        
header("location: zaheslovanastrana.php");
        exit;
}
?>

<!doctype html>
<html lang="cs">
<head>
<meta charset="utf-8" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>

<body>

<?php
if (isset($_POST["heslo"]))
{
echo 
"Přihlášení se nepodařilo" ;
}
?>


<form action="index.php" method="post">
<div style="text-align: center; width: 700px; margin: 30% auto">zadej heslo:
<input type="password" name="heslo" value="">
<input type="submit" name="odeslat" value="GO!">
</div>
</form>

</body>
</html>
Název: Re:Jednoduché PHP heslo přestalo fungovat
Přispěvatel: Karel2005 25. 09. 2014, 08:30:26
Děkuji mockrát, nyní to už funguje. Ještě se omlouvám za takový špatný kód. Jsem samouk a php se učím chvilku.
Název: Re:Jednoduché PHP heslo přestalo fungovat
Přispěvatel: Pavouk106 25. 09. 2014, 09:37:46
Jen dodatek (a divím se, že ještě nezazněl) -> Když porovnáváš heslo, v kódu bys neměl nikdy mít přímo vepsaný heslo. Udělej nějakej kontrolní součet (třeba MD5) toho hesla (trener) a porovnávej k němu.

Pokud mi ještě paměť slouží, vypadalo by to takhle:

if (md5($_POST["heslo"])=="f7ed5efb47e05188fa795865d64c7954") {
 ....
}

Ten MD5 součet lze zjistit buď v systému (pokud jedeš na Linuxu, tak příkazem md5sum), v programu (na Windows možná Total Commander?), online (do google zadáš: md5 online) nebo si můžeš napsat vlastní PHP skript, kde do políčka formuláře zadáš text a po odeslání Ti to vypíše hotovej součet (např.: echo md5($promenna);).

A ještě další věc: Než začneš v kódu používat proměnný z $_POST, měl by sis ověřit, jestli vůbec nějakej $_POST přišel a jestli v něm ta Tvoje proměnná je. Teoreticky: Kdy nezadáš heslo a pošleš formulář bez něj, mělo by Ti to psát PHP chyby ohledně $_POST.

Chápu, že možná zatím nemáš páru, o čem je tu teď řeč, ale je dobrý to i tak vědět (až na to přijde čas, pochopíš o čem tu píšu/píšeme).
Název: Re:Jednoduché PHP heslo přestalo fungovat
Přispěvatel: Pavouk106 25. 09. 2014, 09:38:58
Kvůli tomu smajlíku píšu ještě jednou jen dotčenou část:
echo md5($promenna);
Název: Re:Jednoduché PHP heslo přestalo fungovat
Přispěvatel: tdvorak 25. 09. 2014, 10:40:44
Jen dodám, že na důvod takové chyby se snadno přijde, pokud se dá PHP možnost vypsat chybové hlášení. Když něco nefunguje podle očekávání, můžeš na začátek scriptu vepsat.

Kód: [Vybrat]
<?php
error_reporting
(E_ALL);
ini_set("display_errors"1);
?>

Výpis chyb máš asi teď defaultně vypnutý, jinak bys viděl právě to zmiňované "headers already sent..." hlášení.
Název: Re:Jednoduché PHP heslo přestalo fungovat
Přispěvatel: Karel2005 25. 09. 2014, 11:45:26
Děkuji moc! Budu si raději tento script na odhalení chyb dávat všude  ;D
Název: Re:Jednoduché PHP heslo přestalo fungovat
Přispěvatel: Karel2005 25. 09. 2014, 11:47:58
Pavouku - děkuji mockrát za radu. Zkusím si to najít a pochopit v knížce kterou jsem dostal od rodičů. Je to knížka PHP od pana Vrány!
Děkuji moc moc moc
Název: Re:Jednoduché PHP heslo přestalo fungovat
Přispěvatel: Pavouk106 25. 09. 2014, 11:59:00
Já osobně mám v Apache serveru (v php.ini) nastavený errory tak, aby mi to říkalo skoro vše (vlastně to, co Ty budeš přidávat v každym skriptu). Je to dobrý, protože není nic horšího, než si pak svý stránky hodit na hosting a sledovat jednu chybu za druhou (protože hosting má zobrazení errorů nastavený jinak než Ty). Už jen odstraňováním jednotlivých chyb se dá spousta naučit, hlavně co se nějakýho řádu a fungování týče.

Hodně štěstí, je vidět, že pro to máš zápal a to je dobrý ;-)
Název: Re:Jednoduché PHP heslo přestalo fungovat
Přispěvatel: tdvorak 25. 09. 2014, 12:03:06
Děkuji moc! Budu si raději tento script na odhalení chyb dávat všude  ;D
To není dobrý řešení. Raději to použij pro odladění a pak hned odstraň. Na produkčním prostředí by systém neměl vypisovat detaily chyb, protože to může vyzradit citlivý informace - konfigurační hodnoty, hesla, SQL dotazy, obsah scriptu...