Chtěl jsem udělat inteligentní formulář s předvyplněným jménem a emailem.Na jakymkoli jinym servru mi to funguje jen na wz ne, takže chyba zřejmě neni na mé straně.Pokud s tim někdo dokážete poradit, tak bych byl vděčen.
EHM, co kdyz nekdo bude mit cookies vypnute? Co pak? Spis to zkus pomoci PHP...
To mě taky napadlo.To myslíš jako ukládat to do databáze?
Ale stejnak by mě zajímalo proč to nefunguje jen tady.
Pokud ten formular bude predvyplnenej na zaklade prihlasovani jmeno/heslo, tak treba z databaze nebo ja pro to predvyplneny jmeno pouzivam SESSION.
Cookies pouzivam minimalne, ale funguji mi tu vsude. Kdyztak pockej, jestli ti na to neco nenapise admin mira.
Scar
Ne mám to jenom na jméno a na email, takže SESSION by mělo stačit.
Jenom poslední otázečka, jak se to používá?Mohl bys mi prosím napsat stručně nějakej příklad? Dík.
Na zacatek skriptu, popr. html dokumentu umistis
session_start(); //spusti pouzivani session
$_SESSION["tvuj_nazev_promenne"] = $nejaka_hodnota_kterou_registrujes;
Tahle promenna v session poli je pak registrovana po celou dobu, dokud okno prohlizece nezavres nebo ji neodhlasis.
Volani hodnoty v promenne uz pak napr.:
echo $_SESSION["tvuj_nazev_promenne"];
Kdyz se pak rozhodnes tu urcitou session hodnotu nepouzivat, napises:
session_unset($_SESSION["tvuj_nazev_promenne'");
A nakonec pro zruseni pouzivani session napises:
session_destroy();
Staci? ;-)
Scar
Jo a jeste jedna vec, najdi si o tom nejakej clanek, popripade kup knihu o PHP, pokud jeste nemas. Jenom upozornuju, aby to byl navod, popripade komentar, obsahujici praci se $_SESSION polem a ne neco jinyho. Tohle pole je jaksi novejsi zpusob, prechazi se postupne na superglobalni promenne, takze pokud nekde uvidis:
session_register("barney");
jako registrovani session, bez radsi od toho.
Scar
Zjistim, doučim... Díky moc!
Pomocí session zajistíš "automatické vyplňování" jména v nějaké kratší aplikaci. Tzn. pokud s ní třeba uživatel právě pracuje a nechceš, aby musel stále donekonečna něco vyplňovat.
Porblém nastane, když budeš chtít automaticky doplnit údaje, když na tvé stránky přijde někdy znovu (např. po pár dnech, nebo mezitím už vypnul a zapnul prohlížeč). Pak už session informace nebude existovat.
V tom případě použiješ cookies, k čemuž jsou přímo určeny. Pracuje se s nimi skoro stejně, pomocí $_COOKIE (opět můžeš narazit na "starší způsob", ale raději si vyhledej tento nový).
Vyzkoušel jsem snad všechny způsoby, ale stále nic. I tyto nové způsoby, které mi navrhujete, ale stále používají stejný princip, který nefunguje.Prosím vyzkoušejte tento malý test a uvidíte jestli bude funovat:
<?
if ($set == 1):
$var[0] = $jmeno;
$var[1] = $email;
$values = Implode($var, "###");
SetCookie ("visitor", $values, $timein+31536000); //3. člen = platnost cookie; implicidně rok
endif;
?>
<!-- Creation date: 26.5.2002 -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
<title></title>
<style type="text/css">
input {border: 1px solid black; background-color: white; height: 15px; font-family: verdana; font-size: 10px; text-transform: uppercase; color: navy;}
p {font-family: verdana; font-size: 10px; text-transform: none; color: navy;}
</style>
</head>
<body>
<table border="0" cellspacing="0" cellpadding="0" width="500" height="1" align="left" valign="top" style="">
<?
if ($submit == "send"):
echo "<tr><td><p>Hodnota proměnné \$jmeno je <b>".$jmeno."</b>.<br>Hodnota proměnné \$email je <b>".$email."</b>.<br>Hodnota proměnné \$vzkaz je <b>".$vzkaz."</b>.</p></td></tr>";
else:
?>
<form name="formular" method="post">
<?
If ($visitor):
$var = Explode("###", $visitor);
else:
$var[0] = "";
$var[1] = "";
echo "<input type=\"hidden\" name=\"set\" value=\"1\">"; //pokud cookie neexistuje, hned po odeslání formuláře ji uložíme
endif;
?>
<tr><td colspan="2"><p>Vyplňte formulář a odešlete jej. <br>Poté toto okno zavřete a znova jej otevřete.</p></td></tr>
<tr><td colspan="2"> </td></tr>
<tr><td width="50"><p>Jméno: </p></td><td><p><input type="text" id="in1" name="jmeno" value="<? echo $var[0] ?>" size="30"></p></td></tr>
<tr><td><p>E-mail: </p></td><td><p><input type="text" id="in2" name="email" value="<? echo $var[1] ?>" size="30"></p></td></tr>
<tr><td><p>Vzkaz: </p></td><td><p><input type="text" id="in3" name="vzkaz" value="" size="30"></p></td></tr>
<tr><td colspan="2"> </td></tr>
<tr><td colspan="2"><input type="submit" name="submit" value="send"></td></tr>
</form>
<? endif; ?>
</table>
</body>
Mě prostě na wz nefunguje, ale na jakymkoli inym serveru ano.
Zkus úplně základní příklad. Když ti začne fungovat, můžeš ho postupně doplňovat o další věci a průběžně testovat. To je moje osvědčená metoda, když nevím, co dál.
Např.:
// prvni stranka
<?php
SetCookie ('uzivatel', $jmeno.'###'.$email, Time()+30*24*60*60); // 30 dni * 34 hodin * 60 minut * 60 sekund = 1 mesic
// ..... zbytek prvni stranky .....
?>
// druha stranka
<?php
if (IsSet($_COOKIE['uzivatel']))
{
$data = Explode('###', $_COOKIE['uzivatel']);
$jmeno = $data[0];
$email = $data[1];
}
// ..... zbytek druhe stranky .....
?>
<input type="text" name="jmeno" value="<?php if (IsSet($jmeno)) echo $jmeno; ?>">
<input type="text" name="email" value="<?php if (IsSet($email)) echo $email; ?>">
scarabeus : mel bys psat manual k php - cely den se pachtim po vypsani session! Diks ze zijes.
ps co je spatny na session_register?
Že to nový verze neberou.
To neni tak uplne pravda, protoze jestlize si u novejsi verze nastavis v php.ini register_globals = on, pujde to i tak. Casem se ale prejde na off a tak je lepsi, kdyz uz, naucit se "novejsi" zpusob.
Vypnutim registrovani globalnich promennych se docili pouzivani superglobalnich = specialnich asociativnich poli, jako je $_POST, $_GET, $_SERVER, $_COOKIES, $_FILE a mozna i jiny :-)))