Mulitple dayalı dinamik sorgu değişkenleri GET (Refine Arama Formu)

3 Cevap php

Yani umarım, Ebay şu vea var ne yakın bir şey bir formu olacak bir 'Aramayı paneli oluşturmaya beni başlayabilirsiniz bir script bulmak için çalışıyor im.

Ben bu bir formu olacak ve GET yöntemi kullanılarak biliyorum ederken, birden çok params için bir url ayrıştırmak ve tüm dinamik sorgu güncelleyebilirsiniz bir komut dosyası bulamıyor.

Milyonda olmadan bunu yapmak için oldukça nasıl emin değil im ve bir ifadeler eğer. (Yaklaşık 10 ya da öylesine olası değişkenleri GET ama daha yakında bir şey olabilir.)

Yani ben bir basit gerekir:

  • foreach GET add WHERE field=GET[variable]

Eğer bildiğiniz herhangi yapılmış hazır komut?

3 Cevap

Bunu yapmak için bazı konserve komut bilmiyorum.

Ama kendiniz yazmak oldukça kolay.

<?PHP
    $valid_fields = array('field1','field2',...'fieldN');

    $where = "WHERE 1=1 ";

    foreach($valid_fields as $fname){
       if (! empty($_GET[$fname])){
          $where .= " AND $fname='" . mysql_real_escape_string($_GET[$fname]) ."'";
       }
    }

Bu kod sadece beklenen giriş değişkenleri üzerinde döngüler, ve onlar $ _GET, reklamları bir parametre olarak AND WHERE yan tümcesi geçirilen eğer.

Sonra sadece sorgunun sonunda (o olur ne olursa olsun) üzerine nerede $ çakmak:

$sql = 'SELECT * FROM some_table ' . $where;

Sütun adlarını gizlemek için örnek kod için düzenleyin:

<?PHP
//keys are parameter names in _GET, values are database column names.
$fieldmap = array(
'fname'=>'first_name',
'lname'=>'last_name'
);

$where = '1=1 ';

foreach($fieldmap as $get_name => $col_name){
  if (! empty($_GET[$get_name])){
    $where .= " AND $col_name = '" . mysql_real_escape_string($_GET[$get_name]) . "'";
  }
}
?>

Ben önümüzdeki PHP hakkında hiçbir şey biliyorum, ama (biraz aşağı kaydırın) alınıyor ve burada sorgu dizesini ayrıştırma hakkında bazı tartışma var:

http://us2.php.net/manual/en/reserved.variables.get.php

Muhtemelen GET parametreleri ayıklamak ve WHERE yan tümcesi oluşturmak için bunları kullanmak için orada bazı yararlı kodunu kaldırabilir. Ben veri modeli kurmak nasıl emin değilim, o yüzden bu konuda herhangi bir ayrıntılı tavsiyelerde değil - bir {[(0) ile sona kalmamak tüm girişleri sterilize olağan tavsiyesi yanında ]} ellerinizi.

Böyle bir şey mi?

<?php
$query = "SELECT [WHATEVER YOU'RE SELECTING] FROM your_table WHERE ";
$length = count($_GET);
$count = 0;
foreach($_GET as $key => $value){
    if($count <= $length){
        $query .= "$key='{$value}' OR ";
    }else{
        $query .= "$key='{$value}'";
    }

    $count++;
}
?>

Sorgu dizesi anahtar = 'değer' türü dizeleri ekleyerek $ _GET dizi boyunca bu döngü olacak. Eğer dizi aracılığıyla recursing bitirdiniz kez Sonra, tam sorgu dizesi ile ne istersen yapabilirsin.

Her zamanki gibi, sizin girişleri (strip_slashes, mysql_real_escape_string, vb) toplamak gibi standart sanitasyon işlevlerini kullanın