Autor Zpráva
xenko
Profil
Dobrý den, potřeboval bych pomoc..., jde o to že jsem si udělal refferal systém a asi jsem se zasekl na tak triviální věci že už fakt nevím.
    public function overGET($user)
    {
        $overil = array('user' => $user,); // Narve do ověril to co se nachází v GETu
        $overil = Db::dJeden('
            SELECT jmeno
            FROM uzivatele
            WHERE jmeno = ?
        ', array($user));



        $ref = Db::dJeden('
            SELECT ref
            FROM uzivatele
            WHERE jmeno = ?
        ', array($overil));

        $addp = 1 + $ref;
        $ref = $addp;

        $uzivatel = array(
        'ref' => $ref,
        );


        if ($overil) // Pokud v ověřil něco je tak dostane point
        {
            Db::pridej('uzivatele', $uzivatel, 'WHERE jmeno = ?', array($user));
        }
    }
Problém je v tom že se vypisuje pořád stejné číslo, podle mě by to mělo fungovat tak, že si vezmu hodnotu z databáze a to pak zvětším o jeden a následně to vrátím zpět do databáze, ale opak je pravdou vždy se uloží pouze hodnota dvě a nic jiného.
Db
    public static function dJeden($dotaz, $parametry = array()) {
        $navrat = self::$spojeni->prepare($dotaz);
        $navrat->execute($parametry);
        return $navrat->fetch();
    }
a
    public static function pridej($tabulka, $hodnoty = array(), $podminka, $parametry = array()) {
        return self::dotaz("UPDATE `$tabulka` SET `".
        implode('` = ?, `', array_keys($hodnoty)).
        "` = ? " . $podminka,
        array_merge(array_values($hodnoty), $parametry));
    }
Joker
Profil
xenko:
Co vrátí to volání dJeden a jak vypadají konečné dotazy posílané do databáze?

Proč se to dělá tak složitě, místo jednoduše UPDATE uzivatele SET ref = ref + 1 WHERE …?
xenko
Profil
Tak o téhle možnosti jsem nevěděl, ale stejně by mě zajímalo proč to tímhle způsobem nejde, vím že mi to vrací pole , ale už nevím jak to z toho pole dostat do jedné proměnné kterou chci a pak jí jen zvětšit a následně vložit do Db.
Tori
Profil
Metoda dJeden vrací zřejmě celý první řádek, tak si přidejte metodu, která bude vracet hodnotu z prvního sloupce v prvním řádku dat (předpokládám, že jde o PDO):
public static function dPrvniSloupec($dotaz, $parametry = array()) {
        $navrat = self::$spojeni->prepare($dotaz);
        $navrat->execute($parametry);
        return $navrat->fetchColumn();
    }
xenko
Profil
Hmm...stále to nefunguje, tak já už nevím vytvořil jsem už 100 způsobu a nic mi nejde, asi jsem ztracený případ. (ty začátky jsou zlo...)
Joker
Profil
Z „nefunguje“ nepoznáme, kde je problém.
xenko
Profil
;) Vyřešeno stačilo mi napsat že mam na to udělat další funkci a v té vyžadovat tu hodnotu. (ale nechápu proč to nešlo dát do jednoho...)
Tori
Profil
Asi by šlo použít i tohle:

$overil = Db::dJeden('
            SELECT jmeno
            FROM uzivatele
            WHERE jmeno = ?
        ', array($user));
$overil = $overil['jmeno'];
, ale předpokládala jsem, že možnost získat jen první sloupec prvního řádku využijete i jinde.
Toto téma je uzamčeno. Odpověď nelze zaslat.