2015-06-07 151 views
0

很多地方需要了解如何做到这一点,但我没有成功。从我输入的数据中填充多个输入字段

我有一个名为'callsign'的输入字段,当你键入它出去一个MySQL表,并根据你已经输入的内容返回建议。我想知道应该在输入字段中显示什么值,以便我可以选择其中的一个或继续输入。当我选择我想要的一个时,我也希望填写Fname字段,它也从MySQL返回,请参阅下面的XML。

我真的想学习如何做到这一点,但使用我只能理解的术语的长时间解释将不会像示例一样。帮帮我!

输入如下:

Call Sign: <input type='text' value='' placeholder='Search' id='cs1' style='text-transform:uppercase' autofocus onkeyup='showHint(this.value)'>&nbsp;&nbsp;Name: <Input type='text' name='Fname'style='text-transform:capitalize'> 

MySQL的是这样的:

<?php 
require_once "dbConnectDtls.php"; 
$q = $_REQUEST["q"]; 
$stmt = $db_found->prepare("SELECT DISTINCT callsign, Fname 
    FROM NetLog 
    WHERE recordID IN (SELECT max(recordID) 
    FROM NetLog 
    WHERE callsign LIKE ? GROUP BY callsign)"); 
$stmt->execute(array("$q%")); 
$result = $stmt->fetchAll(); 
print_r($result); 
?> 

运行上面有q = 'w'返回测试的MySQL的结果:

Array ([0] => Array ([callsign] => W0DLK [0] => W0DLK [Fname] => Deb [1] 
=> Deb) [1] => Array ([callsign] => W0GPS [0] => W0GPS [Fname] => 
John [1] => John) [2] => Array ([callsign] => WA0TJT [0] => WA0TJT 
[Fname] => Keith [1] => Keith) [3] => Array ([callsign] => W0KCN [0] 
=> W0KCN [Fname] => Net Control [1] => Net Control)) 

而且我的功能如下:

function showHint(str) { 
    if (str.length == 0) { 
     document.getElementById("txtHint").innerHTML = ""; 
     return; 
    } else { 
     var xmlhttp = new XMLHttpRequest(); 
     xmlhttp.onreadystatechange = function() { 
      if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
       document.getElementById("txtHint").innerHTML = xmlhttp.responseText; 
      } 
     } 

     xmlhttp.open("GET", "gethint.php?q=" + str, true); 
     xmlhttp.send(); 
    } 
    } 
+1

对不起,您的请求与标准自动提示有什么不同 – Strawberry

回答

1

你想实现的功能是一种搜索/自动完成的,在简单的术语需要被下方显示用户在输入框输入字符串,并返回相关结果。

它看起来就像你试图做的是将一个onkeyup属性绑定到一个提交搜索字符串的PHP函数(这是你定义的<input>字段的内容。据我所知,以这种方式使用PHP将无法正常工作,因为onkeyup属性中的PHP代码只会在页面初次加载时执行一次,而在用户开始输入后不会再执行。

高级别问题的解决方案是使用JavaScript作为用户输入/ HTML“前端”和PHP/MySQL“后端”之间的中介。 JavaScript(特别是jQuery库)是为了帮助你完成这样的任务而创建的。 JavaScript是在客户端的浏览器中执行的,而不是像PHP代码那样在服务器上执行的,所以如果你有一个onkeyup事件,其中包含一个JavaScript函数,你会看到它在页面加载后执行,即使是,只要用户正在输入正确的输入字段。

所以,你想要做的是这样的:

  1. onkeyup="someJavaScriptFunction()"属性创建输入字段。每次有人输入时,这将会触发someJavaScriptFunction()
  2. someJavaScriptFunction()将被定义在您的页面上的其他地方,并被包裹在<script>标签。
  3. 您的JavaScript函数首先必须抓取<input>框的内容。
  4. 接下来,需要使用jQuery函数库的AJAX函数向您的PHP代码发送POST请求。
  5. 然后,您的PHP代码将执行一些幕后工作,与您的MySQL数据库交谈,根据输入字符串获取它所需的建议结果,并将它们返回给客户端。
  6. 您的AJAX功能将得到这些结果在某些类型的数据,字符串的形式的success组件,您将需要解析转换成JavaScript数组或对象
  7. 您将需要使用jQuery或一些更多的JavaScript来显示输入框下面的结果,可能还有一些HTML和一个不同的JavaScript函数使它们可点击。

我强烈建议通过几个JavaScript和jQuery教程来了解这些东西的工作原理。您可能需要熟悉一些内容,以便您可以在HTML和PHP代码之间填写组件。

+0

我见过的大多数自动完成的示例只填充一个字段而不是两个。至于它没有按照我写的方式工作......它的确如此。当我输入第一个字母时,我会得到所有的回复,并且当我输入更多字母时,它会进行过滤。但我不理解如何处理返回的数组并适当地放置这些部分。我想我必须在选择正确的呼号后填写姓名。嗯... –

+0

啊,我掩饰了事实,你有一个JS组件已经包括在内。我很抱歉。所以你正在使用xmlhttp,它正在做AJAX在我上面描述的回复中做的事情。你已经步骤1 - 5了。你只需要获取数据库返回的数据并显示它。我建议在MySQL查询完成之后在您的PHP代码中创建一个数组,将呼号和名称配对在一起。因此,对于每个建议,您的数组都可以是$ tip [#] ['call_sign']和$ tip [#] ['name']。如果您将MySQL表结构编辑为您的原始问题,这将有助于 – Christian

+0

...然后,一旦您的PHP数组将名称和呼叫标记组合良好格式化,就可以将其编码为JSON,并将其返回给客户端,然后将其解码为JavaScript对象。通过这种方式,您可以获得格式良好的数据结构,您可以使用Element.value()JavaScript函数从中抽出一对名称/呼号,并使用它们填充两个输入。 – Christian