Php 根据下拉菜单的结果获取表格字段(从另一个表格字段输入)

Php 根据下拉菜单的结果获取表格字段(从另一个表格字段输入),php,mysql,ajax,forms,Php,Mysql,Ajax,Forms,我希望我的标题有意义。 基本上,我有一个MySQL表,它有几个字段。重要的是,一个名为“物种”的字段填充到下拉框中。这个下拉框以HTML形式存在,数据来自PHP。我想做的是让同一个表中的另一个字段填充物种下面的HTML表单字段,而另一个字段称为“sku”。我是AJAX新手,我想我理解我的脚本应该如何工作,但它不会返回任何结果。以下是我的主要PHP脚本: <html> <head> <link rel="stylesheet" type="text/css" h

我希望我的标题有意义。
基本上,我有一个MySQL表,它有几个字段。重要的是,一个名为“物种”的字段填充到下拉框中。这个下拉框以HTML形式存在,数据来自PHP。我想做的是让同一个表中的另一个字段填充物种下面的HTML表单字段,而另一个字段称为“sku”。我是AJAX新手,我想我理解我的脚本应该如何工作,但它不会返回任何结果。以下是我的主要PHP脚本:

<html>
 <head>
  <link rel="stylesheet" type="text/css" href="css/styles.css" media="screen" />
  <title>Add Inventory</title>
  <script>
function showUser(str)
{
if (str=="")
  {
  document.getElementById("txtHint").innerHTML="";
  return;
  } 
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
    }
  }
xmlhttp.open("GET","getsku.php?q="+str,true);
xmlhttp.send();
}
</script>
 </head>
 <body>
<?php
session_start();

require_once('includes/config.inc.php');
require_once('includes/functions.inc.php');

$thisPage='add';
include('includes/navbar.inc.php');
?>

<h1>Add New Inventory Record</h1>
<form method="POST" action="submitadd.php" />

<table id="add">

<tr>
<td class="headings"><b>Species:</b></td>
<td><select name="species:" onchange="showUser(this.value)">
      <option value="select">Choose a Species</option>
      <?php
      $prodquery="SELECT name FROM products ORDER BY name ASC";
      $result=mysqli_query($con,$prodquery) or die(mysqli_error($con));
      while ($row = mysqli_fetch_array($result)) {
        echo "<option value='" . $row['name'] . "'>" . $row['name'] . "</option>";
      }
      ?>
    </select>
</td>
</tr>

<tr>
<td class="headings"><b>SKU:</b></td>
<td><input type="text" name="sku" value="<div id="txtHint" />" readonly="readonly" size="35" /></td>
</tr>
</table>
<br />
<input type="submit" name="submit" value="submit" class="button1" />
</form>

</body>
</html>

添加库存
函数showUser(str)
{
如果(str==“”)
{
document.getElementById(“txtHint”).innerHTML=“”;
返回;
} 
if(window.XMLHttpRequest)
{//IE7+、Firefox、Chrome、Opera、Safari的代码
xmlhttp=新的XMLHttpRequest();
}
其他的
{//IE6、IE5的代码
xmlhttp=新的ActiveXObject(“Microsoft.xmlhttp”);
}
xmlhttp.onreadystatechange=函数()
{
if(xmlhttp.readyState==4&&xmlhttp.status==200)
{
document.getElementById(“txtHint”).innerHTML=xmlhttp.responseText;
}
}
open(“GET”、“getsku.php?q=“+str,true”);
xmlhttp.send();
}
添加新的库存记录
种类:
选择一个物种
SKU:

下面是getsku.php:

<?php
$q = intval($_GET['q']);

require_once('includes/config.inc.php');

$sql="SELECT sku FROM products WHERE name = '".$q."'";

$result = mysqli_query($con,$sql);

while($row = mysqli_fetch_array($result))
  {
  echo "<tr>";
  echo "<td>" . $row['sku'] . "</td>";
  echo "</tr>";
  }
echo "</table>";

mysqli_close($con);
?>

当我在下拉列表中选择一个项目时,我可以看到发生了一些事情,但预期结果(该产品的“sku”)没有出现


有人能帮我吗?

这就是我最后在getsku.php中使用的方法,它解决了我的问题:

<?php
$q = html_entity_decode($_GET['q']);

require_once('includes/config.inc.php');

$sql="SELECT sku FROM products WHERE name = '".$q."'";

$result = mysqli_query($con,$sql);

while($row = mysqli_fetch_array($result))
  {
  echo "<td><input type='hidden' name='sku' value='" . $row['sku'] . "' readonly='readonly' size='35' /></td>";
  }

mysqli_close($con);
?>

您正在使用Firefox吗?安装Firebug。使用Firefox中的Firebug,我可以看到AJAX脚本正在工作,但是它错误地调用了“名称”。例如,物种名称是(Aulonocara rubescens“Ruby Red”),但被调用的$GET是:/getsku.php?q=Aulonocara%20rubescens%20%22Ruby%20Red%22,getsku.php得到该变量q=通过使用$GET,我假设它得到:Aulonocara%20rubescens%20%22Ruby%20Red%22,而不是:Aulonocara rubescens“Ruby Red”所以一切都正常,但是因为名称不正确,SQL查询没有返回结果。等等,我错了。虽然URL是错误的,但Firebug向我显示:Params:q Aulonocara rubescens“Ruby Red”,因此它正确地看到了变量。那么getsku.php一定出了什么问题?