• 23-01-2017, 16:32:57
    #1
    Merhabalar;

    Sitemin firmalar bölümünde 2 tane select form var bunun birisi konum diğeri sektör. Firmalar sayfasına kullanıcı girince:
    $sql=$db->prepare("select * from firma");
    $sql->execute();
    while ($firma=$sql->fetch(PDO::FETCH_ASSOC)) {
      echo "<div><h2>".$firma['baslik']."</h2><p>".$firma['aciklama']."</p></div>";
    }
    kodu ile rastgele firmaları listeliyorum. select formdan kullanıcı sektor seçerse if bloğu içerisinde isset ile $_POST['sektor'] şeklinde kontrol ederek mi yapmam gerekiyor? firmaları filtreleyerek çekmenin başka bir yolu var mı acaba. isset ile if bloğu içinde yapmak istememin sebebi ise çok fazla if bloğu oluşuyor.
  • 23-01-2017, 18:06:54
    #2
    Merhaba,

    2 yolu var birisi direkt SQL query inize yazarsınız. Diğeride bindValue ile pdo ya işlem yaptırırsınız.

    Ben size sizin kullanacağınız basit yöntemi yazacağım.

    Aslında normal standart query yazıyorsunuz PDO sizi aldatmasın. eğer bindValue kullansaydınız farklı olacaktı.

    $sektor = $_POST['sektor']; // Burada tabiki gelen veriyi saldırılara karşı temizlemeniz gerekiyor varsa fonksiyon ona sokarsınız.
    $sql=$db->prepare("select * from firma WHERE sektor='$sektor'");
    $sql->execute();
    while ($firma=$sql->fetch(PDO::FETCH_ASSOC)) {
      echo "<div><h2>".$firma['baslik']."</h2><p>".$firma['aciklama']."</p></div>";
    }
  • 23-01-2017, 23:14:23
    #3
    MesutEyrice adlı üyeden alıntı: mesajı görüntüle
    Merhaba,

    2 yolu var birisi direkt SQL query inize yazarsınız. Diğeride bindValue ile pdo ya işlem yaptırırsınız.

    Ben size sizin kullanacağınız basit yöntemi yazacağım.

    Aslında normal standart query yazıyorsunuz PDO sizi aldatmasın. eğer bindValue kullansaydınız farklı olacaktı.

    $sektor = $_POST['sektor']; // Burada tabiki gelen veriyi saldırılara karşı temizlemeniz gerekiyor varsa fonksiyon ona sokarsınız.
    $sql=$db->prepare("select * from firma WHERE sektor='$sektor'");
    $sql->execute();
    while ($firma=$sql->fetch(PDO::FETCH_ASSOC)) {
      echo "<div><h2>".$firma['baslik']."</h2><p>".$firma['aciklama']."</p></div>";
    }
    cvp için teşekkür ederim. yukarıda yazdığım kodlar normal queryden farkı yok biliyorum ama where kısmına sektor=?, il=? şeklinde yazıp executeye de post değişken lerini yazınca eger kullanıcı form ile filtreleme yapmamışsa sıkıntı çıkıyor yani suan html form da sektor ve il icin select form var bunda bile if ile tek tek yazsa 4 ayrı if blok oluyor kulanici formdan filtreleme yapmadiysa if sektor sectiyse elseif il sectiyse elseif hem soktor hem il sectiyse baska elseif busekilde yapsam yarin birgun baska bir filtreleme parametresi eklesem mesela sadece tlf nosu olan ilanlar isin icinde cikilmaz bir hal alıyor
  • 23-01-2017, 23:27:31
    #4
    Çoklu form verilerinden bilgi alınacağı zaman bir çok yöntemi var benim genelde kullandığım ve kullanımı duruma göre esneklik sağlayan bir durum var.

    Ben form dan gelen değerleride genelde array alıyorum.

    Mesela formda ki input veya select lerin name bölümlerini f[sektor], f[il] gibi array form isimleri oluşturuyorum. Böylelikle kontrolüm ve kullanımım basit oluyor.

    <select name="f[sektor]"> gibi

    Daha sonra post edildiğini düşünelim.

    $query[] = "id!=0"; // Formdan hiç bir veri gelmezse WHERE hata vermemesi için
    
    if($f = $_POST['f'])
    {
       if($f['sektor']) $query[] = "sektor='{$f['sektor']}'";
       if($f['il']) $query[] = "il='{$f['il']}'";
    // formdan gelen değerleri kontrol eder ve dolu ise WHERE sorgusuna girmesini sağlar 
    }
    
    // En son query olarak oluşturulan array dizisini WHERE e && ile sokuyoruz;
    $sql=$db->prepare("select * from firma WHERE ".implode(' && ',$query));
    $sql->execute();
    while ($firma=$sql->fetch(PDO::FETCH_ASSOC)) {
      echo "<div><h2>".$firma['baslik']."</h2><p>".$firma['aciklama']."</p></div>";
    }
    Yukarıdaki kodda umarım demek istediğimi anlatabilmişimdir.


    VeLi33 adlı üyeden alıntı: mesajı görüntüle
    cvp için teşekkür ederim. yukarıda yazdığım kodlar normal queryden farkı yok biliyorum ama where kısmına sektor=?, il=? şeklinde yazıp executeye de post değişken lerini yazınca eger kullanıcı form ile filtreleme yapmamışsa sıkıntı çıkıyor yani suan html form da sektor ve il icin select form var bunda bile if ile tek tek yazsa 4 ayrı if blok oluyor kulanici formdan filtreleme yapmadiysa if sektor sectiyse elseif il sectiyse elseif hem soktor hem il sectiyse baska elseif busekilde yapsam yarin birgun baska bir filtreleme parametresi eklesem mesela sadece tlf nosu olan ilanlar isin icinde cikilmaz bir hal alıyor