Javascript/PHP/Jquery - 自动填充和数据加密

Posted

技术标签:

【中文标题】Javascript/PHP/Jquery - 自动填充和数据加密【英文标题】:Javascript/PHP/Jquery - Autofill and Data Encryption 【发布时间】:2015-01-03 09:39:51 【问题描述】:

我正在寻找更好的自动完成功能/处理方法或从源视图对特定数据进行编码的方法。

我有一个包含客户信息的 mysql 数据库:

 Record | CompanyName | StreetAddress | City | State | Zip   | Telephone
------------------------------------------------------------------------------
    1   |  Eatery     |  123 Main St  |  NYC |   NY  | 10001 |  000-000-0000
------------------------------------------------------------------------------    
    2   |  Jo's Gym   |  456 2nd St   |  NYC |   NY  | 10001 | 000-000-0000
-------------------------------------------------------------------------------
etc....

然后我有一个搜索页面来搜索客户。此搜索页面有一个文本输入框,用于将所有 CompanyName 抓取到一个数组中:

while( $row = $results->fetch_assoc() )

    array_push($customerArray,$row['companyname']);

然后我使用位于此处的 jquery 自动完成功能 (http://jqueryui.com/autocomplete/)

<script>
    $(function() 
        availableTags = <?php echo json_encode($customerArray); ?>;
        $( "#customername" ).autocomplete(
            source: availableTags
        );
    );
</script>

通过自动完成我的输入框可以正常工作

<label for="customername">Customer Name: </label>
<input type="text" name="companyname" id="customername" size="30">
<span id="customernamespan"></span>

所以一切都很好。我什至有 javascript 验证以确保输入的客户在列表中

我的以下问题是 5000+ CustomerName 现在位于一个数组中,所有检查源代码的人都可以看到。

有什么方法可以隐藏这些信息,或者有更好的自动完成方法吗?


我认为处理此问题的唯一真正方法是让中间页面验证客户名称并回显“最佳猜测”。

addnotes.php 将有字段,CustomerName 将是常规文本输入框。

checkCustomer.php 将在 $_POST 中包含所有数据,并在 MySQL 数据库中查询 CustomerName LIKE %token%token% 并使用带有“您的意思是这个”标题的单选按钮回显。如果是他们中的任何一个,那么他们可以选择名称或单击添加新客户。

如果点击名称,则将 $_POST 传递给 handleaddnotes.php 并使用 inserts 和 yada yada 完成我的工作

如果是新客户,将 $_POST 传递给 createCustomer.php 并创建新客户,然后处理原始的 addnotes $_POST

--

谢谢, 埃赫尔

【问题讨论】:

建议您可以使用 AJAX 进行检查,因此它将结果限制为 PHP 返回的内容并且调用是异步的 【参考方案1】:

在这些情况下,我所做的是等到用户在输入中键入 3 个或更多字符,然后启动一个 ajax 请求来检索与第一个字符匹配的记录列表...

<input type="text" name="companyname" id="customername" size="30" onchange="autofill(this.value);">



<script type = "text/javascript">
   function autofill(text)
      if ( text.length < 3 ) return;
      else  ajax.post("get_customers.php", data:text, function(response)
          $( "#customername" ).autocomplete(
            source: response.availableTags
        );
      );
   
</script>

希望对你有帮助

【讨论】:

【参考方案2】:

我认为您的问题可能更多是关于可用性而不是代码。

    如果您对自动完成数据进行加密,您的用户将如何使用自动完成功能? 如果您使用 LIKE 解决方案来解决问题,键入“a”并要求后端为您检索选项将陷入几乎相同的问题。 如果您的用户看不到您的自动填充数据,那么自动填充可能不是您想要的。

尝试重新验证您的目标:

    您的真正目标是什么? 为什么您的用户必须选择一个选项? 此数据更重要的是什么?安全性还是可用性? 您的用户还有其他方法可以在您的软件中获取所有客户的姓名吗?

【讨论】:

以上是关于Javascript/PHP/Jquery - 自动填充和数据加密的主要内容,如果未能解决你的问题,请参考以下文章

关于自相关和偏自相关截尾的判定

自定义UI 自定义布局

自定义UI 自定义布局

自定义UI 自定义布局

自定义UI 自定义布局

自定义 view - 自定义属性