Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno PHP - cookie a barva pozadí stránky - jak to udělat

Ahoj, jak jste si možná už někteří všimli, na mých webovkách ( www.mrk.borec.cz ) přibyla možnost registrace a celé jsou ve formátu php, takže už není problém doprogramovávat. V uživatelském rozhraní, které je bohužel uvolněno jen pro registrované, je možnost downloadu a seznamu členů. Rád bych tam přidal možnost změny barvy pozadí a barvy toho barevného přechodu (to by bylo asi jenom 20 možností). Narazil jsem ale na problém. Jak to udělat, aby se to uložilo do cookie a potom se to znova vyvolalo. Už to mám nějak načrtnuto:

1.soubor=(asi)funguje :-)

<form action="test.php" method="post">
<input name="pozadi" type="text" value="#">
<input type="submit" value="odešli">
</form>

2.soubor=možná funkční :-)

<?
setcookie ("cookie", "echo $pozadi;");
$bl="test_vysledek.php";
header("location: $bl"); // přesměrování na výsledek
?>

3.soubor=nefunkční 3-[3-[

<?
$zkouska = $_COOKIE['cookie'];
?>
 
<HTML>
<HEAD>
    <META HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=windows-1250">
    <TITLE>Bez titulku</TITLE>
</HEAD>
<BODY bgcolor="<? echo $zkouska; ?>">

</BODY>
</HTML>


Nevíte co s tím?

Předmět Autor Datum
Ahoj. Ukládat uživatelské nastavení do cookies není dobré, protože: - Uživatel použivající více po…
Flash_Gordon 14.01.2008 19:37
Flash_Gordon
Databázi MySQL už mám zabranou pro registraci uživatelů. Ty stránky nejsou pro blbce ale pro trošku…
marekdrtic 14.01.2008 19:40
marekdrtic
Potom by rozumější bylo přidat do databáze další "sloupeček" a ten by byl jeho navolená barva pozadí…
Flash_Gordon 14.01.2008 19:43
Flash_Gordon
:-[ oh :-D To mě nenapadlo
marekdrtic 14.01.2008 19:44
marekdrtic
Ale přece jen, s tou databází to bude složitější, radši cookies
marekdrtic 14.01.2008 19:49
marekdrtic
Ty stránky nejsou pro blbce ale pro trošku pokročilejší Co tím chtěl autor říci:?:
Doly 15.01.2008 15:28
Doly
- Uživatel použivající více počítačů bude zmaten - Vymazaním cookies (z jakéhokoliv důvodu) přijde o…
marekdrtic 15.01.2008 16:12
marekdrtic
Trošku pokročilejší uživatel musí vědět, že při přechodu na jiný PC tam nebudou nastavení a při smaz…
Bimbo 15.01.2008 17:04
Bimbo
Proč to teda nefunguje?
marekdrtic 14.01.2008 19:59
marekdrtic
Prečítaj si dokumentáciu k funkcii setcookie - všetko, čo potrebuješ, je tam podrobne vysvetlené. D…
los 14.01.2008 19:59
los
Díky propracovanému ukládání hesel pomocí kontrolního součtu MD5 a složitých vstupních hesel do MYSQ…
MaSo 15.01.2008 15:33
MaSo
to je oblbovačka ;-), jinak z Wikipedie
marekdrtic 15.01.2008 16:13
marekdrtic
Nechápu, co to má za smysl. Píšeš, že žádná UnMD5 fce není, ale je. Každá šifra se dá zlomit, to je…
MaSo 15.01.2008 16:14
MaSo
Jinak nevíš, jak to udělat? $zkouska = $_COOKIE['cookie']; <BODY bgcolor="<? echo $zkouska; ?>">…
marekdrtic 15.01.2008 16:16
marekdrtic
To nevím, v PHP se nevyznám...:-)
MaSo 15.01.2008 16:19
MaSo
Neví nikdo jiný? :-)
marekdrtic 15.01.2008 16:22
marekdrtic
Ak je cookie dobre nastavený, tak ten kód by mal fungovať. - S akými parametrami voláš funkciu setco…
los 15.01.2008 18:58
los
Já bych to také dával do dalšího sloupečku v tabulce uživatelů/registrovaných v databázi. Prostě by…
Kráťa 15.01.2008 17:30
Kráťa
Taky bych to tak udělal...;-)
MaSo 15.01.2008 17:34
MaSo
Jenže to přihlašování ještě nemám domakaný. Po přechodu na jinou stránku přihlášení zmizí.
marekdrtic 15.01.2008 19:18
marekdrtic
:-D:-DUž to je domakaný zapomněl jsem u některých dokumentů nastartovat session "kouzelným" příkazem…
marekdrtic 15.01.2008 19:26
marekdrtic
Já ti to sem chtěl zrovna pastnout sessions.php a už vlastně zbytečně.
Kráťa 15.01.2008 19:32
Kráťa
I tak díky. Jinak Kráťo, nemýlil jsem se, když jsem o Tobě řekl, že si webmaster. :-):beer::beer::be…
marekdrtic 15.01.2008 19:36
marekdrtic
Já jsem spíše webučeň. Tady na poradně by se našlo lidu, ke kterým chodím na rozumy, to bys koukal.
Kráťa 15.01.2008 19:40
Kráťa
Já jsem spíše webučeň. To já tak trošku taky :-)
marekdrtic 15.01.2008 19:48
marekdrtic
Miluji slovní hříčky. Jelikož mé křesní jméno končí na -slav budu webSLAVEk :-)
Kráťa 15.01.2008 20:05
Kráťa
první problém: V databázi je v sloupečku "bgcolor" vepsáno jako "blue" <? $bgcolor=$_SESSION['bgcol…
marekdrtic 15.01.2008 19:47
marekdrtic
blbě je Golden, správně je PSPad. :-) Tam nemusí být echo? <BODY bgcolor=" <?php echo $bgcolor ?> ">…
Kráťa 15.01.2008 19:55
Kráťa
Já psal také jen <? a pak mi něco někde nechodilo, přitom jinde ano a co mi to dalo práce, než jsem…
Kráťa 15.01.2008 20:09
Kráťa
Se na to kouknu zítra. Nejdříve udělám přidání dat do databáze a až mi bude tohle chodit, tak už bud…
marekdrtic 15.01.2008 20:29
marekdrtic
Hurá jsem se něco zase přiučil :-) Potřebujete nějakou změnu v tabulce a nevíte jak to naprogramovat…
marekdrtic 16.01.2008 15:32
marekdrtic
Takže poslední problém před zdárným koncem: <?php session_start(); // startujeme session. ?> <? $ba…
marekdrtic 16.01.2008 16:14
marekdrtic
Tak to si ji asi budes muset vytáhnout selectem, ne? Třeba: SELECT barva FROM uzivatele WHERE uziva…
MaSo 16.01.2008 16:19
MaSo
session_start(); // startujeme session. require "db.php"; // pripojime se k databazi $jmeno=trim($_S…
marekdrtic 16.01.2008 16:48
marekdrtic
Nevím teda vůbec, jak fungují SESSIONs v PHP, ale jsi si jistý, že se to tahá s databáze? To se mi n…
MaSo 16.01.2008 17:01
MaSo
Tahá tahá. Jak by potom mohlo fungovat toto ::) viz 3. řádek. Tohle funguje <? $barva=trim($_POST['…
marekdrtic 16.01.2008 17:03
marekdrtic
No jistě, že to funuje, když tam používáš SQL příkaz UPDATE, až ten komunikuje s databází!!! Než něc…
MaSo 16.01.2008 17:10
MaSo
Po otevření zdrojového kódu to vyplivne toto: <BODY bgcolor=" Resource id #5 " > ::)::)::) Edit: Al…
marekdrtic 16.01.2008 17:22
marekdrtic
No, a co vlastně v té databázi ve sloupečku bgcolor u uživatele, kterého reprezentuje proměnná $jmen…
MaSo 16.01.2008 17:26
MaSo
[http://img260.imageshack.us/img260/1386/obrazekks0. jpg]
marekdrtic 16.01.2008 17:36
marekdrtic
Přepni se v tom PHPmyAdminu na kartu SQL a zkus tam zadat toto: SELECT `bgcolor` FROM `uzivatele` W…
MaSo 16.01.2008 17:44
MaSo
ano, vypsalo
marekdrtic 16.01.2008 17:46
marekdrtic
No vídíš, takže toto session_start(); // startujeme session. require "db.php"; // pripojime se k da…
MaSo 16.01.2008 17:50
MaSo
:i: Oh, měl bych vyměnit cedník za normální hlavu :-D. Nechybí mi tam náhodou MySQL_Fetch_Array? Ten…
marekdrtic 16.01.2008 18:03
marekdrtic
Zkus to takhle: $result = mysql_query("SELECT `bgcolor` FROM `uzivatele` WHERE `jmeno` = '$jmeno'")…
MaSo 16.01.2008 18:15
MaSo
Juhůůůůůů P.S. Až to trošku víc rozjedu, budeš mým pomocným adminem. OK?
marekdrtic 16.01.2008 18:23
marekdrtic
Jo a mám ještě dotaz Funguje mi to, ale jak to mám přesně napsat do <BODY bgcolor=" sem ">, aby s tí…
marekdrtic 16.01.2008 18:26
marekdrtic
Děkuji všem hlavně pak MaSovi, který mi velmi pomohl až do zdárného cíle. Po registraci na Vás čeká…
marekdrtic 16.01.2008 20:15
marekdrtic
Ok, jdu se pokusit ti to hacknout...:-D
MaSo 16.01.2008 20:18
MaSo
Tohle je ten Easter Egg? :-D Parse error: parse error in /3w/borec.cz/m/mrk/reg_zpracuj.php on line…
MaSo 16.01.2008 20:22
MaSo
nn už je to good já jsem měnil všude index_soubory/pozadi.jpg za ten kód a ze seznamu jsem zapoměl v…
marekdrtic 17.01.2008 07:11
marekdrtic
Tak jsem ti to hacknul, teďka každý kdo se přihlásí a pak klikne na stránku s výhodami, bude muset o… poslední
MaSo 17.01.2008 20:21
MaSo

Ahoj.

Ukládat uživatelské nastavení do cookies není dobré, protože:

- Uživatel použivající více počítačů bude zmaten
- Vymazaním cookies (z jakéhokoliv důvodu) přijde o všechna nastavení.

Proto je toto řešeno (např. tady na poradně) zápisem do databáze na straně serveru.

Ale když to máš takto vymyšlené, tak to tak můžeš udělat.
Získáš další zkušenosti.

Trošku pokročilejší uživatel musí vědět, že při přechodu na jiný PC tam nebudou nastavení a při smazání cookies taktéž

Pokud uživatele upozorníš, že uživatelské nastavení je ukládáno do cookies na straně klienta. Protože ani sebezkušenější uživatel neví, že si toto ukládáš do cookies. Navíc zkušený uživatel ti radí, abys to uložil do sloupečku v databázi. Nezkušený uživatel ani neví, co to cookies jsou.

Prečítaj si dokumentáciu k funkcii setcookie - všetko, čo potrebuješ, je tam podrobne vysvetlené.

Druhý parameter je hodnota cookie, takže echo tam nemá čo hľadať. Okrem toho, hodnota by mala byť v $_POST["pozadi"], alebo chceš mať ružové pozadie ako kedysi na Živě?

Ďalej budeš musieť nastavovať aj čas vypršania cookie (t.j. tretí parameter), pretože inak vyprší jeho platnosť hneď po zatvorení prehliadača.

A nakoniec budeš možno chcieť nastaviť aj štvrtý parameter, aby cookie platil aj pre nadradené adresáre - ale to už záleží od štruktúry tvojho webu.

Díky propracovanému ukládání hesel pomocí kontrolního součtu MD5 a složitých vstupních hesel do MYSQL by nemělo dojít ke zneužití osobních údajů, ale i kdyby se někdo hacknul do MYSQL, tak je např. krátké heslo "pes" šifrováno do tvaru 9e107d9d372bb6826bd81d3542a419d6. Žádná funkce UnMD5 NEEXISTUJE, takže v případě ztráty hesla ho nemůžu získat zpět, leda bych Vám účet smazal a vy byste si zařídili nový

LOL!

Tak schválně, zašifruj nějaké třeba i čtyř znakové slovo do MD5, pak ti sem napíšu, kolik sekund mi trvalo na něj přijít...

Já bych to také dával do dalšího sloupečku v tabulce uživatelů/registrovaných v databázi. Prostě by tam měl jen údaj např "blue" (sloupeček s názvem pozadi) a načetlo by se mu po přihlášení "blue".
Nějaké sušenky jsou na tohle myslím nevhodné. Co bys do toho nastavil, aby měl blue i registrovaný, co si to nastaví a vrátí se za půl roku? Platnost rok? Když to bude v databázi, může přijít kdykoli a odkudkoli, přihlásí se a má "blue".
Do sušenky možná přihlašovací údaje, aby se s tím nemusel vypisovat.
Přidat sloupeček do tabulky a udělat ukládání nastavení pozadí by nemělo být o moc více práce jako to, s čím se "pereš".

Takže poslední problém před zdárným koncem:

<?php
session_start(); // startujeme session.
?>

<?
$barva=$_SESSION['bgcolor']
?>

<BODY bgcolor="<?php $barva ?>">

Tag BODY prosím neberte jako součást kódu ohraničenou <?php ?>
Rád bych, aby se z databáze nahrála barva(např. BLUE) a ta se uložila <BODY bgcolor="sem">. Jak to prosím Vás udělat? Budu vděčný za jakoukoliv pomoc.

Tak to si ji asi budes muset vytáhnout selectem, ne? Třeba:

SELECT barva FROM uzivatele WHERE uzivatele.id_uzivatele = id_prihlaseneho_uzivatele

MySQL SELECTy neumím, takže budeš muset změnit ten syntax...

No jistě, že to funuje, když tam používáš SQL příkaz UPDATE, až ten komunikuje s databází!!! Než něco programuješ, nastuduj alespoň základní věci!

Pro vypsání z databáze, by mohlo fungovat toto:

echo mysql_query("SELECT `bgcolor` FROM `uzivatele` WHERE `jmeno` = '$jmeno'");

Nebo se to možná musí takto:

$barvazdat = mysql_query("SELECT `bgcolor` FROM `uzivatele` WHERE `jmeno` = '$jmeno'");
echo $barvazdat;

Přepni se v tom PHPmyAdminu na kartu SQL a zkus tam zadat toto:

SELECT `bgcolor` FROM `uzivatele` WHERE `jmeno` = 'sem napiš jmeno, na tom druhém řádku tabulky, co jsi začernil'

Mělo by to vypsat "D0D0D0".

No vídíš, takže toto

session_start(); // startujeme session. 

require "db.php";     // pripojime se k databazi

$jmeno=trim($_SESSION['login']);
$barvapozadi = mysql_query("SELECT `bgcolor` FROM `uzivatele` WHERE `jmeno` = '$jmeno'");
echo ($barvapozadi);

by v PHP souboru mělo dělat to samé, pokud se přihlásí uživatel s tím jménem, co je v databázi...

Nastuduj zádklady SQL, bez toho se nehneš.

Zkus to takhle:

$result = mysql_query("SELECT `bgcolor` FROM `uzivatele` WHERE `jmeno` = '$jmeno'");

while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
        printf ("ID: %s  Barva: %s", $row["id"], $row["bgcolor"]);
    }

P.S.: Já se při tobě jestě naučím PHP...:-D

Tak jsem ti to hacknul, teďka každý kdo se přihlásí a pak klikne na stránku s výhodami, bude muset odkliknout hlášku, že to bylo hacknuto. :-D Popřemýšlej, kde si udělal chybu. Je docela nebezpečné. Věřím, že IgorK nebo MM.. by ti s tím udělali krátký proces...:-)

Zpět do poradny Odpovědět na původní otázku Nahoru