【发布时间】:2020-04-21 10:01:24
【问题描述】:
我有一个表单,我需要将数据发布到一个 compute.php 文件。 我必须传递名为 select_1 和 select_2 的两个选择字段的内容。 我的点火按钮有一个 onclick='go()' 调用。
我的脚本代码如下:
function go() {
var sel_1 = document.getElementById('select_1').value;
var sel_2 = document.getElementById('select_2').value;
$.ajax({
type: "POST",
url: "compute.php",
data: "select_1=" + sel_1 + "&select_2=" + sel_2,
dataType: "text",
success: function(data,status)
/* ------------ for debug I have an alert with a response ---- */
{
alert("passed data are: " + data + "\nStatus: " + status);
},
error: function(data,status)
{
alert("passed data are: " + data + "\nStatus: " + status);
}
});
}
在 php 端,我的 compute.php 文件的代码如下:
$selection_1 = $_POST["select_1"];
$selection_2 = $_POST["select_2"];
$sqladd = "INSERT INTO table SET column_1 = '$selection_1', column_2 = '$selection_2';";
if (mysqli_query($conn, $sqladd)) {
$resultadd= mysqli_query($conn, $sqladd);
// ------- then for debug purpose
echo "inserted row with col_1 --->" . $selection_1 . "<--- and col_2 --->" . $selection_2;
} else {
// ------- either, still for debug purpose
echo "not inserted. ";
echo "Error: " . mysqli_error($conn);
}
现在警告框显示 js 已经正确获取了两个选择字段的值,我也返回了成功状态,但是 compute.php 的调试回显显示 selection_1 和 selection_2 的值为空,并且表格行已插入,但在插入的行中表格列为空。 Apache 日志显示两个通知:PHP 通知:未定义索引:compute.php 中的 select_1 和 PHP 通知:未定义索引:compute.php 中的 select_2。所以 PHP 不接收这两个 POST 值。我究竟做错了什么?我在 .htaccess 中有以下规则和条件:
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R,L,NC]
RewriteCond %{REQUEST_FILENAME}.php [NC]
RewriteRule ^ %{REQUEST_URI}.php [L]
他们可以阻止 POST 吗?如果是,如何在不阻止 POST 的情况下获得相同的结果?我需要在外部将 /dir/foo.php 重定向到 /dir/foo 并在内部将 /dir/foo 重定向到 /dir/foo.php。
【问题讨论】:
-
我建议不要将参数嵌入到 SQL 中,而是使用准备好的语句使用 ?并让mysql为你插入参数,见w3schools.com/php/php_mysql_prepared_statements.asp
-
这是稍后要做的精炼事情之一,但问题仍然是php没有从ajax接收那些post数据。
-
您是否尝试过使用 post 方法在页面中创建 HTML 表单元素并尝试以这种方式提交?
-
现在根据您的要求在 HTML 中试用。嗯......,同样的结果,数据没有通过。但也用js检查,表单有效,源页面中的变量已填充。糟糕的谜题:(
-
在你的 PHP 中添加一些 echo,这样你就可以验证它是否到达了服务器?
标签: javascript php ajax post