Autor Zpráva
majja01
Profil
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
a pokdu do session něco přidám tak všechny chybí... nevíte jak toto vyřešit?
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
majja01:
Hlásí to, že hodnota není definována. Napadá mě několik řešení:
- Ignorovat to a hodit tam:
error_reporting(0);
- Testovat, zda je hodnota definována:
if (isset($promenna)) { ... }
- Když neexistuje, tak definovat nějakou vlastní hodnotu, třeba:
if (!isset($promenna)) { $promenna = ''; }

Možná je více možných řešení, počkej na reakci ostatních.
majja01
Profil
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
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
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
janbarasek:
Jenomže toto nefunguje :/
<?php session_start();
  if(!isset($_session['kosik'])){
    $_session['kosik'] = '';
    }?>
Kubo2
Profil
majja01:
Jenomže toto nefunguje :/
Pretože názov premennej $_SESSION má byť uppercase.
janbarasek
Profil
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
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
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']);  ?>
místo 0 to ukazuje 1
juriad
Profil
Musíš nastavit správnou „prázdnou“ hodnotu.
$_SESSION ["kosik"] = array();
majja01
Profil
juriad:
fájn... vše funguje díkes
janbarasek
Profil
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
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
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
Radek9:
To som si neuvedomil, ďakujem za upozornenie, väčsinou empty() nepoužívam.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

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