login  Naam:   Wachtwoord: 
Registreer je!
 Forum

[PHP OOP] - ObjectArray functie maken na mysql_fetch_assoc

Offline Eric1978 - 15/10/2011 16:14 (laatste wijziging 15/10/2011 16:16)
Avatar van Eric1978Lid Hoi allemaal,

In de Acteur class van mijn filmdatabase wil ik na het maken van een fetch_assoc constructor, een aparte object array functie maken. Nu is voor mij niet helemaal duidelijk hoe ik dit op OOP niveau moet doen. Het idee is om met een foreach de namen uit de tabel "acteur" in een array te zetten. Later kan ik dan in een object een id eraan meegeven. (1 film_id heeft meerdere acteurs vandaar de array) De foreach die ik nu gebruik werkt niet. Hoe kan ik dit oplossen?

Mijn code:
  1. <?php
  2. class Acteur {
  3.  
  4. private $_gegevens;
  5.  
  6. public function __construct($id = null) {
  7. if (is_numeric($id)) {
  8.  
  9. $query = "SELECT * FROM acteur WHERE id=$id";
  10. $result = mysql_query($query);
  11.  
  12. $this->initByDatabaseRow(mysql_fetch_assoc($result));
  13. }
  14. }
  15.  
  16. public function initByDatabaseRow($row) {
  17. $this->_gegevens = $row;
  18. }
  19.  
  20. public function getActeurs() {
  21. $this->_gegevens['naam'] = array();
  22. foreach ($this->_gegevens['naam'] as $test) {
  23. return $test;
  24. }
  25. }
  26. }

7 antwoorden

Gesponsorde links
Offline avdg - 15/10/2011 21:40
Avatar van avdg PHP gevorderde Kan je dit doen zonder oop? Dit zou al een stap vooruit zijn 
Offline Filip - 16/10/2011 00:38
Avatar van Filip IRC guru je zou ook al kunnen beginnen met je array deftig aan te spreken.

Zonder te weten wat er net uit je db komt zie ik al direct een fout. Je doet een fetch_assoc. Maar dan behandel je die fetch als zijnde een enkelvoudige array.

Je moet ten eerste al een foreach doen op de $this->_gegevens, want die bevat een array, die dan nogmaals een array bevat, of zoals hier onder aangegeven:

  1. 0 => array ('naam' => 'blaat' , 'titel' => 'blaater')
  2. 1 => array ('naam' => 'blaat2', 'titel' => 'foobar')
  3. )


Misschien kan een var_dump van $this->_gegevens je al aardig op de weg helpen om te zien waar je foreach in de mist gaat.

Verder is de behandeling net hetzelfde als in een normale functie.

Dan nog een ding, je doet een return in die foreach, wat zoveel wil zeggen als 'de functie is afgelopen, en dit is het resultaat' waardoor er zoizo niet zal worden verder gedaan, zelfs al was de foreach loop correct.
Offline Eric1978 - 16/10/2011 12:13
Avatar van Eric1978 Lid Ok de enkelvoudige Array() na de fetch_assoc is idd overbodig.

Ik ga nog eens wat proberen. In ieder geval bedankt.
Offline Filip - 17/10/2011 13:32
Avatar van Filip IRC guru
Eric1978 schreef:
Ok de enkelvoudige Array() na de fetch_assoc is idd overbodig.


Overbodig? werkt gewoonweg niet 
Offline cyberninjah - 17/10/2011 15:58
Avatar van cyberninjah Lid je zal altijd maar 1 resultaat terug krijgen omdat je maar 1x een return waarde kan sturen.

wat kan doen is bijvoorbeeld $return .= $waarde;
Offline Stijn - 18/10/2011 23:03
Avatar van Stijn PHP expert Maak gewoon een functie getActeurs(). Jou code is gewoon een hoop nonsens. In de laatste functie (getActeurs) ga je gewoon die array $this->_gegevens verkloten. Je voegt een element 'naam' toe en die verwijst naar een lege array. Vervolgens ga je die lege array loopen... dus eigenlijk doe je twee keer niets en veel memory verbruiken.

Ga je eens verdiepen wat OOP is en aub zorg voor een goeie DB layer en ga niet in het wilde weg SQL statements schrijven in je OOP klasse. Je initByDatabaseRow functie is ook zo'n OOP ramp. Dus aub, lees artikels en probeer eens iets deftigs .
Offline Wijnand - 19/10/2011 08:42 (laatste wijziging 19/10/2011 16:21)
Avatar van Wijnand Moderator Je zou je class zoiets kunnen inrichten, of snap ik nog niet helemaal wat je bedoeld?

  1. public function __construct() {
  2.  
  3. }
  4.  
  5. public function getActeur($id) {
  6. if (is_numeric($id)) {
  7. $query = "SELECT * FROM acteur WHERE id='" . $id . "'";
  8. $result = mysql_query($query);
  9. return mysql_fetch_assoc($result);
  10. } else {
  11. echo 'acteur is niet gevonden.';
  12. }
  13. }
  14.  
  15. public function getActeurs() {
  16. $query = "SELECT * FROM acteur ORDER BY naam ASC";
  17. $result = mysql_query($query);
  18. return mysql_fetch_assoc($result);
  19. }
  20.  
  21. public function getActeursByFilmId($film_id) {
  22. if (is_numeric($film_id)) {
  23. $query = "SELECT * FROM acteur WHERE film_id = '" . $film_id . "' ORDER BY naam ASC";
  24. $result = mysql_query($query);
  25. return mysql_fetch_assoc($result);
  26. } else {
  27. echo 'film is niet gevonden oid.';
  28. }
  29. }
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.222s