tablo gayet işlevsel gözüküyor. bir tabloya bakıp gerçekleşecek işlemlerin tamamını kafamda canlandıramadığımdan bir önerim yok. dükkan ile takip gereksiz gibi duruyor, dükkanı zaten ne işe yaradığını da anlamadım. takip tablosuna gelirsek, ikincil değerin müşteri id olduğunu görüyorum, burada her müşteri için bir kez takip olayı gerçekleşecek ise müşteri tablosu ile birleştirmen daha mantıklı. hayır bir müşteriye birden fazla takip uyguluyoruz diyorsan, bu şekilde olabilir.
taksit sorusunu hiç anlamadım. paytr ile çalışıyorum ben, ödeme ve taksitlerden onlar sorumlu, komisyon alıyorlar sadece. siz kredi kartına yaptığınız taksitleri online değilde elden mi alıyorsunuz, elden alıyorsanız 3 taksit yapıldığında 3 kere iş yerinize gelip tek tek mi ödüyor taksitleri anlamadım ki.
elden ve kartsız işlemlerde taksit girdisi için sipariş tablosu şöyle olabilir fiyat, taksit, ödenen,
ürün fiyatı sabit olduğu için, değeri ürün tablosundan alıyorsun zaten. sipariş oluşturulur taksit tutarı belirtilir, ilk ödeme kaydedilir
fiyat 1500, taksit 3, ödeme yok diyelim
$taksitler = explode(",", $taksit); // taksitler 3,0 şeklinde kayıt edilir, 3 taksit tutarı virgülden sonrası kalan taksit için hesaplama değeri
$taksittutari = ($fiyat / $taksitler[0]); //taksit için ne kadar ödeceğini verir
$kalanodeme = ($fiyat - $odenen); //kalan borcu verir
$yeniodeme = ($odenen + $odeme); //yeni ödeme esnasında, yapılan ödeme miktarını mevcut ödenen tutara ekleyerek yeni bir ödenen miktarı oluşturur örneğin 150 verdi 150 daha verdi 300 odenen oldu veritabanını güncelledin bu değer ile
$kalantaksit = ($taksitler[0] - $taksitler[1]);
$kalantaksitguncelle = ($taksit + 0.1);
bu değişkenleri oluşturduktan sonra veriyi istenilen formatta ekrana basabilir ve $kalantaksitguncelle, $yeniodeme değişkenleriyle veritabanında gerekli yerleri güncelleyerek girdi oluşturabilirsin
formülü üretcem diye baya vakit harcadım ya. veritabanıda "detayda belirttiğin gibi satıştaki tasit sayasına göre girdi" oluşturmayı en kısa böyle yapabilirsin ne avatajı oldu 100 sipariş için 12 taksit uygulasanız fazladan 1 tablo ve içerisinde 1200 değer olacaktı bundan kurtuldunuz
- taksitte ne kadar ödendi hangi tarihte ödendi gibi bilgileri ayırmak istiyorsanda oda farklı bir konu sonuçta detayda taksit sayısına göre ayrı ayrı girdi oluşturmak istiyorum dememişsiniz.
az çok bir şeyler canlanıyor insanın kafasında tablolara bakınca ama, siz kendi ihtiyacınıza uygun yaptığınız ve kendi anlayacağınız şekilde isimlendirdiğinizden, ilk bakışta sizin kadar tablo ve kolonları birbirleriyle sizin kadar iyi kurgulayamayız.
öncelikle int değerleri 11 karakter olmaz. int eksi ve + milyar değerine kadar sayı tutar bu da 10 karaktere denk gelir ve sayısal değerler tamsayıdır. örneğin bir telefon numarasını başında 0 ile post ettiğinizde, veritabanına farklı bir değer kaydeder. 0 olmadan post ettiğinizde telefon numarasını normal kaydeder. bu yüzden önce veri türünüzü doğru seçin. int 11 diye bir şey yok kısacası.
tarih verilerinide timestamp olarak vermenizi öneririm, ayrıca varsayılanı current yaparsanız daha az kod yazarsınız geçerli zamana ait tarihi kaydedeceği için. bu tarz sistemlerde tarih tek başına yeterli değildir, bazen saate de ihtiyac duyarsınız date ile saat kaydedemezsiniz. curent kullanımında php tarafında işlemin gerçekleşeceği sayfada zaman dilimi belirtmez iseniz, bilgisayarın tarih ve saatini alır. bilgisayarın tarih ve saati hatalıysa, girdi de hatalı olur.
yapıya gelirsek, o konuda bi tavsiye veremiyorum, kalın kafalıyım galiba biraz geç anlıyorum : ) ama soracağınız bir şeyi daha detaylı açıklarsanız, anladığım kadarıyla bildiğimde bir şey varsa yardımcı olmaya çalışırım.
yukarıdaki yapı zaten istediğin şeyi karşılıyor 2 farklı tablo önermemem, sistemin nasıl işleyeceğini bilmediğimden kaynaklanıyor. okul yönetim sistemi gibi bir şey hazırlıyorsan öğretmenler ve öğrenciler gibi iki farklı tablo yapıp yetkileri burada tutabilirsin.
forum mantığı üzerinden bir önek vereyim.
if(($_SESSION['yetki'] == $admin && $_SESSION['yetki'] == $supermoderator) || (($_SESSION['yetki'] == $moderator)){
//bir konu olduğunu varsayalım
if($admin){ echo '<button>konuyu sil</button>';}else{echo 'işlem gerçekleştirmek için yetkini yok';}
}
ikinci örnek ise belki daha kullanışlı olabilir post ettiğin sayfa bir sql koşulu eklersin örneğin "selec * from kullanicilar where yetki="'.$_SESSION['yetki'].'"
yani konuyu butona uygulamak çok mantıklı değil, sayfayı göstermek için yetkileri kullanmak, daha sonrasında işlem sayfasında bunu uygulamak da seçenekler arasında session yönetmeyi zaten biliyorsun koşulda yazabiliyorsun gerisi senin mantığına kalıyor bazen düşünmek yazmaktan vakit alıyor o ayrı tabi : ) olabildiğince basitten başla üstüne koyarak ilerle o zaman daha kolay olur, sonra bir framework kullanara mevcut projeyi tekrar elden geçir oraya entegre et
<?php
if(isset($_POST['content_add'])){
//$uploads_dir="../../assets/uploads/content";
$query = $db->prepare("INSERT INTO content SET
c_title = ?,
c_title_en = ?,
c_description = ?,
c_description_en = ?,
c_date = ? ");
$insert = $query->execute(array(
$_POST['c_title'],
$_POST['c_title_en'],
$_POST['c_description'],
$_POST['c_description_en'],
$_POST['c_date']
));
if ( $insert ){
$last_id = $db->lastInsertId();
}
}
koşulun içini istediğin gibi doldur
öncelikle ben böyle bir yapının gerçekleştirilecek işlem ve koşulların sayısını arttıracağını düşünerek, tablo yapısını değiştirmeni önererek başlıyorum ve anlatımı da bu öneri üzerinden gerçekleştirmek istiyorum.
önce mantığı biraz daha iyi kavramak için, kendine bir yol haritası çıkartmalısın. kaç kullanıcı grubu olacak, bunları diğerlerinden ayırt eden nitelikler ne?
eğer yapı basit ise tek tablo işini çözecektir. ben bütün tablolarımda dizine bir txt dosyası açarak, hangi kolonun değerinin ne anlama geldiğinide ayrıca not ederim, ki ileride kafa karışıklığı olmasın, örneğin 0 kapalı, 1 aktif, 2 yasaklı gibi bir değer atıyorsun, mutları ileride hatırlamayabilirsin mutlaka not et. kullanıcılar(0 aktif, 1 kapalı, 2 yasaklı) gibi bir not ileride hayatını kurtarır.
yapıya gelirsek;
senin kullandığın biçimde değil, önerim ile örneklendireceğim. kullanıclar adında bir tablomuz olsun
id, isim, yetki
en basit durumda bu üçü bile işini çözecektir. nasıl çözecektir? : ) önemli olan sayfanın içerisinde nasıl koşullandırdığın, eğer bir sayfa farklı yetki gruplarında kişiler aynı anda girebiliyorsa if($_SESSION["yetki"] == 0){} gibi basit bir koşul ile sayfayı yazdırabilirsin veya sadece bir grubun yetkisi yok ise, burada operatör devreye girer, eşittir yerine şöyle olabilir >=2 bu ikiye eşit ve ikiden büyük yetkiye sahip kişilerce çalışacak bir kod betiği için kullanılabilir
biraz daha geliştirmek istedik. okuma, yazma ve görüntüleme vs. için ayrı ayrı yetkiler vereceğiz diyelim. o zaman tablo yapımız aşağıdaki gibi olursa daha mantıklı olacaktır;
id, isim, yetki, okuma, yazma,
örneğin aynı yetkiye sahip bir grup içerisinde iki adminden birine sadece yazma yetkisi vermek istiyorsun, yine yukarıdaki mantıkla işlem gerçekleştirebiliyorsun. sadece koşulun biraz uzuyor.
session kontrolü yaptıracaksın eğer session yok ise misafir kullanıcılar için çerez atayacaksın tamamemen if ve else ile mantığa uygun koşullar yazmana dayalı yani
$uye(bu değişken sesionu temsil ediyor olsun) ve $misafir adında iki değişkenin var diyelim
if(isset($uye)){yukarıadaki çerez kodları}else{$misaifr = setcookie... if(yine çerezler)} gibi... kısacası var mı, yok mu, varsa ne olacak, yoksa ne olacak mantığı üzerinden gitmelisin.
sen bunu sorunca fark ettim çerezi yanlış tanımlamışsın zaten, değer yok.
$_GET['UrunID'] = 22;
if(@$_COOKIE['GoruntulenenUrunID'.$_GET['UrunID'].''] ===true){}else{setcookie('GoruntulenenUrunID'.$_GET['UrunID'].'', $_GET['UrunID'], strtotime('+1 day'));}
echo $_COOKIE['GoruntulenenUrunID'.$_GET['UrunID'].''];
if(isset($_COOKIE['GoruntulenenUrunID'])){}else{setcookie('GoruntulenenUrunID['.$_GET['UrunID'].']', strtotime('+1 day'));} böyle daha kısa oldu
include "mail/class.phpmailer.php";
$mail = new PHPMailer;
$mail->IsSMTP(); // Set mailer to use SMTP
$mail->Host = 'mail..online'; // Specify main and backup server
$mail->Port = 465; // Set the SMTP port
$mail->SMTPAuth = true; // Enable SMTP authentication
$mail->Username = '[email protected]'; // SMTP username
$mail->Password = ''; // SMTP password
$mail->SMTPSecure = 'ssl'; // Enable encryption, 'ssl' also accepted
$mail->From = '[email protected]';
$mail->FromName = 'Ali ';
$mail->AddAddress('@gmail.com', 'Ali'); // Add a recipient // Name is optional
$mail->IsHTML(true); // Set email format to HTML
$mail->CharSet = 'UTF-8';
$mail->AddAttachment('veritabaniyedek.zip');
$mail->Subject = 'Here is the subject';
$mail->Body = 'This is the HTML message body <strong>in bold!</strong>';
$mail->AltBody = 'This is the body in plain text for non-HTML mail clients';
if(!$mail->Send()) {
echo 'Message could not be sent.';
echo 'Mailer Error: ' . $mail->ErrorInfo;
exit;
}
bu benim kullandığım mail sınıfı veritabanı yedeğini göndermek için kullanıyorum sadece dosya ekleyip çalışıyor yani kullanıcı bilgilerini düzenleyip dene bir
if(çerez adı === true){ }else{ setcookie('GoruntulenenUrunID['.$_GET['UrunID'].']', strtotime('+1 day')); }
çerez varsa bir işlem gerçekleştirmiyor çerez yok ise çerez tanımlıyor