Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: 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.
<?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>
-
co znamena "prestalo fungovat"?
-
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".
-
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.
-
Tak to vyklop, o internetové bankovnictví které banky se jedná? ;D
-
A neni problem treba ve skriptu zaheslovanastrana.php, ze by to udelalo redirect zpatky?
-
Ladíš problém s HTTP, ale nepřiložil jsi HTTP hlavičky. Takže nikdo netuší, co se tam děje.
-
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.
-
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.
<!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>
-
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:
<?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>
-
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.
-
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).
-
Kvůli tomu smajlíku píšu ještě jednou jen dotčenou část:
echo md5($promenna);
-
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.
<?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í.
-
Děkuji moc! Budu si raději tento script na odhalení chyb dávat všude ;D
-
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
-
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ý ;-)
-
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...