0

我有一个使用 Ajax 的具有 2 个级联选择的页面。Ajax 正确填充了第二个 Select,但是当我使用 PHP 将数据发布到 MySQL 时,我收到一个错误,即 AJAX 填充的字段是“未识别”。确切的错误是

注意:未定义的索引:第 21 行 ..\input.php 中的 probcode

如果没有进行 Ajax 调用并且默认选择仍然存在,它会发布。只有在 AJAX 替换 DIV 后才会出错。

我想补充一点,即使 AJAX 将它添加到表单中,它就像 from 元素从 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 调用来替换“val2div”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

4

2 回答 2

1

在无休止地查看代码后,我发现在上面的代码中使用 IE 时一切正常!问题直接在于 Firefox 解释 AJAX 返回。

于 2013-01-23T03:58:59.513 回答
0

在 val2.php 中,您错过了用于 select 的关闭元素

 </select>

我猜在 input.PHP 中,应该'{$_POST['probtype']}''$_POST[probtype]'

$sql="INSERT INTO `test`.`test` (
`ID`,
`Dattime`, 
`probtype`,
`probcode`
)
VALUES(
NULL,NOW(),'{$_POST['probtype']}','{$_POST['probcode']}')";
于 2013-01-06T19:46:59.263 回答