Autor Zpráva
krejcimara
Profil
Zdravím všechny,


mám problém s polem.

Deklaroval jsem toto pole:
$pole =  array (
            'krok2' => ' ',
            'krok3' => ' ',
            'kork4'=> array (
                               'jmeno' => " ",
                               'prijmeni' => " ",
                               'adresa1' => " ",
                               'adresa2' => " ",
                               'psc' => " ",
                               'textarea' => " "
            
            ),
            'krok5' => ' '
   
   );
   
  $_SESSION['kroky']=$pole;
 

no a pak se ho snažím naplnit:

if (isset($_POST['odeslat'])){

     $pole=$_SESSION['kroky'];
     
     foreach ($pole['krok4'] as $key => $value){
      
       unset($pole['krok4']['$key']);
       
     }
      $pole['krok4']['jmeno']=$_POST['jmeno'];
      $pole['krok4']['prijmeni']=$_POST['prijmeni'];
      $pole['krok4']['adresa1']=$_POST['adresa1'];
      $pole['krok4']['adresa2']=$_POST['adresa2'];
      $pole['krok4']['telefon']=$_POST['telefon'];
      $pole['krok4']['psc']=$_POST['psc'];
      $pole['krok4']['textarea']=$_POST['poznamkastepfor'];
     
     $_SESSION['kroky']=$pole;

}

problém je v tom, že mi to vypíše toto:

Warning: Invalid argument supplied for foreach() in /data/www/konemikulov.cz/nette.konemikulov.cz/php/steps4.php on line 12

Warning: Illegal string offset 'jmeno' in /data/www/konemikulov.cz/nette.konemikulov.cz/php/steps4.php on line 17
M
Warning: Illegal string offset 'prijmeni' in /data/www/konemikulov.cz/nette.konemikulov.cz/php/steps4.php on line 18
K
Warning: Illegal string offset 'adresa1' in /data/www/konemikulov.cz/nette.konemikulov.cz/php/steps4.php on line 19
B
Warning: Illegal string offset 'adresa2' in /data/www/konemikulov.cz/nette.konemikulov.cz/php/steps4.php on line 20
M
Warning: Illegal string offset 'telefon' in /data/www/konemikulov.cz/nette.konemikulov.cz/php/steps4.php on line 21
7
Warning: Illegal string offset 'psc' in /data/www/konemikulov.cz/nette.konemikulov.cz/php/steps4.php on line 22
6
Warning: Illegal string offset 'textarea' in /data/www/konemikulov.cz/nette.konemikulov.cz/php/steps4.php on line 23


Nevíte někdo co stím?
Corwin
Profil
k čemu tam je přesně ten unset? navíc ty uvozovky u $key tam nepatří.

$pole = $_SESSION['pole'];
foreach($_POST as $key => $value){
  if(isset($pole['krok4'][$key])){
    $pole['krok4'][$key] = $value;
  }
}
$_SESSION['pole'] = $pole;

musí samozřejmě sedět všechny klíče, takže tvá $_POST['poznamkastepfor'] by se měla jmenovat "textarea".
Joker
Profil
krejcimara:
Nevíte někdo co stím?

Sjednotit si pojmenování klíčů- krok vs. kork.
krejcimara
Profil
Corwin:
No chci před vložením dat z formuláře, vymazat data z pole funkcí unset, je to špatně?


Joker:
Sjednotit si pojmenování klíčů- krok vs. kork.
Udělal jsem, žádná změna :)


Moc děkuji, už mi to funguje. Problém byl jednak v těchto překlepech, a v tom že mám platnost session nastavenou na 24 hodin, takže jsem ukládal do neaktuální struktury pole, jestli mi rozumíte. Děkuji :)
Corwin
Profil
ten unset je přeci zbytečný, když v zápětí tam nastavíš nové hodnoty, ne? pokud je POST proměnná prázdná, bude i výsledný klíč v sešně prázdný. ale aspoň bude existovat a nebude ti to házet warningy.
Tori
Profil
krejcimara:
No chci před vložením dat z formuláře, vymazat data z pole funkcí unset
Špatně to není, jen zbytečně složitě. Tohle bude fungovat stejně: $pole['krok4'] = array();

Warning: Invalid argument supplied for foreach() + Warning: Illegal string offset
Bylo by dobře hned na začátku zkontrolovat, jestli v session vůbec takové pole existuje, tj. místo $pole=$_SESSION['kroky']; použít např.:
$pole = isset($_SESSION['kroky']) && is_array($_SESSION['kroky']) ? $_SESSION['kroky'] : array(); (tj. pokud proměnná v session existuje a je to pole, tak se přiřadí do $pole, v ostatních případech se použije nové pole).

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: