【问题标题】:Select from database with dynamic where condition从具有动态 where 条件的数据库中选择
【发布时间】:2013-09-15 22:42:00
【问题描述】:

在这种情况下,我用jquery附加机制做了一行来获取我将在数据搜索中使用的参数。

$(document).ready(function() {
    DataProvide();
    ManipulationHere();

    $('table').delegate('input[type=text].onlyDate', 'focusin', function(event) {
        $(this).datepicker({
            dateFormat: "yy-mm-dd",
            changeMonth: true,
            changeYear: true,
            yearRange: '1972:2020',
        });
    });

    $('table').delegate('input[type=text].onlyMonth', 'focusin', function(event) {
        $(this).monthpicker();
    });

}); //Tutup Document Ready


function ManipulationHere(){

var count = 1;
$(".button").click(function(){
    count += 1;
    var $row = $('<tr>' 
    + '<td>' + '</td>'
        + '<td>' + '<input id="data2_' + count + '" type="text" name="data2_' + count + '" class="data2" />' + '</td>'
        + '<td>' + '<input id="rows_' + count + '" name="rows[]" value="'+ count +'" type="hidden">'
        + '<a href="javascript:void(0);" class="remCF">Remove</a>' + '</td>'
    + '</tr>').appendTo("#customFields");
    var copyData = $("#data1_1").clone();
    var repID = copyData.attr('id', 'data1_' + count + '');
    var repName = copyData.attr('name', 'data1_' + count + '');

    $row.find('td:first').append(repID)
    var check = $row.find('td:first').html();
    var get = $(check).attr('id')
});

    $("#customFields").on('click','.remCF',function(){
        $(this).parent().parent().remove();
        count -= 1;
    });

    $("#customFields").on('change', '.tabelBaru', function() {

        var validator = $("#signupForm").validate();
        validator.resetForm();

        var $this = $(this),
        nilai = $this.val();
        console.log(nilai);

        if(nilai=='gender'){
            $this.closest("tr").find(".data2").replaceWith(
                '<select name="data2_' + count + '" class="data2">'
                    + '<option value="man" selected >Man</option>'
                    + '<option value="woman">Woman</option>'
                + '</select>'
            )
        }
        else if(nilai=='religion'){
            $this.closest("tr").find(".data2").replaceWith(
                '<select name="data2[]" class="data2">'
                    + '<option value="protestan" selected >Protestan</option>'
                    + '<option value="khatolik">Khatolik</option>'
                    + '<option value="islam">Islam</option>'
                    + '<option value="budha">Budha</option>'
                    + '<option value="hindu">Hindu</option>'
                + '</select>'
            )
        }
        else if(nilai=='blood'){
            $this.closest("tr").find(".data2").replaceWith(
                '<select name="data2_' + count + '" class="data2">'
                    + '<option value="gol_a" selected >A</option>'
                    + '<option value="gol_b">B</option>'
                    + '<option value="gol_ab">AB</option>'
                    + '<option value="gol_o">O</option>'
                + '</select>'
            )
        }
        else if(nilai=='birth_date'){
            $this.closest("tr").find(".data2").replaceWith(
                '<input type="text" id="data2_' + count + '" name="data2_' + count + '" value="" placeholder="Date Format" class="onlyDate"/>'
            )
        }
        else if(nilai=='start_date'){
            $this.closest("tr").find(".data2").replaceWith(
                '<input type="text" id="data2_' + count + '" name="data2_' + count + '" value="" placeholder="Date Format" class="onlyDate"/>'
            )
        }
        else if(nilai=='end_date'){
            $this.closest("tr").find(".data2").replaceWith(
                '<input type="text" id="data2_' + count + '" name="data2_' + count + '" value="" placeholder="Date Format" class="onlyDate"/>'
            )
        }
        else if(nilai=='join_date'){
            $this.closest("tr").find(".data2").replaceWith(
                '<input type="text" id="data2_' + count + '" name="data2_' + count + '" value="" placeholder="Date Format" class="onlyDate"/>'
            )
        }
        else if(nilai=='los_month'){
            $this.closest("tr").find(".data2").replaceWith(
                '<input type="text" id="data2_' + count + '" name="data2_' + count + '" value="" placeholder="Month Format" class="onlyMonth"/>'
            )
        }
        else{
            $this.closest("tr").find(".onlyDate").replaceWith(
                '<input type="text" id="data2_' + count + '" name="data2_' + count + '" value="" class="data2"/>'
            )
        }

    });
}


function DataProvide(){
    selectValues = { 
        "pilih"         : "-Pilih-",
        "id"            : "ID",
        "emp_name"      : "Employee Name",
        "photo_path"    : "Photo Path",
        "emp_id"        : "Employee ID",
        "birth_place"   : "Birth Place",
        "birth_date"    : "Birth Date",
        "age"           : "Age",
        "gender"        : "Gender",
        "religion"      : "Religion",
    };

    $.each(selectValues, function(key, value) {   
         $('#data1_1')
             .append($("<option></option>")
             .attr("value",key)
             .text(value)); 
    }); 
}

以上过程的结果,我有一行将作为参数。

例如,当添加一行时:

我想创建SAVE过程后生成的查询是:

SELECT * from my_table_name WHERE id='123'

如果我再添加一个带有示例的行参数:

我想创建 SAVE 过程后生成的查询是:

SELECT * from my_table_name WHERE id='123' and employee_name='Testing'

如果我想通过添加第三行来添加另一个参数搜索:

我要查询的是点击按钮后生成的过程是:

SELECT * from my_table_name WHERE id='123' and employee_name='Testing' and employee_id='111'

我做了一个函数来尝试从表单POST结果中读取数据,如下所示:

    $Query = "SELECT * from my_table_name WHERE ....... << from looping"
    foreach ($_POST['rows'] as $key => $count ){
            $Data1  = $_POST['data1_'.$count];
            $Data2  = $_POST['data2_'.$count];
            echo $Data1." >> ".$Data2;
            echo "<br>";
    }

如何从 POST 结果中获取数据键和值以供以后输入到我的查询中?

【问题讨论】:

  • 你从echo $Data1. " &gt;&gt; " . $Data2;得到的实际输出是什么?
  • @JustinWood 在我的例子中:id >> 123 emp_name >> Testing emp_id >> 111 这只是作为一个例子,看看我是否成功获取数据

标签: php jquery html mysql


【解决方案1】:

你快到了,你只需要稍微改变你的循环。

$query = "SELECT * from my_table_name WHERE ";

$first = true;

foreach ($_POST['rows'] as $key => $count ) {
    $field = $_POST['data1_' . $count];
    $value = $_POST['data2_' . $count];

    if ($first) {
        $query .= $field . " = '" . $value . "'";
        $first = false;
    } else {
        $query .= " AND " . $field . " = '" . $value . "'";
    }
}

请记住,这仅在您提交至少一项要查询的项目时才有效。

这也假设您从$field 得到的返回的是数据库中字段的名称。

作为一个额外的练习,我强烈建议你看看你的数据库实现是否可以使用准备好的语句。它们明显更安全。

【讨论】:

  • 谢谢贾斯汀...但是如何构造一个将被调用到数据库的查询呢?我尝试过但总是失败......我正在使用 Yii (DAO) 进行此搜索
  • @JustinWood 当有多个 where 语句时,您不需要在查询中添加“AND”。你不能只拥有id='123' employee_name='Testing',你需要一个AND
  • @amaster507 是的,你说得对。没有命令AND来组合参数
  • @amaster507 哇,我不敢相信我忘记了。感谢您指出。
  • @BerthoJoris 我不确定你的意思。查询正在那里构建。您是在问如何实际执行所述查询?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-11
相关资源
最近更新 更多