Autor Zpráva
janky
Profil
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
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
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
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 *
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
anonymníí:
Ne.
RastyAmateur
Profil
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
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
janky:
Ano, to jsem již psal. Udělej to tak, jak napsal mimochodec v [#2]. Je to asi nejlepší způsob.

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: