Beste mensen,

ik ben een beetje bezig met het OOP programmeren. Nu ben ik een static function aan het maken voor de querys, zodat ik ze makkelijk kan aanroepen en uitvoeren, enkel weet ik niet precies wat ik aan het doen ben, of hoe ik het goed kan krijgen.

Hieronder zie je wat ik voor class heb gemaakt:


class query{
    
    public $query;
    
    public static function select($select, $from, $where){
        
        $query = mysql_query("SELECT ".$select."FROM ".$from."WHERE ".$where);
        return $query;
    }
}


Onderstaande code is een test van me, nog niet echt gebasseerd op een loginscript,
Zo roep ik mijn code aan:


$getUser = query::select("*", "users", "1=1");
var_dump($getUser);


Het resultaat van de var_dump is: boolean false

Uiteraard heb ik de class geincluded, dus dat zit allemaal wel goed.
Jerry, je weet wat variabelen zijn?
Houd het even rustig mannen.
Jerry, ik raad je aan om eerst wat beter bekend te raken met PHP zelf, en dan met name functies.

OOP is een stap verder.
Je kunt niet echoen in een functie? Wat is dat nu weer.

In het voorbeeld van Ger:
[quote="Ger van Steenderen op 17/09/2013 21:32:03"]
<?php
include 'config/config.database.php';

class query{
    
    public $query;
    
    public static function select($select, $from, $where){
        
        $query = mysql_query("SELECT ".$select." FROM ".$from." WHERE ".$where);
        
        echo "SELECT ".$select." FROM ".$from." WHERE ".$where;

        /**************************************
	Hier MOET je controleren of de qury geslaagd is
	*******************/
	if($query !== false) {
        	if(mysql_num_rows($query) > 0){
            	return true;
        	}	else{
            	return false
        	}
	else return false;
    }
} 
?>

En uiteraard is dit alleen om te testen, maar daar gaat het natuurlijk om.

Zo kan het ook Erwin.
Ben net thuis denk zal even een voorbeeldje tikken met uitleg. ;)

<?php
include 'config/config.database.php';

class query{
    
    public $query;
    
    public static function select($select, $from, $where)
    {
        // de query, mind, hij is niet veilig nu... ;)
        $query = mysql_query("SELECT ".$select." FROM ".$from." WHERE ".$where);
        // hier checken we of de query lukt   
	if($query === false)
        {
            //OEPS helemaal mis, dus nu kunnen we debuggen..
	    throw new Exception('error from database'. $query);
        }
        // hey query lukt, dus we kunnen wat met de data doen..
        elseif($query !== false) 
        {
           // hier kijken we of er wat uit de data komt
           if(mysql_num_rows($query) > 0)
           {
              // zo ja, oke het is true..
              return true;
           }
        }
           // deze else is eigenlijk overbodig, want als iets niet true is dan is het altijd false..   
           else
           {
            return false;
           }
 
} 
?>

edit copy/past zooitje..
@ Bart & Erwin

return true?

Zou je het niet relevant vinden om dat resultaat ($query) terug te geven?
Nu doe je er niets mee
@Kris,
Er is nog veel meer mis (bijvoorbeeld het gebruik van een static functie), maar gezien de vragen en problemen heb ik het idee dat het beter is om 1 probleem per keer aan te pakken...
@kris,

Uiteraard is het een betere optie om resultaat terug te geven.
Maar in het voorbeeld dat we gaven was dat niet zo relevant, het ging meer om het feit "hoe kan ik iets echoen" en debuggen.

Jerry php op 17/09/2013 21:03:47

Jongens, kunnen we het inderdaad houden op mijn vraag? Want ik ben allemaal aan het zoeken naar een oplossing en zou graag jullie inzet willen wanneer dit kan. ik heb nu dit: ...


Laat me even jouw code van daar wat herschrijven, met commentaar.
Zie eens of het je wat meer vertelt

<?php
class query {
// static betekent dat je niet communiceert met $this-> variabelen (= eigenschappen / properties)
// onnodig - en in mijn ogen verwarrend - om variabelen op te lijsten buiten de functie
public static function select($select, $from, $where=1) {
$res = mysql_query("SELECT " . $select . " FROM " . $from . " WHERE " . $where);
if(false === $res) {
// dit betekent: er is een syntax error in de sql-string
// misschien wil je hier iets anders doen dat false teruggeven?
return false;
}
if(mysql_num_rows($res) > 0) {
// er zijn rijen (minstens 1) gevonden
return $res;
}
else {
// er zijn geen rijen gevonden, maar de sql-string is wel goed geformuleerd.
// Je kan dit zonder probleem in een while(fetch_...) steken; er zullen gewoon geen iteraties worden uitgevoerd. Geen warnings, errors...
// eventueel wil je hier iets anders doen?
return $res;
}
}
}

$con = mysql_connect('localhost', 'root', '');
mysql_select_db('phphulp');

$res = query::select(
"uid, username, email",
"users",
"username='Jef'"
); // SELECT uid, username, email FROM users WHERE username='Jef'


while($row = mysql_fetch_assoc($res)) {
echo '<div>' . $row['username'] . ' - ' . $row['email'] . '</div>';
// als je hier niet komt, is het dat de gevraagde user niet bestaat
}
?>

--------

Jerry php op 17/09/2013 21:54:42

Ik zeg al een paar keer dat ik denk dat ik niet kan echo'en in een functie,


Er wordt altijd heel erg afgeraden om een echo in een functie te steken.
Maar dat geldt voor functies die "af zijn"; functies die werken.

Terwijl je een functie aan het schrijven bent, kan je voorlopig echo's zetten overal waar je niet zeker weet wat de waarde van een variabele is.

Eens de functie werkt, haal je al die echo's weg.

----------

Jerry php op 17/09/2013 20:34:48

mijn doel is eigenlijk nu dat ik ga controleren of de gebruikersnaam en password voorkomen in de database en dan iets returnen


Okay, dan schrijf je een functie. Een functie die een true of false teruggeeft.
Maar je noemt die functie niet "select"; en je steekt die functie niet in een class "query".

Als je iets wil, geef het dan een naam waar je iets aan hebt. Waarbij je aan de naam direct kan zien wat de bedoeling is.

----
Even wat uitgewerkt:
<?php
class query {
// ZIE MIJN VORIGE CODE
}

class User {
// returns TRUE if the user is found; else returns false
static function user_exists($username, $password) {
// we gaan die vorige class aanspreken
$res = query::select(
"uid, username, email",
"users",
"username='" . $username . "' AND password='" . $password . "'"
); // SELECT uid, username, email FROM users WHERE username='Jef' AND password='repelsteeltje'
if($row = mysql_fetch_assoc($res)) {
// 1 user gevonden, we keren true terug.
return TRUE;
}
// in elk ander geval geef je false terug
return FALSE;
}
}

$con = mysql_connect('localhost', 'root', '');
mysql_select_db('phphulp');

$userExists = User::user_exists("Jef", "repelsteeltje"); // Bestaat user "Jef", met paswoord "repelsteeltje"?
if ($userExists) {
echo 'De user bestaat';
}
else {
echo 'De user bestaat niet';
}
?>

Vind het vreemd dat niemand zegt dat "query::select" enorm fout is en al totaal geen OOP is.
De vragensteller is bezig met statische functies.

Dat is het ding waarmee hij bezig is. Dat staat ook in de titel.


- Raoul - op 18/09/2013 13:56:45

dat "query::select" enorm fout is

Leg eens uit wat je met fout bedoelt.
(anticiperend ... de code werkt, mocht je daar vragen over hebben)

Reageren