Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Problem sa upisom u bazu kroz rekurzivnu funkciju u klasi

[es] :: PHP :: Problem sa upisom u bazu kroz rekurzivnu funkciju u klasi

[ Pregleda: 7145 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Aleksandar Klickovic
Owner
Daedalus Outsourcing
Beograd

Član broj: 204183
Poruke: 344
*.dynamic.sbb.rs.

Sajt: petsq.me


+67 Profil

icon Problem sa upisom u bazu kroz rekurzivnu funkciju u klasi05.09.2017. u 04:39 - pre 80 meseci
Ćao Drugari,

Mozgam celu noć, testiram, čekiram, ali upao sam o neki loop, ne vidim gde je bug, treba mi drugo mišljenje..

Situacija je sledeća:

Kada se novi korisnik registruje, potrebno je da upLine (do 6 nivoa, ako postoje) dobije neki referal bonus.
E sad registracija radi skroz, dobijem novog korisnika, vrati mi novi ID (odu email notifikacije itd itd), ali deo sa unosom transakcija za upline jednostavno ne prolazi.

Pozivam funkciju ovako

Code:

$oDb->refBonus($newID, $wallet, 0, $newID);


A sama funkcija, koja se nalazi u db.class (klasa koja ima celokupan CRUD i još neke stvari za funkcionisanje) koja radi sve kako treba, izgleda ovako

Code:


/*  Refferal Bonus */
    
    function refBonus ($userID, $tAmount, $n = 0, $origID){
        
        $rBonus = 0;
        
        if ($n>5) return;
        
        switch($n):
            case 0:
                $rBonus = $tAmount * 0.07;
                break;
            case 1:
                $rBonus = $tAmount * 0.03;
                break;
            case 2:
                $rBonus = $tAmount * 0.02;
                break;
            case 3:
                $rBonus = $tAmount * 0.01;
                break;
            case 4:
                $rBonus = $tAmount * 0.01;
                break;
            case 5:
                $rBonus = $tAmount * 0.01;
                break;
        endswitch;
            
        $sql = "SELECT pId FROM korisnici WHERE id = '" . $userID ."'";
        $res3 = $this->link->query($sql);
        if ($this->link->error) {
            $this->log_db_errors($this->link->error, $sql);
            return false;
        }
        $oParent = $res3->fetch_object();
        $parentID = $oParent->pId;
        
        $transaction_data = array(
            'uId' => $parentID, 
            'tAmount' => $rBonus,
            'tRefid' => $origID,
            'type' => 'Refferal Bonus', 
            'status' => 'Approved'
        );
        $database = $this->link->insert( 'transactions', $transaction_data );
        if ($this->link->error) {
            $this->log_db_errors($this->link->error, $database);
            return false;
        }
        
        $this->refBonus($parentID, $tAmount, $n + 1, $origID);
    }




Poenta je da svaki viši nivo dobije odredjenu sumu (procenat od originalne visine uplate $tAmount) i da ima i ID od novog korisnika (zbog pracenja) to je ovo $origID koji bi trebalo da se provlači kroz sve nivoe isto.

Ne znam da li je potrebno ali je ovo insert funkcija koja je iznad u istoj klasi

Code:

public function insert($table, $variables = array()) {
        self::$counter++;
        //Make sure the array isn't empty
        if (empty($variables)) {
            return false;
        }

        $sql = "INSERT INTO " . $table;
        $fields = array();
        $values = array();
        foreach ($variables as $field => $value) {
            $fields[] = $field;
            $values[] = "'" . $value . "'";
        }
        $fields = ' (' . implode(', ', $fields) . ')';
        $values = '(' . implode(', ', $values) . ')';

        $sql .= $fields . ' VALUES ' . $values;

        $query = $this->link->query($sql);

        if ($this->link->error) {
            //return false; 
            $this->log_db_errors($this->link->error, $sql);
            return false;
        } else {
            return true;
        }
    }




Ako ima ovde neki PHP-ovac da baci pogled gde sam napravio grešku, izvrteo sam dve tri varijante, ova mi deluje logično, ali ne znam da li je problem u semantici, logici ili čemu.

U svakom slučaju, hvala unapred.
Daedalus Outsourcing | Web Development | SEO | Instagram Followers - http://daedalus.co.rs
 
Odgovor na temu

dakipro
Dalibor Jovic
Web Developer
Bergen, Norway

Moderator
Član broj: 31848
Poruke: 1792
*.dd.nextgentel.com.

Sajt: norway.dakipro.com


+190 Profil

icon Re: Problem sa upisom u bazu kroz rekurzivnu funkciju u klasi05.09.2017. u 08:04 - pre 80 meseci
Ako krenes redom i debug-ujes kod, dokle stigne i sta nije ispravno?
Ako nekoristis nista sofisticiranije, mozes i obican exit("ovde"); da stavis liniju po liniju i tako pratis redosled izvrsenja koda, cisto da vidis da li kod prolazi kroz sve potrebne if-ove i else-ove.
Mozes i ispred exit da stavis var_dump($sql) recimo i vidis relevantne vrednosti
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
c-bg-d-p1-76.bvcom.net.



+1064 Profil

icon Re: Problem sa upisom u bazu kroz rekurzivnu funkciju u klasi05.09.2017. u 11:27 - pre 80 meseci
A da probas sa update? ;)
 
Odgovor na temu

Aleksandar Klickovic
Owner
Daedalus Outsourcing
Beograd

Član broj: 204183
Poruke: 344
*.dynamic.sbb.rs.

Sajt: petsq.me


+67 Profil

icon Re: Problem sa upisom u bazu kroz rekurzivnu funkciju u klasi06.09.2017. u 15:44 - pre 80 meseci
Da, probaću tako, korak po korak, nešto mora da izbaci... Ali već imam uključeno čekiranje sql, trebalo bi da mi pošalje email sa greškom, medjutim, nema greške, prodje sve ok

Branimire, ne mogu Update da radim, kad te transakcije ne postoje, tek treba da ih kreiram u tom koraku.
Daedalus Outsourcing | Web Development | SEO | Instagram Followers - http://daedalus.co.rs
 
Odgovor na temu

Aleksandar Klickovic
Owner
Daedalus Outsourcing
Beograd

Član broj: 204183
Poruke: 344
*.dynamic.sbb.rs.

Sajt: petsq.me


+67 Profil

icon Re: Problem sa upisom u bazu kroz rekurzivnu funkciju u klasi07.09.2017. u 00:08 - pre 80 meseci
Rešio sam, izvukao funkciju iz klase, ubacio direkt u proces registrovanja korisnika i radi fantazija.

Ukoliko nekom treba kod vezan za obračun tih referal provizija, može da iskoristi

Code:


/* Referal Bonus - 6 nivoa iznad */

/* Legenda pojmova */

 $newID                      /*  Id novokreiranog korisnika */
 $transAmount            /*   Cena/Vrednost/Investicija ili već koja suma za koju se računa procenat upLineu */
 $n                             /*   Uglavnom 0, brojač nivoa iznad novokreiranog korisnika */
 pId                            /*   Parent ID, (polje u tabeli) odnosno ID mentora/uplinea/osobe preko čijeg je linka novi korisnik došao */
 $oDbNew                   /*   Poziv neke db.class u principu konektor sa bazom i CRUD sistem */

                        function refBonus ($userID, $tAmount, $n, $origID){
                $oDbNew = DB::getInstance();
                $rBonus = 0;                
                if ($n>5) return;                
                switch($n):
                    case 0:
                        $rBonus = $tAmount * 0.07;
                        break;
                    case 1:
                        $rBonus = $tAmount * 0.03;
                        break;
                    case 2:
                        $rBonus = $tAmount * 0.02;
                        break;
                    case 3:
                        $rBonus = $tAmount * 0.01;
                        break;
                    case 4:
                        $rBonus = $tAmount * 0.01;
                        break;
                    case 5:
                        $rBonus = $tAmount * 0.01;
                        break;
                endswitch;
                    
                
                $sql = "SELECT pId FROM korisnici WHERE id = '" . $userID."'";
                list ($parentID) = $oDbNew->get_row($sql) or die('Error');                
                if($parentID){                                
                    $transaction_data = array(
                        'uId' => $parentID, 
                        'tAmount' => $rBonus,
                        'tRefid' => $origID,
                        'type' => 'Refferal Bonus', 
                        'status' => 'pending'
                    );
                    $database = $oDbNew->insert( 'transactions', $transaction_data ) or die('Error');                    
                    if($database){                        
                        refBonus($userID, $tAmount, $n + 1, $origID);
                    }
                }
            }
            
            refBonus($newID, $tAmount, 0, $newID);





Daedalus Outsourcing | Web Development | SEO | Instagram Followers - http://daedalus.co.rs
 
Odgovor na temu

[es] :: PHP :: Problem sa upisom u bazu kroz rekurzivnu funkciju u klasi

[ Pregleda: 7145 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.