Autor Zpráva
chvostik
Profil
Zdravim, mam problem, že když vytvořím cookie pri registraci a jako nick použiju neco, kde se bude vyskytovat tečka nebo nejaky jiný podobny znak, tak v ověřovací funcki mi to vrátí, že ten cookie neexistuje i když ho v prohlížeči vidím. Prostě nedokaže to ty znaky uložit správně nebo nevím. Název cookie se v možnostech prohlížeče zobrazuje správně, jeho obsah už ne. Dá se to nejak vyřešit?

//Registrace
    $cookie = "Registrace_".$post_nick;
    $day = 86400 + time(); 
    setcookie($cookie, $post_nick,$day); 

//Overeni
$cookie="Registrace_".$username;
if(isset($_COOKIE[$cookie])) { }
Tori
Profil
Tohle jste četl? Nejčastější potíže s PHP (FAQ) » Rozdíl ve viditelnosti cookies při vytvoření javascriptem a PHP
edit: Jinak nejjednodušší řešení je nepoužívat nick, ale ID.
chvostik
Profil
ale ten overovaci skript mam v jiné php strance, nevolájí se hned po sobě, tím to není
chvostik
Profil
jo pravda kdyz pouziju id tak by nemel byt problem, dík


tak zas to nefunguje, a tentokrat uz to nedela ani špatnej znak ..uplne stejnej skript na cookie na jiné strance funguje, ale tady proste ne ..uz nevim co delat, musi tam bejt nejaka uplne blba chyba kterou ale nevidim

//Registrace.php
mysql_query ('INSERT INTO prihlaseni (username, password, potvrzeno, email, pohlavi, zeme, datum_registrace) VALUES (\''.$post_nick.'\', \''.$hash.'\', \'ne\', \''.$post_email.'\', \''.$_POST["pohlavi"].'\', \''.$_POST["zeme"].'\',\''.date("d.m. Y").'\')');
    
    $sql_vse="select id from prihlaseni ORDER BY id DESC LIMIT 0,1";
    $res = mysql_query($sql_vse) or die ("Chyba! Nelze načíst data.");
    while ($zaznam = mysql_fetch_array($res)):
    $userid=$zaznam["id"];
    endwhile; 
        
    $cookie3 = "Registrace_".$userid;
    $day = 86400 + time(); 
    setcookie($cookie3, $userid,$day); 

//PotvrzeniRegistrace.php
    $cookie3="Registrace_".$iduzivatel;
    if(isset($_COOKIE[$cookie3])) { 
    mysql_query ("UPDATE prihlaseni SET potvrzeno='ano' WHERE id=$iduzivatel") or die (mysql_error()."  Chyba! Nelze načíst data.");
    echo "Vaše registrace byla potvrzena. Nyní se můžete přihlásit."; 
   }
   elseif($potvrzeno=="ne")
   {
   echo "Čas pro potvrzení registrace vypršel, registrujte se prosím znovu děkujeme."; 
   mysql_query ("DELETE from prihlaseni WHERE id=$iduzivatel") or die (mysql_error()."  Chyba! Nelze načíst data.");
   }
Tori
Profil
Co přířazujete v PotvrzeniRegistrace.php do $iduzivatel? Jsou oba tyto skripty ve stejném adresáři? (pokud ne, nastavte správně doménu a cestu u cookie, resp. mělo by to být definované pro jistotu i tak.) Když si v potvrzení registrace vypíšete obsah pole $_COOKIE, vidíte část dat, chybná data nebo žádná data?

(Kromě toho pár nevyžádaných rad: ;-)
- pro zjištění ID posledního vloženého záznamu slouží mysql_insert_id, váš způsob není atomický (= při několika registracích ve stejný okamžik může dojít k chybě, kdy najdete nesprávné ID)
- když v SQL dotazu použijete LIMIT 1 anebo víte, že má vrátit max. jeden řádek, není potřeba číst data cyklem, stačí mysql_fetch_*
- escapujte data vkládaná do DB
- pro ukládání datumu do DB je vhodnější použít datový typ DATE nebo DATETIME, jak zjistíte při prvním pokusu najít nejnovější datum.
)
chvostik
Profil
    $text_zpravy = "http://www.web.cz/index.php?id=12&iduzivatel=".$userid."";  
    $iduzivatel=mysql_real_escape_string(htmlspecialchars($_GET["iduzivatel"], ENT_QUOTES));   

ano oba skripty jsou ve stejném adresáři a při echo $_COOKIE[$cookie3]; to nevypíše nic (diky za připomínky opravím :-))
okolojsoucí
Profil
chvostik:
Po novém vydání PHPčka Vám MySQL() přestane fungovat. Přejděte na MySQLi nebo PDO, případně na nějaký databázový layout např. dibi - http://dibiphp.com/
chvostik
Profil
to datum jsem původně měl přes datovy typ date, ale nezjistil jsem jak ho upravit, aby byl ve tvaru jaký chci já tak jsem to začal vkladat jako text přes php funkci date kde si to můžu zvolit
scheras
Profil *
Formát data si musíte upravit na straně aplikace, do databáze to v jiném formátu prostě nenarvete.
Tori
Profil
chvostik:
datum jsem původně měl přes datovy typ date, ale nezjistil jsem jak ho upravit, aby byl ve tvaru jaký chci
V selectu: funkce DATE_FORMAT, nebo na straně php: strtotime + date.

Místo mysql_escape + htmlspecchars (to vám zbylo z předchozí cookie s nickem, že?) bych použila přetypování na číslo: $id = (int) $_GET['iduzivatel'];, ale v tom příčina není. Nevím, vypadá to jako nelogická chyba, tj. že buď je chyba jinde než očekáváte (např. proměnná je správně definovaná uvnitř funkce a pak ji chcete použít mimo fci), nebo je to nějaká blbost, překlep ("iduzivatele" místo "iduzivatel", nebo se hodnota proměnné někde něčím přepíše apod.). Asi bych si dala na začátek skriptu var_dump($_COOKIE) a pak vypisovala echem každou důležitou proměnnou ($iduzivatel, $cookie3, ...) před tím, než je použita v nějaké podmínce. Vypadá to zdlouhavě, ale ve výsledku to je možná nejrychlejší postup v tomhle stadiu - když člověk čte podesáté vlastní text / kód, tak už chyby prostě nevidí, to je normální.
chvostik
Profil
tak uz jsem na to prisel :-) bylo to ve špatně nastavený doméně u cookies (odkaz byl na www.web.cz ale cookie vznikala na web.cz) když jsem nastavil domenu v cookies na web.cz tak uz to krasne funguje :o) diky za pomoc

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:

0