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.
Echo altijd even je query, zodat je precies ziet wat de query string is. Als je dan de fout nog niet ziet kan je altijd even proberen de query direct uit te voeren, in phpmyadmin, of in de command line tool van mysql.
Tevens wil je natuurlijk altijd in je query object zelf gaan kijken of een query lukt of niet en zo nee, een foutafhandeling toepassen. Lukraak het resultaat teruggooien is niet echt netjes.

In dit geval zal je dit krijgen:
SELECT *FROM usersWHERE 1=1

Met andere woorden, je mist een paar spaties.
Wat is je vraag?

Met een WHERE 1=1 weten we wel hoe laat het is, maar kun je toch concreter worden?
Beste Erwin, ik heb zojuist de spaties toegevoegd,

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

maar ik weet 1. niet wat ik dan moet doen in mijn class, waar ik moet beginnen... en 2. wat ik moet returnen
Ik zie dat WHERE 1=1 weleens vaker voorbij komen, het praktische nut daarvan ontgaat mij volledig.
Nou, mijn gedachte gingen naar de function, omdat deze 3 waardes vraagt. En met de 1=1 geef ik de Where waarde mee 1=1. en dit is dus altijd waar
Ger van Steenderen op 17/09/2013 20:39:01

Ik zie dat WHERE 1=1 weleens vaker voorbij komen, het praktische nut daarvan ontgaat mij volledig.

ROFLMAOWPIMP… Het ”praktische nut” daarvan is controleren of een site gevoelig is voor SQL-injectie: 1=1 is altijd true, dus daarna kun ben je “binnen”.
[code lang="SQL"]
SELECT user_name FROM users WHERE 1=1
[/code]

Is hetzelfde als:[code lang="SQL"]
SELECT user_name FROM users[/code]
Ga je in PHP ook dit doen?

<?php
if ( 1=1 )
echo 1;
else echo 'not 1';
?>

Denk ut niet!
Volgens mij was het om te testen of zijn functie werkte. Dat was een goede test, want nu is hij erachter gekomen dat het dus niet werkte, en waarom.
Volgende stap is een query bedenken die ook nut heeft.
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:


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);
        
        if(mysql_num_rows($query) > 0){
            $query = true;
        }else{
            $query = "d";
        }
        return $query;
    }
}


dit stuur ik nu mee in mijn php

$getUser = query::select("*", "users", "WHERE username='".$_POST['username']."' AND password='".$_POST['password']."'");


Ik krijg enkel deze melding:

Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\wamp\www\website\libs\libs.query.php on line 12

[size=xsmall]Toevoeging op 17/09/2013 21:10:54:[/size]

De output is trouwens dit wanneer ik var_dump($getUser) gebruik:

string 'd' (length=1)

Reageren