| Autor | Zpráva | ||
|---|---|---|---|
| David1256 Profil |
#1 · Zasláno: 8. 12. 2010, 16:46:07
Potřeboval bych zdokonalit pomocí sessions přihlašovací formulář. Jenže když to udělám nějak takhle
<?php
session_start();
$_SESSION["jmeno"]=$_POST['jmeno'];
if (isset($_POST["jmeno"]) and isset($_POST["heslo"]))
{if (empty($_POST["jmeno"]) or empty($_POST["heslo"]))
echo "<font color=red>Nevyplnili jste potřebná pole.</font>" ;
else
{if ($jmeno == "Holy" && $heslo == "kodecek")
echo "<script>ajaxLoader('formulare.php','obsah2')</script>";
else
{
echo "<font color=red>Zadali jste nesprávné údaje.</font>";
}}} ?>napíše mi to tohle Warning: Cannot send session cache limiter - headers already sent (output started at c:\inet_srv\http\doc_root\index.php:3) in c:\inet_srv\http\doc_root\index.php on line 102 Logicky by podle té chyby měl být navázán formulář na nějakou action např.prihlasovani.php, tím by se zamezilo odeslání jakých koliv dat před <?php, jenže to když udělám tak mi to vypíše ty hodnoty do prihlasovani.php, ale já je chci vypsat normálně pod ten formulář. Pokoušel jsem se to řešit ještě tak, že pod formulářem bude includly prihlasovani.php, ale to se ukázalo taky jako nesmysl. Poradíte teda někdo, co s tím? |
||
| Keeehi Profil |
#2 · Zasláno: 8. 12. 2010, 16:47:45 · Upravil/a: Keeehi
David1256:
Jde akorát o to, aby session_start byl před jakýmkoliv výstupem. <?php session_start(); ?> Bla bla bla, nějaký kód <?php $_SESSION["jmeno"]=$_POST['jmeno']; if (isset($_POST["jmeno"]) and isset($_POST["heslo"])) … ?> |
||
| panther Profil |
#3 · Zasláno: 8. 12. 2010, 16:48:24 · Upravil/a: panther
David1256:
místo vypisování echem si naplň proměnné nebo pole s hláškami a ty si pak vypisuj kde potřebuješ, tzn. třeba pod formulářem.
|
||
| David1256 Profil |
#4 · Zasláno: 8. 12. 2010, 17:03:52 · Upravil/a: David1256
Tak jsem to upravil nějak takto. Jinak to session start je úplně na začátku před <HTML>
<?php
$_SESSION["jmeno"]=$_POST['jmeno'];
$_SESSION["heslo"]=$_POST['heslo'];
if (isset($_POST["jmeno"]) and isset($_POST["heslo"]))
{if (empty($_POST["jmeno"]) or empty($_POST["heslo"]))
echo "<font color=red>Nevyplnili jste potřebná pole.</font>" ;
else
{if ($_SESSION["jmeno"] == "Holy" && $_SESSION["heslo"] == "kodecek")
echo "<script>ajaxLoader('formulare.php','obsah2')</script>";
else
{
echo "<font color=red>Zadali jste nesprávné údaje.</font>";
}}} ?>Mám to na různých stránkách problém je, že když na tu stránku přejdu tak se to chová jako kdyby se ta hodnota neuložila. Tzn nevypíše mi to znova původní hlášku např. Zadali jste nesprávné údaje. |
||
| panther Profil |
#5 · Zasláno: 8. 12. 2010, 17:07:15
David1256:
ano, po přechodu na novou stránku už neplatí podmínka na ř. 4 - POST nezůstane isset.
Tohle je základ PHP, co se přenáší a co ne, doporučuji nastudovat. Zároveň se, chceš-li dostávat dobré rady, nauč odsazovat kód - sem si dal 14 řádek a ani v tom se nedá pořádně vyznat. |
||
| David1256 Profil |
#6 · Zasláno: 8. 12. 2010, 17:12:31
No tak jestli jsem to pochopil správně, jako že asi ne, protože to pořád nefunguje, tak to je nějak takto.
<?php
$_SESSION["jmeno"]=$_POST['jmeno'];
$_SESSION["heslo"]=$_POST['heslo'];
if (isset($_SESSION["jmeno"]) and isset($_SESSION["heslo"]))
{
if (empty($_SESSION["jmeno"]) or empty($_SESSION["heslo"]))
echo "<font color=red>Nevyplnili jste potřebná pole.</font>" ;
else
{
if ($_SESSION["jmeno"] == "Holy" && $_SESSION["heslo"] == "kodecek")
echo "<script>ajaxLoader('formulare.php','obsah2')</script>";
else
{
echo "<font color=red>Zadali jste nesprávné údaje.</font>";
}
}
} ?>Kde je tedy chyba? |
||
| panther Profil |
#7 · Zasláno: 8. 12. 2010, 17:33:12
David1256:
„Kde je tedy chyba?“ na ř. 2 a 3. Po realoadu stránky je $_POST prázdné, sessiony jsou tedy taky prázdné.
Dej si tam někam podmínky, kde budeš testovat existenci sessions. Pokud budou prázdné, naplň je, jinak je nech být. |
||
| David1256 Profil |
#8 · Zasláno: 8. 12. 2010, 17:42:05
A čím je naplním pokud jsou prázdné? Nemám čím když je post i session prázdné ne?
|
||
| panther Profil |
#9 · Zasláno: 8. 12. 2010, 17:45:10
David1256:
Když je session prázdná, vypiš formulář, po jeho odeslání se naplní skrze $_POST.
Tak, a než napíšeš další příspěvek, dej si dohromady to, co už tu padlo a zkus něco vymyslet. Všechny podstatné myšlenky byly řečeny. |
||
| David1256 Profil |
#10 · Zasláno: 8. 12. 2010, 17:52:05
Jenže tady jde o to, že by se mi mělo po reloadu vypsat to samé, jenže nevypíše, protože jsou sessiony prázdné z 2. a 3. řádku. Ale to nezachráním tím, že to znova vyplním. viz. Když je session prázdná, vypiš formulář
|
||
| panther Profil |
#11 · Zasláno: 8. 12. 2010, 17:54:53 · Upravil/a: panther
David1256:
tak znovu (a naposledy). 1. načtení stránky: prázdná session (podmínka empty($_SESSION['jmeno'])), vypiš formulář. Po odeslání se naplní daty z formuláře sessiony
2. a každé další načtení stránky: sessiony jsou už naplněné z kroku výše (jsme v else větvi podmínky výše). Žádné $_SESSION['jmeno'] = $_POST['jmeno'] tam už nebude.
Nevím, jak lépe to napsat. S malým zamyšlením by to mělo být pochopitelné. |
||
| David1256 Profil |
#12 · Zasláno: 8. 12. 2010, 20:04:18 · Upravil/a: David1256
Tak jsem si s tím tak nějak pohrál a vytvořil i živou ukázku, ale pořád tam něco nejde, jak by mělo. Doufám, že živá ukázka pomůže k vyřešení problému.
Jinak toto je script <?php
if (empty($_SESSION["jmeno"]) and empty($_SESSION["heslo"]))
{
$_SESSION["jmeno"]=$_POST['jmeno'];
$_SESSION["heslo"]=$_POST['heslo'];
include "prihlasovani.php";
}
else
{if ($_SESSION["jmeno"] == "Holy" && $_SESSION["heslo"] == "kodecek")
echo "<script>ajaxLoader('odhlasovani.php','obsah2')</script>";
else
{
echo "<font color=red>Zadali jste nesprávné údaje.</font>";
}
}
?>Jo a ještě bych se chtěl zeptat pomocí čeho vynuluju obsah sessions? |
||
|
Časová prodleva: 16 let
|
|||
0