Abstracte table class hulp/uitleg nodig

Status
Niet open voor verdere reacties.

phobia

Terugkerende gebruiker
Lid geworden
4 sep 2006
Berichten
1.777
Via een video tut ben ik een abstract table class op het spoor gekomen.
deze:
PHP:
    public function load($id)
    {
        $this->id = $id;
        $dbo      = database::getInstance();
        $sql      = $this->buildQuery('load');
        
        $dbo->doQuery($sql);
        $row = $dbo->loadObjectList();
        foreach($row as $key => $value)
        {
            if($key === 'id')
            {
                continue;
            } 
            else
            {
                $this->$key = $value;
            }
        }
    }
Nu snap ik wel hoe deze werk, maar nu wil ik de class uitbreiden dat ik meerdere results kan verwerken.
Ik bedoel, als de query meer de een resultaat opleverd, dat ik die dan uit kan lezen op zelfde manier als het in de bovenstaande functie gebeurt.
Waar ik al achter ben is dat ik niet dit kan doen
PHP:
$this->$key[] = $value;
zou iemand mij hier een licht op kunnen schijnen?
 
met wat aanpassingen
$this is enkel binnen een object
PHP:
abstract class table{
    private $key;//ik ben zelfde variabele als 17:
    private $mykey;
	public function load($id){
        $this->id = $id;
        $dbo      = database::getInstance();
        $sql      = $this->buildQuery('load');
        $dbo->doQuery($sql);
        $row = $dbo->loadObjectList();
        foreach($row as $key => $value){
            if($key === 'id'){
                continue;
            }else{
                $this->key = $value;//17: kan niet $µ
                $this->mykey['$key'] = $value;
            }
        }
    }
}
 
Laatst bewerkt:
Hier onder staat mijn hele table class.
Door nu bv. een user class te maken welke table class extends kan ik met $table de table bepalen welke ik wil gebruiken.
In de user class moet ik dan wel de variabele declareren waarna ik met bv. $user->gebruikernaam.
De variabelen moeten dan wel de namen hebben van de rows in de table.

PHP:
<?php

/**
 * @author Phobia
 * @copyright 2011
 * 
 * bind($data)
 * set data to class variables
 * 
 * load($id)
 * 
 * store()
 * store class variables in table
 * 
 * buildQuery($task)
 * create query by task string
 * (task = load, store, update delete )
 * 
 */

class table
{
    protected $id    = NULL;
    protected $table = NULL;
    
    function __construct() {}
    
    public function bind($data)
    {
        foreach($data as $key => $value)
        {
            $this->$key = $value;
        }
    }
    
    public function load($id)
    {
        $this->id = $id;
        $dbo      = database::getInstance();
        $sql      = $this->buildQuery('load');
        
        $dbo->doQuery($sql);
        $row = $dbo->loadObjectList();
        foreach($row as $key => $value)
        {
            if($key === 'id')
            {
                continue;
            } 
            else
            {
                $this->$key = $value;
            }
        }
    }
    
    public function store()
    {
        $dbo = database::getInstance();
        $sql = $this->buildQuery('store');
        $dbo->doQuery($sql);
    }
    
    protected function buildQuery($task)
    {
        $sql = "";
        if($task == 'store')
        {
            if($this->id == '')
            {
                $keys = '';
                $values = '';
                $classVars = get_class_vars ( get_class($this) );
                $sql .= "INSTER INTO ".$this->table;
                foreach($classVars as $key => $value)
                {
                    if($key = 'id' || $key = 'table')
                    {
                        continue;
                    }
                    $keys .= "{$key},";
                    $values .= "'{$value}',";
                }
                $sql .= "(".substr($key,0,-1).") VALUES (".substr($values,0,-1).")";    
            }
            else
            {
                $classVars = get_class_vars ( get_class($this) );
                $sql .= "UPDATE ".$this->table." SET ";
                foreach($classVars as $key => $value)
                {
                    if($key = 'id' || $key = 'table')
                    {
                        continue;
                    }
                    $sql .= "{$key} = '{$value}', ";
                }
                $sql = substr($sql,0,-2)." WHERE id = {$this->id}";  
            }
        }
        elseif($task == 'load')
        {
            $sql = "SELECT * FROM $this->table WHERE user_id = $this->id";
        }
        return $sql;
    }
}
?>
 
$this->$key = $value;
bestaat niet ook zowel de var bestaat niet en of methode bestaat niet

je gaat eff moeten uitleggen wat je hier wil doen
 
Dit is mijn indes pagina. misschien verklaard dit het misschien nog meer.
PHP:
<?PHP
include('./classes/config.php');
include('./classes/database.class.php');
include('./classes/table.class.php');
include('./classes/user.class.php');

$dbo = database::getInstance();
$dbo->connection($host,$user,$pass,$dbName);

$user = new users();

$user->load('52');

echo $user->user_id.'<br>';
echo $user->user_login.'<br>';	
echo $user->user_name.'<br>'; 
echo $user->user_level.'<br>';
echo $user->user_active.'<br>';
echo $user->user_authorization.'<br>';
echo $user->avatar.'<br>';
echo $user->user_email.'<br>';
echo $user->mail_notify.'<br>'
?>

Zo als het nu werkt, kan ik maar 1 record uit een table trekken.
omdat de variabelen binnen de users class worden gedeclareerd en op die manier automatisch door de table class worden toe gekend.

user class
PHP:
<?PHP

class users extends table 
{
    protected $table         = 'users';
    var $admin_user          = NULL;
	var $user_id             = NULL;
	var $user_login          = NULL;	
    var $user_name           = NULL; 
    var $user_level          = NULL;
    var $user_active         = NULL;
    var $user_authorization  = NULL;
    var $avatar              = NULL;
    var $user_email          = NULL;
    var $mail_notify         = NULL;

}
?>

MMM ik zit me nu, in een geloof ik helder moment, te bedenken. Als ik in de user class de vars nou als arrays maak.
dan moet de table class ze gewoon kunnen vullen met de records die hij uit de db plukt.

Of is dit een rare gedachte kronkel?
 
Je gaat deze toch niet volledig in geheugen plaatsen Ik heb iets gelijkaardig maar dan is één user de data van die user.Dus ik kan het object bij die user in session steken zodat het niet zwaar word voor de server. dit is vb mijn user class
hiervoor zorg ik ervoor de 'is' altijd een bool returnt ect Maar ik vroeg me nog altijd af hoe ik iemand anders zijn session kan stoppen zodat deze noodgedwongen zijn paswoord dient boven te halen.
PHP:
<?php
/**
 * @author Lieven Roegiers
 * @copyright 2009
 * @CMS autosite
 */
//function killsessionuser(){
	
//}
/**
 * @param mixed $user
 * @return void
 */
function setsessionuser($user){
	$_SESSION['user']=serialize($user);
}
/**
 * getsessionuser()
 * @return object User
 */ 
function getsessionuser(){
	return(isset($_SESSION['user']))?unserialize($_SESSION['user']):null;
}
class User extends User_data{
	private $userpath;
	private $name;
	private $pasword;
	private $level;
	private $isuser;//
	private $kkey;
	private $remoteip;
	private $enabled;
	private $hashList =array();
	private $releasetime = 0 ;
	/**
	 * @return void
	 */
	function User(){
		session_start();
	}
	//<<<<<<<<<<<<<<<<<<<<<<<FUNCTIONS>>>>>>>>>>>>>>>>>>>>>>>>>
	/**
	 * @param string $username
	 * @param string $path 
	 * @param string $kkey
	 */
	function setUser($username,$path,$kkey){
		//$username=(isset($username)&& $username!="")?$username:$_SESSION['login'];
		//parent:: wil go to extends
 		parent::__construct($username,$kkey,$path);
		$this->name =$username;
		$this->userpath =$path.substr($username, 0, 1)."/".$username."/";
		$this->isuser=(is_dir($this->userpath)&& $username!="")? true:false;
	}
	/**
	 * @param string $pasword
	 * @param string $kkey
	 * @param null $c
	 * @return bool
	 */
	function login($pasword,$kkey,$c){
		if ($this->isuser)include $this->userpath."data.php";
	    if(isset($this->name)&&isset($incpass)&& $incpass != "" && ishash("md5",$kkey.$incpass,$pasword)){
			$this->setReleasetime();
			$this->setRemoteip();
			$this->level = $loginniveau;
			$this->enabled = $hasaccess;//login enabled or disabled
			return true;
			//$_SERVER["HTTP_ACCEPT"
		} else { 
			return false;
		}
  	}
  	//<<<<<<<<<<<<<<<<<<<<<<<Getters>>>>>>>>>>>>>>>>>>>>>>>>>
	/**
	 * @return bool
	 */
	function islogin(){
		return (isset($this->name)&& isset($this->releasetime) && $this->releasetime > time()&&$this->isenabled());//$this->isRemoteip());
	}
	/**
	 * @param string $username
	 * @return bool
	 */
	function is_User($username){
		return $this->isuser;
	}
	/**
	 * @return int
	 */
	function getlevel(){
		return($this->islogin())?$this->level:112;// !login = lowerst level 
	}
	/** 
	 * @param int $level
	 * @return bool
	 */
	function ispermitlevel($level){
		return ($level<$this->level);
	}
	/**
	 * @return string do not print it
	 */
	public function getpath(){
		return ($this->islogin())?$this->userpath:"ERROR not login";
	}
  	/**
  	 * @return bool
  	 */
  	private function isenabled(){
  		return true;
  	}
  	//set not public security
	/**
	 * @return bool
	 */
	private function isReleasetime(){
		return ($this->releasetime > time());	
	}
	/**
	 * @return bool
	 */
	private function isRemoteip(){
		if($this->remoteip === $_SERVER['REMOTE_ADDR']){
			return true;
		}else{
			@session_unset();
			return false;
		}
	}
	//<<<<<<<<<<<<<<<<<<<<<<<Setters>>>>>>>>>>>>>>>>>>>>>>>>>
	/**
	 * @return void
	 */
	private function setReleasetime(){
		$this->releasetime = time() + (1 * 1 * 60 * 60);	
	}
	/**
	 * @return void
	 */
	private function setRemoteip(){
		$this->remoteip = $_SERVER['REMOTE_ADDR'];
	}
	/** 
	 * @param string $oldpwx
	 * @return 
	 */
	public function setpassword($oldpwx){
		
	}
	/**
	 * @return string
	 */
	public function __tostring(){
		return "Welkom ".$this->name."releasetime".(($this->releasetime -time() )/60)."min";
	}

	/**
	 * @return testfunction void
	 */
	private function __toprintsession(){
		print_r($_SESSION);
	}
}
?>
 
nee, dat van mij is alleen om te testen, om de variabelen uit de db weer te geven.
Aangezien ik aan het proberen ben de table class zo aan te passen dat ik ook meerdere rows uit een table kan plukken.

Ik heb al kontakt opgenomen met de amreikaanse ontwerper van deze class met dezelfde vraag,
Hij gaat kijken of hij er een video tut van kan gaan maken op youtube.

Ik ben aan het knutselen met een eigen gemaakt forum en wat ik nu het werkt maar is een ratjetoe van code
en ik wil het overzichtelijker en duidelijker gaan maken met een behulp van dynamische/abstracte classes.
Zodat ik verschillende classes/methodes op meerdere manieren kan gebruiken/hergebruiken.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan