login  Naam:   Wachtwoord: 
Registreer je!
 Forum

[PHP] Class uitlezen enquetescript (Opgelost)

Offline Oneday - 07/02/2011 19:12
Avatar van OnedayNieuw lid Hey! Ik zit met een vraagje over PHP.

Ik heb volgend script:

http://www.plaatscode.be/140647/

Ik heb dus voor elke vraag in de database een class 'vraag' met daarin: $id; het id van de vraag, $inhoud; hoe de vraag luid, $antwoorden; een array met alle mogelijke antwoorden op de vraag.

Maar nu zit ik met de vraag:

Hoe lees ik deze classes nu een voor een uit zodat ik een weergave krijg van:

Vraag1
-> antwoord 1
-> antwoord 2
-> antwoord 3
-> ...

Vraag2
-> antwoord 1
-> antwoord 2
-> antwoord 3
-> ...
...


Alvast bedankt!

14 antwoorden

Gesponsorde links
Offline ArieMedia - 07/02/2011 19:32
Avatar van ArieMedia Gouden medaille

PHP ver gevorderde
  1. $a_Vragen = array(
  2. 'vraag1' => new qlist,
  3. 'vraag2' => new qlist,
  4. 'vraag3' => new qlist
  5. );
  6.  
  7. foreach($a_Vragen as $s_VraagKey => $o_VraagObj) {
  8. echo 'Vraag'. $o_VraagObj->getVraag().'<br />';
  9. echo 'Antwoorden <br />';
  10. foreach($o_VraagObj->getAntwoorden() as $i_AntwID => $s_Antwoord) {
  11. echo $s_Antwoord.'<br />';
  12. }
  13. }


Zal moeten werken..
Offline Oneday - 07/02/2011 19:39
Avatar van Oneday Nieuw lid
ArieMedia schreef:
[..code..]

Zal moeten werken..

Dit lukt niet aangezien hij het volgende doet:

in de class qlist gaat hij voor elke vraag in de database een nieuwe class "vraag" aanmaken met daarin het ID van die vraag + de inhoud van de vraag + de oplossingen in een array.

Ik weet ook niet zeker of dit de juiste werkwijze is hoe ik 't script tot nu toe opgebouwd heb (ik ben pas sinds kort begonnen met gestructureerd programmeren).
Offline ArieMedia - 07/02/2011 19:57 (laatste wijziging 07/02/2011 20:22)
Avatar van ArieMedia Gouden medaille

PHP ver gevorderde
http://www.plaatscode.be/140648/

Probeert u dit eens, Protected gebruiken IVM overerving.
mysql_fetch_assoc gebruiken IPV mysql_fetch_array.

TIP: in je databaseklasse kan je een functie "Execute" implementeren.
  1. class MySql {
  2. // lappen code
  3.  
  4. public function Execute($s_query) {
  5. return mysql_query($s_query);
  6. }
  7. }
Offline Oneday - 07/02/2011 20:17 (laatste wijziging 07/02/2011 20:18)
Avatar van Oneday Nieuw lid
ArieMedia schreef:
http://www.plaatscode.be/140648/

Probeert u dit eens, Protected gebruiken IVM overerving.
mysql_fetch_assoc gebruiken IPV mysql_fetch_array.

TIP: in je databaseklasse kan je een functie "Execute" implementeren.
[..code..]

Alvast bedankt voor je hulp maar er zijn nog enkele dingen die ik niet goed begrijp/die nog niet werken.

Zoals: wanneer moet ik nu getVragen() en getAntwoord() precies uitvoeren.

en bv dit stukje code:
  1. protected function getAntwoorden() {
  2. $query = "SELECT *
  3. FROM `antwoorden`
  4. WHERE `vraagid` = '".$row['id']."'";


er is toch nog geen $row['id']?


++ Bedankt voor de tip over execute voor database  
Offline ArieMedia - 07/02/2011 20:21
Avatar van ArieMedia Gouden medaille

PHP ver gevorderde
Oneday schreef:
[..quote..]
Alvast bedankt voor je hulp maar er zijn nog enkele dingen die ik niet goed begrijp/die nog niet werken.

Zoals: wanneer moet ik nu getVragen() en getAntwoord() precies uitvoeren.

en bv dit stukje code:
[..code..]

er is toch nog geen $row['id']?


++ Bedankt voor de tip over execute voor database  
Copy Paste fout xD, de WHERE can je volledig verwijderen.

Wat ik doe, is 2 query's op de database afvuren, en alle antwoorden en vragen opslaan (getAntwoorden en getVragen). Deze sla je op in een array, met getVraag haal je 1 vraag op.
of je nu 1 of een paar miljoen vragen wil weergeven. Het blijven maar 2 query's die je uitvoert.
Offline Oneday - 07/02/2011 20:43
Avatar van Oneday Nieuw lid
ArieMedia schreef:
[..quote..]Copy Paste fout xD, de WHERE can je volledig verwijderen.

Wat ik doe, is 2 query's op de database afvuren, en alle antwoorden en vragen opslaan (getAntwoorden en getVragen). Deze sla je op in een array, met getVraag haal je 1 vraag op.
of je nu 1 of een paar miljoen vragen wil weergeven. Het blijven maar 2 query's die je uitvoert.

Ik heb nu dus volgend script:
http://www.plaatscode.be/140649/

Maar wanneer ik:

<?php
$qlist = new qlist;
$qlist->getVraag('1');
?>

uitvoer gebeurt er niets (hoewel ID 1 wel degelijk bestaat).
Offline ArieMedia - 07/02/2011 20:51
Avatar van ArieMedia Gouden medaille

PHP ver gevorderde
Oneday schreef:
[..quote..]
Ik heb nu dus volgend script:
http://www.plaatscode.be/140649/

Maar wanneer ik:

<?php
$qlist = new qlist;
$qlist->getVraag('1');
?>

uitvoer gebeurt er niets (hoewel ID 1 wel degelijk bestaat).

$qlist->getVraag(1); levert ook geen resultaat?
Zo nee, kan je dan een vardump geven van $this->antwoorden en $this->vragen?
Offline Oneday - 07/02/2011 20:54 (laatste wijziging 07/02/2011 21:12)
Avatar van Oneday Nieuw lid Vragen:
  1. array(2) {
  2.  
  3. [1]=> string(15) "Hoe oud is kaj?"
  4. [3]=> string(17) "Hoe oud is Laura?"
  5.  
  6. }

Antwoorden:
  1. array(2) {
  2. [1]=> array(2) {
  3. [0]=> string(1) "2"
  4. [1]=> string(2) "16"
  5. }
  6. [3]=> array(2) {
  7. [0]=> string(1) "4"
  8. [1]=> string(2) "33"
  9. }
  10. }

let niet op de vragen xD Is maar voor te proberen he. 

Dat was trouwens iets dat ik ook nog niet kende, best handig!
Offline ArieMedia - 07/02/2011 21:48 (laatste wijziging 07/02/2011 22:03)
Avatar van ArieMedia Gouden medaille

PHP ver gevorderde
Oneday schreef:
Vragen:
[..code..]
Antwoorden:
[..code..]
let niet op de vragen xD Is maar voor te proberen he. 

Dat was trouwens iets dat ik ook nog niet kende, best handig!
Zo te zien word de array goed opgebouwd.

  1. public function GetVraag($i_VraagID) {
  2. if(array_key_exists($i_VraagID, $this->vragen) {
  3. $s_Vraag = $this->vragen[$i_VraagID]; // is dus de vraag
  4. $a_Antwoorden = $this->antwoorden[$i_VraagID]; // in een foreach gooien
  5. }
  6. }

Dus, van PHP.net: in_array maak je PHP.net: array_key_exists (regel 2)
Bedankt door: Oneday
Offline Oneday - 07/02/2011 22:10 (laatste wijziging 08/02/2011 08:07)
Avatar van Oneday Nieuw lid
ArieMedia schreef:
[..quote..]Zo te zien word de array goed opgebouwd.

[..code..]
Dus, van PHP.net: in_array maak je PHP.net: array_key_exists (regel 2)

Ik had inderdaad ook opeens door dat het ID helemaal geen value heeft in 't array maar 't de key is. Ik had 't anders opgelost aangezien ik niet wist van 't bestaan van "arrey_key_exists", weliswaar gaat het daar nog vele gemakkelijker mee.

Nu geraak ik wel weer verder. Hartstikke bedankt! =)


Update:

Ik heb nog een ander foutje gevonden, namelijk:

  1. protected function getAntwoorden() {
  2. $query = "SELECT * FROM `antwoorden`";
  3. $result = $this->mysql->execute($query);
  4. while ($row = mysql_fetch_assoc($result)) {
  5. $this->antwoorden[$row['vraagid']] = array($row['id'], $row['inhoud']);
  6. }
  7. return true;
  8. }


Die array die hij daar opbouwt; Hier slaat hij het ID én het antwoord op, vandaar dat je volgende var dump kreeg:

  1. array(2) {
  2. [1]=> array(2) {
  3. [0]=> string(1) "2"
  4. [1]=> string(2) "16"
  5. }
  6. [3]=> array(2) {
  7. [0]=> string(1) "4"
  8. [1]=> string(2) "33"
  9. }
  10. }


Want '2' en '4' zijn helemaal geen antwoorden maar '2' is het ID van '16' en '4' is het ID van '33'. Echter stond er nog wel een een 2de antwoord bij elke vraag in de database, namelijk '15' en '30', die hij hier niet weergeeft, ik vermoed omdat het maken van de array in een while loop staat en hij die telkens opnieuw opbouwt waardoor de vorige waarden verloren gaan.

Hoe los ik dit op?

Offline ArieMedia - 08/02/2011 10:23
Avatar van ArieMedia Gouden medaille

PHP ver gevorderde
Kan je een voorbeeld geven van hoe jou tabellen eruit zien? Ook raad ik aan om geen SELECT * te gebruiken, maar elk veld in je query te zetten... Geeft je veel meer duidelijkheid wat er aanwezig is in je tabellen (ook als je over een jaar weer naar je code gaat kijken).

Je hebt in ieder geval 3 tabellen nodig.
1) Vragen
2) Antwoorden
3) Stemmen

Tabel 3 is een koppeltabel, waar enkel en alleen getallen in staan (en misschien een IP of gebruiker ID). Deze mis ik bij jou.
Offline Oneday - 08/02/2011 11:05 (laatste wijziging 08/02/2011 18:38)
Avatar van Oneday Nieuw lid Ik heb even iets anders geprobeerd namelijk:

http://plaatscode.be/140660/

Nu kom ik blijkbaar in een oneindige loop als ik getVraag() uitvoer, ik heb verscheidene keren het gehele script volledig doorlopen op fouten maar ik snap echt niet hoe dit zou kunnen? mySQL table ziet er nog steeds hetzelfde uit;
http://plaatscode.be/140661/
Offline ArieMedia - 08/02/2011 19:02
Avatar van ArieMedia Gouden medaille

PHP ver gevorderde
Oneday schreef:
Ik heb even iets anders geprobeerd namelijk:

http://plaatscode.be/140660/

Nu kom ik blijkbaar in een oneindige loop als ik getVraag() uitvoer, ik heb verscheidene keren het gehele script volledig doorlopen op fouten maar ik snap echt niet hoe dit zou kunnen? mySQL table ziet er nog steeds hetzelfde uit;
http://plaatscode.be/140661/
Met deze code kan je ook niet een vraag of iets dergelijks opvragen.

Geeft $this->mysql->fetch_assoc($query) wel een goed resultaat?
Offline Oneday - 08/02/2011 19:08
Avatar van Oneday Nieuw lid
ArieMedia schreef:
[..quote..]Met deze code kan je ook niet een vraag of iets dergelijks opvragen.

Geeft $this->mysql->fetch_assoc($query) wel een goed resultaat?

Blijkbaar niet.. Heb 't met 'old style' sql uitvoering gedaan en dan lukte het.. Dacht ik ook eens een handige mySQL class gemaakt te hebben. xD Nogmaals, bedankt voor je hulp!
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.238s