Autor | Zpráva | ||
---|---|---|---|
majja01 Profil |
#1 · Zasláno: 1. 2. 2014, 14:50:51
Ahoj mám udělaný košík v session který fungeje tak jak chci ale pokud vymažu všechny uložené sessions tak mi to hlásí toto:
Notice: Undefined index: kosik in D:\php\mak\scripts\cart.php on line 4 Warning: array_keys() expects parameter 1 to be array, null given in D:\php\mak\scripts\cart.php on line 4 Warning: implode(): Invalid arguments passed in D:\php\mak\scripts\cart.php on line 4 to samé u ukazatele počtu zboží v sessions pokud session neexistuje tak to hlásí toto: <br /><b>Notice</b>: Undefined index: kosik in <b>D:\php\mak\scripts\kosik_indicator.php</b> on line <b>1</b><br /> *0
*ale zatím ukazuje správně 0 prostě to nechápu... nevíte co s tím děkuji majja01 |
||
janbarasek Profil |
#2 · Zasláno: 1. 2. 2014, 14:56:15
majja01:
Hlásí to, že hodnota není definována. Napadá mě několik řešení: - Ignorovat to a hodit tam: error_reporting(0); if (isset($promenna)) { ... } if (!isset($promenna)) { $promenna = ''; } Možná je více možných řešení, počkej na reakci ostatních. |
||
majja01 Profil |
#3 · Zasláno: 1. 2. 2014, 15:03:02
janbarasek:
díky error_reporting(0); to je to co jsem potřeboval ;)
s tím isset jsem to taky zkoušel ale stejně to tu chybu ukazovalo... tak nevím
|
||
janbarasek Profil |
#4 · Zasláno: 1. 2. 2014, 15:09:29
majja01:
funkce isset jen testuje, jestli je proměnná definována v paměti, jinak nic dalšího neřeší. Obvykle se to dělá tak, že když definovaná není, tak se jí nastaví nějaká neutrální defaultní hodnota (nebo tak to aspoň dělám já). Jinak, zakázání výpisu chyb není správné řešení a lze používat jen dočastně, než se něco rozbije. Měl bys tu chybu opravit, protože třeba podobným přístupem vytvoříš další a pak se v tom nevyznáš. Nicméně bys měl mít skrývání chyb zapnuté neustále, kdyby se náhodou něco rozbilo, tak o tom nemusejí uživatelé vědět a ty se můžeš podívat do logu. |
||
Alphard Profil |
#5 · Zasláno: 1. 2. 2014, 15:12:29
majja01:
„ error_reporting(0); to je to co jsem potřeboval ;)“
Nechoďte sem potom s dotazy, že něco nefunguje a nevíte proč, prosím. |
||
Tori Profil |
majja01:
„pokud vymažu všechny uložené sessions tak mi to hlásí toto“ Po tom smazání session restartujete nebo ne? Možná by stačilo přepsat obsah $_SESSION['kosik'] prázdným polem.
|
||
majja01 Profil |
#7 · Zasláno: 1. 2. 2014, 15:16:02
janbarasek:
Jenomže toto nefunguje :/ <?php session_start(); if(!isset($_session['kosik'])){ $_session['kosik'] = ''; }?> |
||
Kubo2 Profil |
#8 · Zasláno: 1. 2. 2014, 15:17:29
majja01:
„Jenomže toto nefunguje :/“ Pretože názov premennej $_SESSION má byť uppercase.
|
||
janbarasek Profil |
#9 · Zasláno: 1. 2. 2014, 15:26:15
majja01:
PHP sice není case sensitive, na rozdíl třeba od C++, nicméně některé konstrukty mají jisté pravidla. Příklad: $_session['kosik']; // toto je pole s názvem "$_session" a indexem "kosik" $_SESSION['kosik']; // toto volá sessions s názvem "kosik" Něco jsem o tom našel v nejčastějších chybách. |
||
Kubo2 Profil |
#10 · Zasláno: 1. 2. 2014, 15:28:50
janbarasek:
„PHP sice není case sensitive“ PHP je presnejšie case-sensitive v názvoch premenných a konštánt (ak neboli definované inak), v názvoch funkcí a objektov je case-insensitive. |
||
majja01 Profil |
#11 · Zasláno: 1. 2. 2014, 16:12:58
janbarasek, Kubo2:
děkuji to jsem nevěděl... ted mám jinačí problém: <?php session_start(); if(!isset($_SESSION["kosik"])){ $_SESSION ["kosik"] = ''; } echo count($_SESSION['kosik']); ?> |
||
juriad Profil |
#12 · Zasláno: 1. 2. 2014, 16:14:20
Musíš nastavit správnou „prázdnou“ hodnotu.
$_SESSION ["kosik"] = array(); |
||
majja01 Profil |
#13 · Zasláno: 1. 2. 2014, 16:28:55
juriad:
fájn... vše funguje díkes |
||
janbarasek Profil |
#14 · Zasláno: 1. 2. 2014, 16:35:04
majja01:
Ukazuje to jedničku z toho důvodu, že to počítá všechny indexy pole, kde je něco uložené. I když se ti u zápisu '' zdá, že tam nic není, tak tam ve skutečnosti je stále uložena informace, že tam nic není a proměnná tedy není prázdná. Abych byl přesný: Proměnná je definovaná, proto se počítá. Pokud bys chtěl počítat počet prvků pole a udělat ochranu proti těmto zápisům, tak musíš cyklem celé pole projít a někde v pomocné proměnné si počítat, kolik indexů nebylo prázdných. Toto je asi "prasárna", ale je to možné řešení: <?php $i = 0; $index = 0; while (isset($pole[$i])) { if ($pole[$i] != '') { $index++; } $i++; } echo 'Pole obsahuje '. $index .' položek!'; ?> |
||
majja01 Profil |
#15 · Zasláno: 1. 2. 2014, 16:37:52
janbarasek:
jo asi to je až moc složité lepší je opravdu místo tohoto $_SESSION ["kosik"] = ''; dát toto $_SESSION ["kosik"] = array();
Všem děkuji |
||
pcmanik Profil |
janbarasek:
Vracia to 1, lebo je nesprávne použítá funkciu count na premennej typu string. Správne je len to riešenie ktoré poslal juriad. Count je určený pre polia a objekty. Naviac namiesto tej tvojej podivnosti s while sa dá pekne použiť foreach. Ešte doplním že namiesto !isset() sa dá použiť empty() |
||
Radek9 Profil |
#17 · Zasláno: 1. 2. 2014, 19:44:23
pcmanik:
Empty ale vrací true i v případě prázdného pole. Tzn., že by se neustále přepisovalo, pokud by v košíku nic nebylo. |
||
pcmanik Profil |
#18 · Zasláno: 1. 2. 2014, 20:07:35
Radek9:
To som si neuvedomil, ďakujem za upozornenie, väčsinou empty() nepoužívam. |
||
Časová prodleva: 11 let
|
0