Hallo allemaal,

ik ben bezig met een 'update' class te schrijven waardoor het makkelijker wordt voor mij om updates door te voeren op mijn website.
Nu heb ik het volgende geschreven, maar het werkt niet..
De eerst ingevoerde value krijgt 0 en de rest wordt compleet genegeerd.
Zien jullie het probleem?

Ik ben nog niet zo lang bezig met PHP classes, dus wees lief voor me (A)

Alvast bedankt!


	class Update {

        protected $tabel;
		var $sql;
        protected $values = array();
        
        public function __construct($tabel) {
            $this->tabel = $tabel;
        }

        public function set($key, $value) {
            $this->values[$key] = $value;
        }
		
        public function output() {
			$this->sql = "UPDATE ".$this->tabel." ";
			$i = 1;
			$aantal = count($this->values);
			foreach($this->values as $key => $value)
			{
				if($i == 1)
				{
					$this->sql .= "SET ";
				}
				$this->sql .= $key. " = '".mysql_real_escape_string($value)."'";
				if($i !== $aantal)
				{
					$this->sql .= " AND ";
				}
				$i++;
			}
			
			if(!$res = mysql_query($this->sql))
			{
				$output = trigger_error(mysql_error());
			}
			else
			{
				$output = 'Gelukt!';
			}
            return $output;
        }
    }
- Die var keyword is niet goed om te gebruiken. Gebruik protected, public of private.
- Op regel 11 heb je de methode set, bedoel je niet de magic methode __set? Hiervoor moet je 2 _ voor set plaatsen.
- In plaats van gelukt te returnen kun je beter een boolean returnen. Dus true of false. Ook kun je voor foutafhandelingen beter exceptions gebruiken.
- I.p.v. MySQL kun je in classes beter PDO gebruiken.

Overigens kan je die $this->sql wel weglaten. Je gebruikt deze var alleen binnen een functie, en dan kun je gewoon $sql gebruiken.
Even PDO terzijde gelaten:

Waarom maak je een class voor Update? Is dit niet een onderdeel van een volledige database classe?
@Wouter, thanks ik ga ermee aan de slag.

@Aar, welke dan?
@Aar, ik denk dat Max hier niet met OO werkt maar gewoon een class gebruikt als verzameling van functies.
Waarom zou je dat willen, en niet meteen in OO werken?
Je krijgt nu: UPDATE tabelnaam SET key1 = 'value1' AND key2 = 'value2'
En een update query is:
Update tabelnaam SET kolom1='waarde1',kolom2='waarde2' WHERE kolom3='piet' AND kolom4='klaas'

Reageren