OOP: fatal error on non-object

Status
Niet open voor verdere reacties.

sentmen

Gebruiker
Lid geworden
2 sep 2009
Berichten
187
Hallo helpers,

Ik zit met iets raars. Ik heb een eigen CMS gebouwd. Eerst werkte ik alleen met functions, alleen nu het groter word ben ik ook begonnen met classes te werken. De CMS bestaat uit gigantisch veel bestanden dus ga niet alles hierop zetten. Dit gaat niet echt lekker. Ik krijg soms de volgende error:
Code:
Fatal error: Call to a member function veilige_mysql() on a non-object in plugin/marktplaats/categorie.php on line 2

index.php:
PHP:
<?php
error_reporting(E_ALL);
ini_set('display_errors', '1');

if(!file_exists("./inc/install.done")) { header("Location: install/"); } //begin installatie als nog niks bestaat

include("inc/db.php");
include("lib/main.php");

//nog meer onzin

/lib/main.php:
PHP:
<?php

include("lib/security.php");
include("lib/template.php");
include("lib/core.php");

$security = new security();
$tpl = new tpl();
$core = new core();

?>

/lib/security.php:
PHP:
<?php
class security
{
	//
	// Om mysql te beveiligen
	//
	function veilige_mysql($string)
	{
		include("lib/security/veilige_mysql.php");
	}
	
	
	//
	// Om alle sessies te beveiligen
	//
	function veilige_sessie()
	{
		include("lib/security/veilige_sessie.php");
	}
}
?>

/lib/security/veilige_mysql.php:
PHP:
<?php
if(get_magic_quotes_gpc()) 
{
	$string = stripslashes($string);
}
$string = mysql_real_escape_string($string);
return $string;
?>

/plugin/marktplaats/categorie.php:
PHP:
<?php
$cid = $security->veilige_mysql($_GET['nr']);
$sql = "SELECT * FROM mp_items WHERE cid='$cid' ORDER BY id";
$res = mysql_query($sql);
if (mysql_num_rows($res) >= 1)
{
	while ($row = mysql_fetch_array($res))
	{ ?>
		<div style='width=100%; height: 60px; background: #E7DF8C; border-radius: 15px;'>
			<div style="padding-left: 10px; width: 20px; float: left;"><br>*</div>
			<div style="float: left;"><br><a style="color: #00BAF1; text-decoration: none; font-size: 14px; font-family: arial; font-weight: bold;" href='<?php main_dir(); ?>marktplaats/<?php echo $_GET['nr']; ?>/<?php echo $row['id']; ?>.<?php echo $extension; ?>'><?php echo $row['titel']; ?></a></div>
		</div>
	<?php 
	}
}
?>

/.htaccess:
PHP:
Options +FollowSymLinks
RewriteEngine on
RewriteRule ^([^/]*)\.htm$ /index.php?plugin=$1 [L]
RewriteRule ^([^/]*)/([^/]*)\.htm$ /index.php?plugin=$1&nr=$2 [L]
RewriteRule ^([^/]*)/([^/]*)/([^/]*)\.htm$ /index.php?plugin=$1&nr=$2&o1=$3 [L]			
RewriteRule ^([^/]*)/([^/]*)/([^/]*)/([^/]*)\.htm$ /index.php?plugin=$1&nr=$2&o1=$3&o2=$4 [L]
RewriteRule ^([^/]*)/([^/]*)/([^/]*)/([^/]*)/([^/]*)\.htm$ /index.php?plugin=$1&nr=$2&o1=$3&o2=$4&o3=$5 [L]

Wat doe ik eigenlijk nu fout?

Groetjes Sentmen.
 
Laatst bewerkt:
De melding is redelijk duidelijk: Op die bewuste pagina is er iets niet goed gegaan met het aanmaken van
PHP:
$security = new security();

Die variabele bevat op dat moment geen object meer, dus hij is of niet goed aangemaakt of hij is overschreven.
Als je de fout kunt reproduceren zou ik de variabele eens debuggen met var_dump();

Daarnaast werk je ook niet echt OOP want dit is niet de bedoeling:
PHP:
<?php
class security
{
    //
    // Om mysql te beveiligen
    //
    function veiligeMysql($string)
    {
        include("lib/security/veilige_mysql.php");
    }
}
?>

Waarom heb je het niet zo opgelost of nog beter: gebruik gemaakt van MySQLi?
PHP:
<?php
class security
{
    //
    // Om mysql te beveiligen
    //
    function veiligeMysql($string)
    {
        if(get_magic_quotes_gpc())
        {
            $string = stripslashes($string);
        }
        $string = mysql_real_escape_string($string);
        return $string;
    }
}
?>
 
Hallo Tha Devil,

Ik heb includes gebruikt aangezien ik als ik alle functions in 1 bestand pomp dat het dan bij de classe core een bestand van 1600 regels word. Daar heb ik geen behoefte aan en dan is het totaal niet georienteerd. Vandaar dat ik allemaal includes gebruik. Hoe pak jij dit dan aan?

En even over MySQLi. Ik heb gehoord dat het veiliger is, maar aangezien ik het nog nooit heb gebruikt weet ik niet hoe het over te zetten is. Is het makkelijk?

Groetjes sentmen.
 
Ik zou überhaupt geen eigen framework beginnen maar een open-source project pakken zoals Symfony2, CakePHP of CodeIgniter ;)

Daarnaast hoeft het nou ook weer niet direct allemaal in één bestand :)

MySQLi is niet heel ingewikkeld, het is voornamelijk een kwestie van anders noteren.

Post anders het gedeelte eens waarmee je nu verbinding met de database maakt, dan passen we die aan naar MySQLi :)
 
He stop. Dit is wel erg intressant. Is het mogelijk om het structuur van mijn systeem te behouden en ipv. mijn huidige OOP om te gaan zetten naar bijvoorbeeld symfony2, cakePHP of codeIgniter? Ik ben behoorlijk gehecht aan het systeem wat ik nu heb gebouwd en ben nu net bezig met alles in een library zetten. Dus je brengt mij nu aan het twijfelen:p

Mijn huidige systeem zit eenvoudig in elkaar maar is wel behoorlijk groot. Wat zou jij doen? Alle functions gaan overzetten in classes etc. of nu ermee stoppen en 1 van die 3 gaan gebruiken (en welke van die 3 raadt jij aan)?

Groetjes Sentmen.
 
De meeste frameworks werken met een index.php-based benadering.

Alles komt binnen op index.php en wordt vanaf daar het framework ingestuurd via een Router klasse.
Dus het is een beetje afhankelijk van wat jij onder "structuur" vindt vallen. :)

Symonfy2 is waarschijnlijk iets te lastig om zomaar in te duiken, daar moet je redelijk wat ervaring voor hebben. (Wellicht de micro-variant Silex).

Met CakePHP heb ik weinig ervaring maar heb ik altijd van begrepen dat het aardig eenvoudig in elkaar zit.

Zelf wel een aantal projecten met CodeIgniter gedraaid, ik vond het makkelijk in elkaar te zetten en ook qua documentatie wel goed op orde :)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan