在提交时传递主键而不是属性

时间:2015-11-19 23:59:07

标签: javascript php jquery html mysql

我有一个输入标记,它接受一个调用AJAX的用户输入,从我的数据库中动态输出建议。问题是我想存储与该属性关联的主键。

当用户选择一个值时,我已经找到了将其设置为主键的方法;但我宁愿只在前端显示属性。基本上我正在考虑做的是使用选项标签并将值设置为主键,但在阅读了它的文档之后,看起来它看起来不会起作用。

HTML:

    <input type="text" id = "zip_id" class="tftextinput2" autocomplete = "off" name="zip" placeholder="Zip Code" onkeyup = "autocompleter()">
    <ul id = "zip_codes_list_id"></ul>

JS:

function autocompleter() 
{
    var min_length = 1; // min caracters to display the autocomplete
    var keyword = $('#zip_id').val();
    if (keyword.length >= min_length) {
        $.ajax({
            url: 'ajax_refresh.php',
            type: 'POST',
            data: {keyword:keyword},
            success:function(data){
                $('#zip_codes_list_id').show();
                $('#zip_codes_list_id').html(data);
            }
        });
    } else {
        $('#zip_codes_list_id').hide();
    }
}
// set_item : this function will be executed when we select an item
function set_item(item) 
{
    // change input value
    $('#zip_id').val(item);
    // hide proposition list
    $('#zip_codes_list_id').hide();
}

PHP:

<?php
    //connect to db here
    $keyword = '%'.$_POST['keyword'].'%';
    $sql = "SELECT * FROM zip_codes WHERE zip LIKE (:keyword) ORDER BY zip_codes_id ASC LIMIT 0, 10";
    $query = $pdo->prepare($sql);
    $query->bindParam(':keyword', $keyword, PDO::PARAM_STR);
    $query->execute();
    $list = $query->fetchAll();
    foreach ($list as $rs) 
    {
        // put in bold the written text
        $zip = str_replace($_POST['keyword'], '<b>'.$_POST['keyword'].'</b>', $rs['zip']);
        // add new option
        // echo '<li onclick="set_item(\''.str_replace("'", "\'", $rs['zip']).'\')">'.$zip.'</li>'; (this one only passes the attribute)
        echo '<li " onclick="set_item(\''.str_replace("'", "\'", $rs['zip_codes_id']).'\')">'.$zip.'</li>'; 
//this one passes the attribute but changes the displayed value to the primary key.
    }
?>

从PHP文件中可以看出,我要做的是传递主键值,但保持显示的值为属性。我不知道该怎么做。我应该使用UL标签吗?

1 个答案:

答案 0 :(得分:0)

您的代码中的问题是您尝试输入的zip_id值,但此输入包含zip字段值 - 我认为它是文本表示。您可以通过以下几种方式将zip_id保存在前端 - 将其存储在模型中(如果您使用的是某些MVC框架,但我认为并非如此)或者只需添加一个隐藏的输入字段:

<input type="hidden" id="actual_zip_id" name="zip_id">

function set_item(item) 
{
    // change input value
    $('#actual_zip_id').val(item);
    // hide proposition list
    $('#zip_codes_list_id').hide();
}

UPD

关于自动填充邮政编码的整个想法,它看起来很讨厌,正如Darren Gourley指出的那样(查看评论)。

所以你首先要用正则表达式验证它,然后像你那样做与数据库相关的逻辑:

$('#zip_id').on('change', function(){
  // your stuff
})

此致,亚历山大