• 12-04-2025, 17:46:20
    #1
    Merhaba,
    Aşağıdaki kod ile veritabanına kayıt işlemlerini doğru şekilde yapıyor ama ilgili prosedürler sonlanmıyor, hata da vermiyor.
    Bakabilirseniz sevinirim.

    <?php
    if($_POST){
        $name     = post('name');
        $phone    = post('phone');
        $note     = post('note');
        $address  = post('address');
        $payment  = post('payment');
        $code     = uniqid();
        if(!$name || !$phone || !$address || !$payment){
            echo 'empty';
        }else{
            $carttotal    = $db->prepare("SELECT SUM(toplamfiyat) as toplam FROM sepet WHERE sepetbayi=:b");
            $carttotal->execute([':b' => $bcode]);
            $carttotalrow = $carttotal->fetch(PDO::FETCH_OBJ);
    
            // ücretsiz kargolimit TL
            $kargolim  = $db->prepare("SELECT * FROM ayarlar WHERE sitekargo");
            $kargolim->execute();
                if ($kargolim->rowCount()) {
                    $row = $kargolim->fetch(PDO::FETCH_OBJ);
                    $kargolimit = $row->sitekargo;
                    echo ($kargolimit);
                }
            // ücretsiz kargolimit TL
    
            // sepetteki ürünlerin toplam ağırlığı kg
            $carttotalkg  = $db->prepare("SELECT SUM(toplamkg) as toplamkg FROM sepet WHERE sepetbayi=:b");
            $carttotalkg->execute([':b' => $bcode]);
            $carttotalkgrow = $carttotalkg->fetch(PDO::FETCH_OBJ);
            $carttopkg = $carttotalkgrow->toplamkg;
            // sepetteki ürünlerin toplam ağırlığı kg
    
            // sepetteki ürünlerin toplam kargo TL
            $kargo1 = $db->query("SELECT MAX(kargokg) FROM kargo WHERE kargokg<='{$carttopkg}'")->fetch(PDO::FETCH_ASSOC);
            foreach($kargo1 as $kargo1){
            $kargo2 = $kargo1."";
            }
            $kargoTL  = $db->prepare("SELECT * FROM kargo WHERE kargokg=$kargo2");
            $kargoTL->execute();
                if ($kargoTL->rowCount()) {
                    $row = $kargoTL->fetch(PDO::FETCH_OBJ);
                    $kargotopTL = $row->kargofiyat;
                }
            // sepetteki ürünlerin toplam kargo TL
    
            if ($carttotalrow->toplam >= $kargolimit){
                $kargoP = "0";
            }else{
                $kargoP = $kargotopTL;
            }
    
            $result = $db->prepare("INSERT INTO siparisler SET
                siparisbayi     =:b,
                siparisisim     =:i,
                siparistel      =:t,
                siparistarih    =:ta,
                siparissaat     =:sa,
                siparisnot      =:note,
                siparistutar    =:sip,
                sipariskg       =:skg,
                sipariskgtl     =:stl,
                siparisodeme    =:od,
                sipariskodu     =:code,
                siparisadres    =:ad
            ");
            $result->execute([
                ':b'    => $bcode,
                ':i'    => $name,
                ':t'    => $phone,
                ':ta'   => date('Y-m-d'),
                ':sa'   => date('H:i'),
                ':note' => $note,
                ':sip'  => $carttotalrow->toplam + $kargoP,
                ':skg'  => $carttopkg,
                ':stl'  => $kargoP,
                ':od'   => $payment,
                ':code' => $code,
                ':ad'   => $address
            ]);
            if($result->rowCount()){
    
                $cart = $db->prepare("SELECT * FROM sepet INNER JOIN urunler ON urunler.urunkodu = sepet.sepeturun WHERE sepetbayi=:b");
                $cart->execute([':b' => $bcode]);
                if($cart->rowCount()){
                    foreach($cart as $ca){
                        $orderproducts = $db->prepare("INSERT INTO siparis_urunler SET
                            sipkodu    =:s,
                            sipurun    =:u,
                            sipbirim   =:b,
                            sipadet    =:a,
                            siptoplam  =:t,
                            sipkg      =:k,
                            siptoplamkg=:tk,
                            sipurunadi =:ua
                        
                        ");
                        $orderproducts->execute([
                            ':s'   => $code,
                            ':u'   => $ca['sepeturun'],
                            ':b'   => $ca['birimfiyat'],
                            ':a'   => $ca['sepetadet'],
                            ':t'   => $ca['toplamfiyat'],
                            ':k'   => $ca['birimkg'],
                            ':tk'  => $ca['toplamkg'],
                            ':ua'  => $ca['urunbaslik']
                        ]);
                    }
                }
    
                $deletecart = $db->prepare("DELETE FROM sepet WHERE sepetbayi=:b");
                $deletecart->execute([':b' => $bcode]);
                echo 'ok';
    
            }else{
                echo 'error';
                //print_r($result->errorInfo());
            }
        }
    }
    ?>
  • 12-04-2025, 18:00:53
    #2
    Hata vermiyorsa bir şey null dönüyordur ondan dolayıdır muhtemelen o yüzden tablodan çektiğiniz verileri kontrol etmekte fayda var
  • 12-04-2025, 18:01:54
    #3
    <?php
    if ($_POST) {
        $name     = post('name');
        $phone    = post('phone');
        $note     = post('note');
        $address  = post('address');
        $payment  = post('payment');
        $code     = uniqid();
    
        if (!$name || !$phone || !$address || !$payment) {
            echo 'empty';
        } else {
            try {
                $db->beginTransaction();
    
                $carttotal = $db->prepare("SELECT SUM(toplamfiyat) as toplam FROM sepet WHERE sepetbayi=:b");
                $carttotal->execute([':b' => $bcode]);
                $carttotalrow = $carttotal->fetch(PDO::FETCH_OBJ);
    
                $kargolim = $db->prepare("SELECT sitekargo FROM ayarlar");
                $kargolim->execute();
                $kargorow = $kargolim->fetch(PDO::FETCH_OBJ);
                $kargolimit = $kargorow->sitekargo;
    
                $carttotalkg = $db->prepare("SELECT SUM(toplamkg) as toplamkg FROM sepet WHERE sepetbayi=:b");
                $carttotalkg->execute([':b' => $bcode]);
                $carttotalkgrow = $carttotalkg->fetch(PDO::FETCH_OBJ);
                $carttopkg = $carttotalkgrow->toplamkg;
    
                $kargo1 = $db->query("SELECT MAX(kargokg) as max_kargokg FROM kargo WHERE kargokg<='{$carttopkg}'")->fetch(PDO::FETCH_OBJ);
                $kargo2 = $kargo1->max_kargokg;
    
                $kargoTL = $db->prepare("SELECT kargofiyat FROM kargo WHERE kargokg=:kargo2");
                $kargoTL->execute([':kargo2' => $kargo2]);
                $kargorow = $kargoTL->fetch(PDO::FETCH_OBJ);
                $kargotopTL = isset($kargorow->kargofiyat) ? $kargorow->kargofiyat : 0;
    
                $kargoP = ($carttotalrow->toplam >= $kargolimit) ? 0 : $kargotopTL;
    
                $result = $db->prepare("INSERT INTO siparisler SET
                    siparisbayi     =:b,
                    siparisisim     =:i,
                    siparistel      =:t,
                    siparistarih    =:ta,
                    siparissaat     =:sa,
                    siparisnot      =:note,
                    siparistutar    =:sip,
                    sipariskg       =:skg,
                    sipariskgtl     =:stl,
                    siparisodeme    =:od,
                    sipariskodu     =:code,
                    siparisadres    =:ad
                ");
    
                $result->execute([
                    ':b'    => $bcode,
                    ':i'    => $name,
                    ':t'    => $phone,
                    ':ta'   => date('Y-m-d'),
                    ':sa'   => date('H:i'),
                    ':note' => $note,
                    ':sip'  => $carttotalrow->toplam + $kargoP,
                    ':skg'  => $carttopkg,
                    ':stl'  => $kargoP,
                    ':od'   => $payment,
                    ':code' => $code,
                    ':ad'   => $address
                ]);
    
                if ($result->rowCount()) {
                    $cart = $db->prepare("SELECT * FROM sepet INNER JOIN urunler ON urunler.urunkodu = sepet.sepeturun WHERE sepetbayi=:b");
                    $cart->execute([':b' => $bcode]);
    
                    if ($cart->rowCount()) {
                        foreach ($cart as $ca) {
                            $orderproducts = $db->prepare("INSERT INTO siparis_urunler SET
                                sipkodu    =:s,
                                sipurun    =:u,
                                sipbirim   =:b,
                                sipadet    =:a,
                                siptoplam  =:t,
                                sipkg      =:k,
                                siptoplamkg=:tk,
                                sipurunadi =:ua
                            ");
    
                            $orderproducts->execute([
                                ':s'   => $code,
                                ':u'   => $ca['sepeturun'],
                                ':b'   => $ca['birimfiyat'],
                                ':a'   => $ca['sepetadet'],
                                ':t'   => $ca['toplamfiyat'],
                                ':k'   => $ca['birimkg'],
                                ':tk'  => $ca['toplamkg'],
                                ':ua'  => $ca['urunbaslik']
                            ]);
                        }
                    }
    
                    $deletecart = $db->prepare("DELETE FROM sepet WHERE sepetbayi=:b");
                    $deletecart->execute([':b' => $bcode]);
    
                    echo 'ok';
                } else {
                    throw new Exception('Order insertion failed');
                }
    
                $db->commit();
            } catch (Exception $e) {
                $db->rollBack();
                error_log("Transaction failed: " . $e->getMessage());
                echo 'error';
            }
        }
    }
    ?>
    Şu hali ile bazı mantıksal ve operatör hataları, hesaplama sorunları düzeltilmiş ve istediğiniz sonucu verir hale gelmiş olması gerekiyor.
  • 12-04-2025, 18:05:39
    #4
    $bcode'u buraya atacağınız için kaldırmadıysanız sanırım sorun o ya, çünkü yukarıda bcode yokken execute ediyor
  • 12-04-2025, 18:29:09
    #5
    Srylius adlı üyeden alıntı: mesajı görüntüle
    <?php
    if ($_POST) {
        $name     = post('name');
        $phone    = post('phone');
        $note     = post('note');
        $address  = post('address');
        $payment  = post('payment');
        $code     = uniqid();
    
        if (!$name || !$phone || !$address || !$payment) {
            echo 'empty';
        } else {
            try {
                $db->beginTransaction();
    
                $carttotal = $db->prepare("SELECT SUM(toplamfiyat) as toplam FROM sepet WHERE sepetbayi=:b");
                $carttotal->execute([':b' => $bcode]);
                $carttotalrow = $carttotal->fetch(PDO::FETCH_OBJ);
    
                $kargolim = $db->prepare("SELECT sitekargo FROM ayarlar");
                $kargolim->execute();
                $kargorow = $kargolim->fetch(PDO::FETCH_OBJ);
                $kargolimit = $kargorow->sitekargo;
    
                $carttotalkg = $db->prepare("SELECT SUM(toplamkg) as toplamkg FROM sepet WHERE sepetbayi=:b");
                $carttotalkg->execute([':b' => $bcode]);
                $carttotalkgrow = $carttotalkg->fetch(PDO::FETCH_OBJ);
                $carttopkg = $carttotalkgrow->toplamkg;
    
                $kargo1 = $db->query("SELECT MAX(kargokg) as max_kargokg FROM kargo WHERE kargokg<='{$carttopkg}'")->fetch(PDO::FETCH_OBJ);
                $kargo2 = $kargo1->max_kargokg;
    
                $kargoTL = $db->prepare("SELECT kargofiyat FROM kargo WHERE kargokg=:kargo2");
                $kargoTL->execute([':kargo2' => $kargo2]);
                $kargorow = $kargoTL->fetch(PDO::FETCH_OBJ);
                $kargotopTL = isset($kargorow->kargofiyat) ? $kargorow->kargofiyat : 0;
    
                $kargoP = ($carttotalrow->toplam >= $kargolimit) ? 0 : $kargotopTL;
    
                $result = $db->prepare("INSERT INTO siparisler SET
                    siparisbayi     =:b,
                    siparisisim     =:i,
                    siparistel      =:t,
                    siparistarih    =:ta,
                    siparissaat     =:sa,
                    siparisnot      =:note,
                    siparistutar    =:sip,
                    sipariskg       =:skg,
                    sipariskgtl     =:stl,
                    siparisodeme    =:od,
                    sipariskodu     =:code,
                    siparisadres    =:ad
                ");
    
                $result->execute([
                    ':b'    => $bcode,
                    ':i'    => $name,
                    ':t'    => $phone,
                    ':ta'   => date('Y-m-d'),
                    ':sa'   => date('H:i'),
                    ':note' => $note,
                    ':sip'  => $carttotalrow->toplam + $kargoP,
                    ':skg'  => $carttopkg,
                    ':stl'  => $kargoP,
                    ':od'   => $payment,
                    ':code' => $code,
                    ':ad'   => $address
                ]);
    
                if ($result->rowCount()) {
                    $cart = $db->prepare("SELECT * FROM sepet INNER JOIN urunler ON urunler.urunkodu = sepet.sepeturun WHERE sepetbayi=:b");
                    $cart->execute([':b' => $bcode]);
    
                    if ($cart->rowCount()) {
                        foreach ($cart as $ca) {
                            $orderproducts = $db->prepare("INSERT INTO siparis_urunler SET
                                sipkodu    =:s,
                                sipurun    =:u,
                                sipbirim   =:b,
                                sipadet    =:a,
                                siptoplam  =:t,
                                sipkg      =:k,
                                siptoplamkg=:tk,
                                sipurunadi =:ua
                            ");
    
                            $orderproducts->execute([
                                ':s'   => $code,
                                ':u'   => $ca['sepeturun'],
                                ':b'   => $ca['birimfiyat'],
                                ':a'   => $ca['sepetadet'],
                                ':t'   => $ca['toplamfiyat'],
                                ':k'   => $ca['birimkg'],
                                ':tk'  => $ca['toplamkg'],
                                ':ua'  => $ca['urunbaslik']
                            ]);
                        }
                    }
    
                    $deletecart = $db->prepare("DELETE FROM sepet WHERE sepetbayi=:b");
                    $deletecart->execute([':b' => $bcode]);
    
                    echo 'ok';
                } else {
                    throw new Exception('Order insertion failed');
                }
    
                $db->commit();
            } catch (Exception $e) {
                $db->rollBack();
                error_log("Transaction failed: " . $e->getMessage());
                echo 'error';
            }
        }
    }
    ?>
    Şu hali ile bazı mantıksal ve operatör hataları, hesaplama sorunları düzeltilmiş ve istediğiniz sonucu verir hale gelmiş olması gerekiyor.
    Sayın Srylius yardımınız için çok teşekkür ederim, php de yeniyim öğrenmeye çalışıyorum, düzgün olarak çalışıyor saygılarımla.