从具有动态where条件的数据库中选择

时间:2013-09-11 18:56:16

标签: php jquery html mysql

在这种情况下,我使用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)); 
    }); 
}

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

例如,添加行时: Step 1

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

SELECT * from my_table_name WHERE id='123'

如果我用示例添加一个行参数: Step 2

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

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

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

我想在点击过程中的按钮后生成查询:

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结果中获取数据键和值,以便以后输入我的查询?

1 个答案:

答案 0 :(得分:0)

你几乎就在那里,你只需要稍微改变你的循环。

$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返回的是数据库中字段的名称。

作为一项额外的练习,我强烈建议您查看数据库实现是否可以使用预准备语句。它们更加安全。