Autor | Zpráva | ||
---|---|---|---|
janky Profil |
#1 · Zasláno: 15. 1. 2016, 18:10:59
Ahoj, potřeboval bych poradit jak nastavit $_POST při první návštěvě webu www.sisacze.4fan.cz . Jde o styly .css které se můžou změnit, ale když příjdu na web poprvé styly nejsou nastaveny. Z $_POST['barvaWebu'] to pak uložím do $_SESSION['barvaWebu'] a pak už to funguje. Když jsem nastavil hodnotu $_SESSION['barvaWebu'] na začátku dokumentu tak při první návštěvě to bylo OK. Ale když sem změnil na červenou barvu tak se změnila jen první stránka. Při kliknutí na jinou část webu se změnila barva na to co bylo nastavene na začátku dokumentu.
index.php <?php session_start(); ?> <html> <head> <title>Testovací web</title> <?php if(isset($_POST['barvaWebu'])) { $_SESSION['barvaWebu'] = $_POST['barvaWebu']; } ?> <link rel="stylesheet" type="text/css" href="css/<?php echo $_SESSION['barvaWebu'] ;?>.css"> </head> formulář <div id="hlavicka"> <div id="logo"> <a href="index.php?text=uvod"><img src="img/logo.png"></a> </div> <div id="nadpisy"> <h1>Zde si budu zkoušet tvořit web a webové aplikace...</h1> </div> </div> <div id="pruh"> <form action="" method="post"> Barva webu: <select name="barvaWebu"> <option value="modry_web">modrý</option> <option value="cerveny_web">červený</option> </select> <input type="submit" value="změnit!"> </form> </div> poradíte mi prosím jak na to ? |
||
mimochodec Profil |
#2 · Zasláno: 15. 1. 2016, 18:19:33
Nastavovat POST je špatný nápad. Co takhle?
if(isset($_POST['barvaWebu'])) { $_SESSION['barvaWebu'] = $_POST['barvaWebu']; } if(!isset($_SESSION['barvaWebu'])) { $_SESSION['barvaWebu'] = "nejakabarva"; } |
||
janky Profil |
#3 · Zasláno: 15. 1. 2016, 21:53:44
Ano, takhle to funguje, díky :-) Když není nastavený $_SESSION[´barvaWebu´] tak tam ulož třeba 'modry_web' (jako defaultní). A jak bude mít $_POST hodnotu tak ji ulož do session. Funguje to tak ? Abych to 100% pochopil :-)
|
||
mimochodec Profil |
#4 · Zasláno: 15. 1. 2016, 22:13:05
Je to tak. Druhá věc je, že mi session pro ten účel nepřipadá nejvhodnější. Spíš bych použil cookie: php.net/manual/en/function.setcookie.php
|
||
anonymníí Profil * |
#5 · Zasláno: 16. 1. 2016, 08:21:05
janky:
mimochodcův kód funguje, ale je zapsaný zbytečně rozvláčně, navíc dvěma podmínkami namísto jedné. if (isset($_POST['barvaWebu'])) { $_SESSION['barvaWebu'] = $_POST['barvaWebu']; } else { $_SESSION['barvaWebu'] = 'modra'; } Nebo je možnost použít ternární operátor, tento příklad k němu svádí - bude kratší a asi i přehlednější. $_SESSION['barvaWebu'] = isset($_POST['barvaWebu']) ? $_POST['barvaWebu'] : 'modra'; Proč ne dvě podmínky, ale jen jedna? Minimalizace chyby při překlepu, rychlost (stačí vyhodnotit jednu podmínku namísto dvou). Jasně, u tohoto typu příkladu je to jedno, když budeš mít tímto stylem psanou aplikaci, už to třeba poznáš. Kromě jiného je to mnoho psaní navíc. |
||
mimochodec Profil |
#6 · Zasláno: 16. 1. 2016, 08:49:20
anonymníí:
Ne. |
||
RastyAmateur Profil |
#7 · Zasláno: 16. 1. 2016, 11:20:48
anonymníí:
Taky jsem měl tento nápad. Přijdeš na web, změníš si barvu na červenou a klikneš na odkaz nebo aktualizuješ stránku. $_POST již není definován -> modrá. |
||
janky Profil |
#8 · Zasláno: 16. 1. 2016, 17:07:40
anonymníí:
Ten tvůj první kod mi nefunguje. Když si změním barvu na červenou změna se projeví. Jak ale přejdu na jinou část webu tak se barva opět změní na defaultní. |
||
RastyAmateur Profil |
#9 · Zasláno: 16. 1. 2016, 17:17:57
janky:
Ano, to jsem již psal. Udělej to tak, jak napsal mimochodec v [#2]. Je to asi nejlepší způsob. |
||
Časová prodleva: 9 let
|
0