[PHP] Objecten in objecten in obj. en vars

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben een applicatie aan het maken voor het genereren van een enquete. Daarin heb ik drie classes: Een enquete, bestaat uit meerdere secties, bestaat uit meerdere vragen. Een object enquete bevat dus een array $section met daarin objecten van de classes sectie. enz.

De class enquete heeft een functie opslaan, deze roept de funcite opslaan aan van alle secties die op hun beurt weer de functie opslaan van vragen aanroepen. De functie opslaan van vragen ziet er als volgt uit:

code:
1
2
3
4
5
6
function vraag($antwoord)
{
  echo "Saving vraag: ".$this->id." antwoord: ".$antwoord;
  $this->antwoord = $antwoord;
  echo "saved: ".$this->antwoord;
}



Beide echos geven het goede antwoord aan. Het lijkt er dus op dat het antwoord gesaved is. Als ik echter:
print_r($enquete); aanroep, dan zie je de structuur van de objecten. Nu is het antwoord leeg.

Als ik het antwoord set via:
code:
1
$enquete->section[0]->vragen[0]->antwoord = "test";


dan doet hij het wel. Waar kan dit aan liggen.

Acties:
  • 0 Henk 'm!

  • beetle71
  • Registratie: Februari 2003
  • Laatst online: 09-09 15:24
Ik heb verder geen glazen bol maar ik verwacht dat je een probleem hebt met referenties,
dus dat je de objecten niet met hun referentie doorgeeft en dat PHP dus met kopieen werkt.

Toon eens wat meer van je code..

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Niet helemaal netjes, maar hierbij de class enquete.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
class enquete
{
    var $id;
    var $naam;
    var $aantalVragenPerPagina;
    var $gebruikersIp;
  var $huidigePagina = 0;
    var $aantalSections;
    var $sections;
    
    function enquete($id, $aantalVragenPerPagina = 5)
    {
      $this->id = $id;
        $this->aantalVragenPerPagina = $aantalVragenPerPagina;
        $this->gebruikersIp = getenv("REMOTE_ADDR");
    $this->init;
    }

  function init()
  {
    global $db;
        $result = $db->selectQuery("SELECT * FROM section WHERE enquete_id=".$this->id);
        if($result[0]['id'] > 0)
        {
            $this->aantalSections = count($result);
            for($i = 0;$i < count($result);$i++)
            {
                $this->sections[$result[$i]['id']] = new section($result[$i]['id']);
            }
        } else
        {
          $this->aantalSections = 0; 
        }
  }

  function toonPagina($pagina = 0)
  {
    if($pagina == 0) $pagina = $this->huidigePagina;
    $min = $pagina * $this->aantalVragenPerPagina +1;
    $max = $min + $this->aantalVragenPerPagina -1;
    $count = 0;
    echo "<form name='enquete' method=POST action=?enqueteOpslaan>";
        reset($this->sections);
        while(list($sectionKey, $section) = each ($this->sections))
        {
            reset($section->vragen);
            while(list($vraagKey, $vraag) = each ($section->vragen))
            {
                $count++;
                if($count >= $min && $count <=$max)
                    $vraag->toonVraag();
            }
        }
    echo "<input type=submit name=submit value=opslaan></form>";
        echo "
            <script>
            function checkForm()
            {
                for(i=0;i<document.enquete.elements.length;i++)
                {
                    //alert(document.enquete.elements[i].value);
                }
            }
            checkForm();
            </script>
        ";
  }

    function opslaan()
    {
        while(list($key, $value) = each ($this->sections))
        {
            $value->opslaan();
        }
    }

  function volgendePagina()
  {
    $this->huidigePagina++; 
  }

  function vorigePagina()
  {
    $this->huidigePagina--; 
  }

    function start()
    {
      $this->huidigePagina = 0;
    }
    
    function reset()
    {
        $this->huidigePagina = 0;
      $this->sections = "";
      $this->init(); 
    }
    
    function stop()
    {
      
    }
}

?>

Acties:
  • 0 Henk 'm!

  • beetle71
  • Registratie: Februari 2003
  • Laatst online: 09-09 15:24
het gaat fout door de while in je opslaan method(functie), die werkt met kopieen ipcv met de originelen.
De $value in jouw geval is dus een kopie waarop je ->opslaan() toepast, terwijl je
->opslaan wilt toepassen op het origineel.
PHP:
1
2
3
4
5
function opslaan(){
   foreach(array_keys($this->sections) as $key){
      $this->sections[$key]->opslaan();
  }
}


Zou moeten werken.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Dank u, dit werkt inderdaad beter!