我有一个页面有2个级联选择使用Ajax。 Ajax正确地填充了第二个Select,但是当我使用PHP将数据发布到MySQL时,我得到一个错误,即AJAX填充的字段是" Unidentified。"确切的错误是
注意:未定义索引:.. \ input.php中的probcode在线 21
如果没有进行Ajax调用并且默认选择仍然存在,它会发布。只有在AJAX替换DIV后才会出错。
我想补充一点,即使AJAX将它添加到表单中,它仍然可以从PHP中消失。我应该使用另一个PHP函数将AJAX数据发布到MySQL吗?
我不知道Jquery,并且正在寻找一种方法来实现这个目前只使用JavaScript(因为时间和我缺乏Jquery知识),但是如果有一种简单的方法将Jquery添加到现有的代码我肯定会感兴趣。此外,我知道目前进入MySQL的数据并不安全,这将在此之后立即解决。我现在正在研究特定功能的线框。
首先两个选择。
<tr>
<td>Problem Type</td>
<td><?php
mysql_connect("localhost", "root", "") or die("Connection Failed");
mysql_select_db("test")or die("Connection Failed");
$query = "SELECT * FROM wfprobtype ORDER BY probtype ASC";
$result = mysql_query($query);
?>
<select name="probtype" id="probtype" onchange="changeContent(this.value)">
<?php
while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
?>
<option value="<?php echo $line['ID'];?>" > <?php echo $line['probtype'];?> </option>
<?php
}
mysql_close()
?>
</select>
</td>
<td>Problem: </td>
<td>
<div id="val2div">
<select name="probcode" id="probcode">
<option value="default"></option>
</select>
</div>
</td>
</tr>
这就是Ajax要求取代&#34; val2div&#34; val2.php
<?php
$val2=intval($_GET['val2']);
mysql_connect("localhost", "root", "") or die("Connection Failed");
mysql_select_db("test")or die("Connection Failed");
$query = "SELECT * FROM wfprobcode WHERE typeID='$val2' ORDER BY Probcode ASC";
$result = mysql_query($query);
?>
<select name="probcode" id="probcode" onchange="">
<?php
while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
?>
<option value="<?php echo $line['Probcode'];?>"> <?php echo $line['Probcode'];?> </option>
<?php
}
mysql_close()
?>
Ajax脚本Dny.js
function changeContent(val)
{
if (val=="")
// if blank, we'll set our innerHTML to be blank.
{
document.getElementById("val2div").innerHTML="";
return;
}
if (window.XMLHttpRequest) // new browser
{
xmlhttp=new XMLHttpRequest(); // new browser
alert("newb");
}
else // Old Browser
{
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
// on state change
xmlhttp.onreadystatechange=function()
{
// if we get a good response from the webpage, display the output
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("val2div").innerHTML=xmlhttp.responseText;
}
}
// GET file.
xmlhttp.open("GET","val2.php?val2="+val, true);
xmlhttp.send();
alert(val)
}
发布到MySQL input.PHP
<?php
$con = mysql_connect("localhost","root","");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("test", $con);
$sql="INSERT INTO `test`.`test` (
`ID`,
`Dattime`,
`probtype`,
`probcode`
)
VALUES(
NULL,NOW(),'$_POST[probtype]','$_POST[probcode]')";
if (!mysql_query($sql,$con))
{
die('Error: ' . mysql_error());
}
mysql_close($con); ?>
我希望我现在只是缺少一些简单的东西。这是我第一次使用Ajax。我现在非常感谢任何帮助。
编辑: - 在我尝试重写整个事情之前进行最后一次编辑。有没有办法使用Jquery我可以解决这个问题?如果没有,有没有人有一个简单而肮脏的方法来使它完全回发而没有AJAX?
到目前为止,我真的很感谢那些有任何想法的人。
提前致谢!
-D
答案 0 :(得分:1)
在无休止地查看代码后,我发现使用上面代码的IE时一切正常!这些问题直接来自Firefox解释AJAX的回归。
答案 1 :(得分:0)
你错过了选择
的闭包元素 </select>
我想在input.PHP中,最好是'{$_POST['probtype']}'
而不是'$_POST[probtype]'
$sql="INSERT INTO `test`.`test` (
`ID`,
`Dattime`,
`probtype`,
`probcode`
)
VALUES(
NULL,NOW(),'{$_POST['probtype']}','{$_POST['probcode']}')";