Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno PHP - objekty a $_SESSION

Zdravím,
můj dotaz se týká uložení dat objektu do session a jejich následném získání zpět. Nefunguje, jak má. Nechci popisovat celý dlouhý skript, snad to bude aspoň trošku pochopitelné:

1) Vytvořím objekt třídy ($o) s nějakými předdefinovanými hodnotami proměnných (definováno ve třídě).
2) Těmto proměnným v tomto objektu přiřadím nové hodnoty, které získám z formuláře ($_GET)
Pomocí foreach je vyplním. Pomocí echo je ověřím - objekt opravdu obsahuje "nové hodnoty".

//book.php
if ($add!='')
  {
  $o = new $object(time());
  foreach ($_GET as $k => $v)
    {
    $o->k = $v;
    echo $o->k . '<br>';
    }

3) Tento objekt uložím do SESSION.

  $o->save();

4) Pomocí níže uvedeného odkazu se přesunu na další stránku,...

 echo "<a href='book.php?id={$o->id}'>rezervovat</a>";
//book.php?id=nejake_cislo
if ($id == '' or $id == FALSE)
  header("location: index.php");

5) na další stránce chci opět vytáhnout dané hodnoty objektu ze SESSION.

$r = Resource::getById($id);
foreach ($r as $ii => $iii)
  {
  echo "$ii => $iii<br>";
  }

6) a objeví se opět původní předdefinované hodnoty, nikoliv ty zadané ve formuláři :-(

//část  definice třídy Resource:
public function save()
  {
  $_SESSION['resource'][$this->id] = $this;
  }
public function getById($id)
  {
  if (array_key_exists($id,$_SESSION['resource']))
    return $_SESSION['resource'][$id];
  else
    return FALSE;
  }

Děkuji.

Předmět Autor Datum
Asi budeš muset ty session nějak "nastartovat", máš tam na začátku skriptů session_start(); ?
marekdrtic 24.02.2009 15:30
marekdrtic
Mám. Na začátku každého souboru/skriptu je: require_once ('main.php'); přičemž soubor/skript main.…
Zajic 24.02.2009 15:40
Zajic
Tak si zkus udělat jednoduchý skript a do něho dej: <?php session_start(); $_SESSION['test'] = 'TES…
marekdrtic 24.02.2009 15:47
marekdrtic
Dík, něco podobnýho jsem zkoušel, session fungují. Dokonce, i když se podívam do souboru sessionstor…
Zajic 24.02.2009 15:52
Zajic
které získám z formuláře ($_GET) Data z formuláře se získávají pomocí $_POST.
host 24.02.2009 17:33
host
to je pravda, nicméně pokud toho neni moc, tak lze použít i $_GET a já chtěl sledovat pohyb v URL ..…
Zajic 24.02.2009 17:55
Zajic
už jsem na to přišel ... :-) 1) oprava 1. části //book.php if ($add!='') { $o = new $object(time()… poslední
Zajic 25.02.2009 07:52
Zajic

Mám. Na začátku každého souboru/skriptu je:

require_once ('main.php');

přičemž soubor/skript main.php obsahuje (na začátku):

require_once ("inc/zdroj.php"); //definice třídy                    
require_once ("inc/beamer.php");  //definice třídy
require_once ("inc/digicam.php"); //definice třídy
session_start();
...
...  

zkoušel jsem session_start() umístit úplně na začátek, ještě před 3 položky "require_once" (nepomohlo), navíc vygooglil jsem, že by měly být nejdřív vloženy definice tříd a pak až nastartovat session ...

už jsem na to přišel ... :-)

1) oprava 1. části

//book.php
if ($add!='')
  {
  $o = new $object(time());
  foreach ($_GET as $k => $v)
    {
    $o->temp[$k] = $v;
    echo "<span class='pismo7_gray'> ",$o->temp[$k]," </span>";   //pomocné zobrazení
    }

5) oprava 5. části

$vypis = Resource::getById($id);
html_start();
foreach ($vypis->temp as $abc)
  {
  echo "<span class='pismo7_gray'> ",$abc," </span>";  //pomocný výpis
  }

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