Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

Problem sa upisom u bazu kroz rekurzivnu funkciju u klasi

  • 4 odgovora
  • 7.920 pregleda

Najnovija ↓

Problem sa upisom u bazu kroz rekurzivnu funkciju u klasi 05.09.2017. u 05:39 · pre 111 meseci #1
Ć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.
Potpis
Daedalus Outsourcing | Web Development | SEO | Instagram Followers - http://daedalus.co.rs
Re: Problem sa upisom u bazu kroz rekurzivnu funkciju u klasi 05.09.2017. u 09:04 · pre 111 meseci #2
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
Potpis
http://norway.dakipro.com/
Re: Problem sa upisom u bazu kroz rekurzivnu funkciju u klasi 06.09.2017. u 16:44 · pre 111 meseci #4
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.
Potpis
Daedalus Outsourcing | Web Development | SEO | Instagram Followers - http://daedalus.co.rs
Re: Problem sa upisom u bazu kroz rekurzivnu funkciju u klasi 07.09.2017. u 01:08 · pre 111 meseci #5
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);




Potpis
Daedalus Outsourcing | Web Development | SEO | Instagram Followers - http://daedalus.co.rs
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme