Jednoduché PHP heslo přestalo fungovat

Karel2005

Jednoduché PHP heslo přestalo fungovat
« kdy: 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>
« Poslední změna: 24. 09. 2014, 09:19:17 od Petr Krčmář »


3ugeene

Re:Jednoduché PHP heslo přestalo fungovat
« Odpověď #1 kdy: 24. 09. 2014, 09:25:28 »
co znamena "prestalo fungovat"?

Karel2005

Re:Jednoduché PHP heslo přestalo fungovat
« Odpověď #2 kdy: 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".

nevim

Re:Jednoduché PHP heslo přestalo fungovat
« Odpověď #3 kdy: 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.

Jimm

Re:Jednoduché PHP heslo přestalo fungovat
« Odpověď #4 kdy: 24. 09. 2014, 10:48:34 »
Tak to vyklop, o internetové bankovnictví které banky se jedná?  ;D


devnull

Re:Jednoduché PHP heslo přestalo fungovat
« Odpověď #5 kdy: 24. 09. 2014, 11:01:07 »
A neni problem treba ve skriptu zaheslovanastrana.php, ze by to udelalo redirect zpatky?

Jenda

Re:Jednoduché PHP heslo přestalo fungovat
« Odpověď #6 kdy: 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.

renergy

Re:Jednoduché PHP heslo přestalo fungovat
« Odpověď #7 kdy: 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.

Karel2005

Re:Jednoduché PHP heslo přestalo fungovat
« Odpověď #8 kdy: 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>

renergy

Re:Jednoduché PHP heslo přestalo fungovat
« Odpověď #9 kdy: 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>

Karel2005

Re:Jednoduché PHP heslo přestalo fungovat
« Odpověď #10 kdy: 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.

Pavouk106

  • *****
  • 2 398
    • Zobrazit profil
    • Můj blog
    • E-mail
Re:Jednoduché PHP heslo přestalo fungovat
« Odpověď #11 kdy: 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).

Pavouk106

  • *****
  • 2 398
    • Zobrazit profil
    • Můj blog
    • E-mail
Re:Jednoduché PHP heslo přestalo fungovat
« Odpověď #12 kdy: 25. 09. 2014, 09:38:58 »
Kvůli tomu smajlíku píšu ještě jednou jen dotčenou část:
echo md5($promenna);

tdvorak

Re:Jednoduché PHP heslo přestalo fungovat
« Odpověď #13 kdy: 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í.

Karel2005

Re:Jednoduché PHP heslo přestalo fungovat
« Odpověď #14 kdy: 25. 09. 2014, 11:45:26 »
Děkuji moc! Budu si raději tento script na odhalení chyb dávat všude  ;D