login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Classes probleem

Offline Voldemort - 18/02/2006 10:43 (laatste wijziging 18/02/2006 14:58)
Avatar van VoldemortPHP ver gevorderde Kan ik in een class functie geen andere reeds gedecladeerde functie aanroepen. Ik heb dus een mysql class en een nieuws class. Ik heb dus een mysql class die ik include en dan met $db = new mysql($host,$username,$pass,$db) doe. Dan ik de class nieuws gebruik ik dan:

  1. $db->query("SELECT * FROM table");


Alleen krijg ik dan dit, exact op die lijn:

Fatal error: Call to a member function on a non-object in [...] on line [zie boven]

Hoe komt dat? Wat doe ik eraan?

37 antwoorden

Gesponsorde links
Offline kokx - 18/02/2006 10:47
Avatar van kokx Onbekend Zet je class is op pastebin. Want volgensmij zit de fout in de class zelf.
Offline Voldemort - 18/02/2006 10:51
Avatar van Voldemort PHP ver gevorderde http://www.pastebin.be/350/
Offline kokx - 18/02/2006 10:53
Avatar van kokx Onbekend Ik bedoel de mysql class.
Offline Voldemort - 18/02/2006 10:55
Avatar van Voldemort PHP ver gevorderde http://www.pastebin.be/351/

PS: Kan je me ook eens helpen met die error functie en het gebruik .
Offline Thomas - 18/02/2006 10:57 (laatste wijziging 18/02/2006 10:57)
Avatar van Thomas Moderator Pff, wat een waardeloze class. Dit is niets meer dan een OOP-snoeppapiertje om standaard mysql-functies.

Meerwaarde: 0,0.
Offline kokx - 18/02/2006 10:58
Avatar van kokx Onbekend Volgensmij moet je de objectvars nog declareren.
Offline Voldemort - 18/02/2006 11:01 (laatste wijziging 18/02/2006 11:02)
Avatar van Voldemort PHP ver gevorderde Het is anders wel gemakkelijk moest ik mijn query iets willen uitbreiden qua foutenafhandeling. En trouwens, ik vraag toch niet om de waarde van mijn class, ik vind het gemakkelijk. En hoe zou jij anders een mysql class maken .

Dus connect, select_db en result als ocjecten zetten? => Doet niks.
Offline kokx - 18/02/2006 11:03 (laatste wijziging 18/02/2006 11:04)
Avatar van kokx Onbekend http://www.pastebin.be/353/
Is niet zo uitgebreid maar uitbreidingen komen erbij als ik ze nodig heb

Edit: Je gebruikt bijvoorbeeld $this->result. Maar die is niet gedeclareerd.
Offline Voldemort - 18/02/2006 11:11 (laatste wijziging 18/02/2006 11:16)
Avatar van Voldemort PHP ver gevorderde Jouw class werkt wel qua foutenafhandeling (het kan zijn dat je 2 mails heb gehad, ik had het script nog niet goed uitgepluisd ).

Maar ik krijg nog steeds die error bij het nieuwssysteem. Kan iemand mij daar nog met helpen?
Offline nemesiskoen - 18/02/2006 11:17 (laatste wijziging 18/02/2006 11:17)
Avatar van nemesiskoen Gouden medaille

PHP expert
Citaat:
Dus connect, select_db en result als ocjecten zetten?

nee... wat zijn ocjecten (objecten?).
Dat bedoeld hij dus niet.

Wat hij bedoeld is dat er veel 'domme dingen' inzitten en veel gewone functies herschreven.
Bv.
  1. if ( !$this->connect || !$this->select_db || mysql_error())
  2. {
  3. return FALSE;
  4. }
  5. //Else connection is ok
  6. else
  7. {
  8. return TRUE;
  9. }

==
  1. return !$this->connect || !$this->select_db || mysql_error();


  1. $error = ($this->mysql === FALSE) ? "Cannot connect or select the mysql database" : "";
  2. return $error;

  1. return $this->mysql === false ? "Cannot connect or select the mysql database" : "";


enzovoort...

Overigens gaat "$db->query("SELECT * FRPM table");" NOOIT werken.
Offline Voldemort - 18/02/2006 11:22 (laatste wijziging 18/02/2006 11:22)
Avatar van Voldemort PHP ver gevorderde Waarom gaat dat nooit werken? En met de class van kokx (waarbij ik dus ook een error krijg, dezelfde als in het begin)?
Offline kokx - 18/02/2006 11:50
Avatar van kokx Onbekend Ik denk dan dat er iets mis is met je php want ik gebruik hem al een hele tijd.
Offline nemesiskoen - 18/02/2006 13:03
Avatar van nemesiskoen Gouden medaille

PHP expert
select * frpm table

Daarom niet...
Offline kokx - 18/02/2006 13:05
Avatar van kokx Onbekend @nemesiskoen: Er staat toch geen mysql error maar een error in de class.
Offline nemesiskoen - 18/02/2006 13:49
Avatar van nemesiskoen Gouden medaille

PHP expert
@kokx: hoor je mij zeggen dat dat de reden is dat het niet werkt?

De reden is overigens dat $db niet is geïnitialiseerd.
Ik denk dat includes/config.ph niet wordt ingeladen...
Offline kokx - 18/02/2006 14:00
Avatar van kokx Onbekend Ik weet zeker dat dat het probleem zal zijn. Test het nu op m'n localhost en krijg precies die error.
Offline Voldemort - 18/02/2006 14:32
Avatar van Voldemort PHP ver gevorderde Ik zie nergens frpm in 1 van die bestanden.

Overigens moet m'n config.php wel ingeladen worden, ik geef toch commando op m'n config.php te includen ?
Offline kokx - 18/02/2006 14:46
Avatar van kokx Onbekend Zet het allemaal is in 1 bestandje (dus zonder config) en probeer het dan.
Offline Voldemort - 18/02/2006 14:52
Avatar van Voldemort PHP ver gevorderde includes/config.php en classes/files/index.php in dat bestand gezet, fout blijft identiek (enkel een ander regelnummer).

Als ik de mysql.class.php erbij zet (van kokx), dan krijg ik een witte pagina.
Offline nemesiskoen - 18/02/2006 14:52
Avatar van nemesiskoen Gouden medaille

PHP expert
omfg, het was gewoon om te zeggen dat de query die je bovenaan dit topic geeft zo fout als wat is.
  1. $db->query("SELECT * FRPM table");


Dat gaat nooit werken als je de query eens goed leest. En als je het dan niet ziet, lees ze dan nog eens. En als je het dan niet ziet lees dan mijn vorige berichten...

En initialiseer $db anders een IN je bestand zelf (waar je config in inlaad). Zie dan of hij de class kent. Anders ken je een 'class not found' error (oid).
Offline Voldemort - 18/02/2006 15:00
Avatar van Voldemort PHP ver gevorderde Och, dat was een voorbeeld en van te rap te typen is dat gebeurd, dat is gewoon om even te schetsen wat er fout ging.

En ik heb dus automatisch al gedaan wat je zei doordat kokx dat zei, het resultaat kan je in m'n vorige post zien.
Offline kokx - 18/02/2006 15:35
Avatar van kokx Onbekend Dan denk ik dat de fout toch in php zelf zit want deze class gebruik ik al een hele tijd en hij werkt gewoon perfect.
Offline Voldemort - 18/02/2006 17:31
Avatar van Voldemort PHP ver gevorderde Misschien ligt het aan wat anders, bv.

- Kan je wel een class waarop je reeds new (ben de naam kwijt) hebt toegepast, kan je die variable naam ervoor dan wel in een andere gebruiken?
Offline kokx - 18/02/2006 17:31
Avatar van kokx Onbekend Wat bedoel je precies?
Offline Voldemort - 18/02/2006 17:48
Avatar van Voldemort PHP ver gevorderde Dat ik $db->iets niet in een andere class kan gebruiken. Zou dat niet kunnen?
Offline kokx - 18/02/2006 18:05 (laatste wijziging 18/02/2006 18:06)
Avatar van kokx Onbekend oww nu begrijp ik het.
Doe eens in die functie eerst:
global $db;
dan werkt het denk ik wel
Offline Voldemort - 18/02/2006 18:15
Avatar van Voldemort PHP ver gevorderde De fout is weg (wat doet global eigenlijk?).

Alleen werkt het deel met $items['titel'] niet. Die titel is een DB veld. Maar die doet het niet . Wat is er fout (notice error krijg ik).
Offline Thomas - 18/02/2006 18:26
Avatar van Thomas Moderator Omg, gebruik niet zo'n brakke class, of schrijf een fatsoenlijke.
Offline Tuinstoel - 18/02/2006 18:28 (laatste wijziging 18/02/2006 18:33)
Avatar van Tuinstoel PHP expert Dus je wilt een class in een andere class gebruiken?
  1. <?php
  2. class db {
  3.  
  4. function hoi() {
  5. return 'xd';
  6. }
  7.  
  8. }
  9.  
  10. class test extends db {
  11.  
  12. function ding() {
  13. echo $this->hoi(); // of $db-> ik weet het niet zeker.
  14. }
  15. }
  16.  
  17. $c = new test;
  18. $hoi->ding();
  19. ?>


...
Het gaat om het principe van extends, het geen dat jij de code compleet wil hebben boeit me geen flikker, dat kun je immers zelf wel toepassen.
Offline kokx - 18/02/2006 18:29 (laatste wijziging 18/02/2006 18:32)
Avatar van kokx Onbekend Global zorgt ervoor dat je een variabele van buiten een functie kan gebruiken en aanpassen.

@tuinstoel: lees even de andere berichten door + de stukken code op pastebin.be en maak je voorbeeld eens fatsoenlijk (dus dat het ook zou moeten werken)
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.246s