在 wordpress 中使用 ajax 将数据发送到 php 时出错
Posted
技术标签:
【中文标题】在 wordpress 中使用 ajax 将数据发送到 php 时出错【英文标题】:Error sending data to php with ajax in wordpress 【发布时间】:2018-11-02 23:30:44 【问题描述】:我有这个表格:
<select id="mudar_produto">
<option></option>
<option value="#produto_1">Novo Produto Higiene</option>
</select>
<section class="hide-section" id="produto_1">
<form class="form-validate" id="feedback_form">
<div class="campo">
<fieldset>
<h1>
<legend>
<center>
<strong>Produtos de Higiene</strong>
</center>
</h1><br>
</div>
<fieldset class="grupo">
<div class="campo">
<strong><label for="Nome do Produto">Nome do Produto</label></strong>
<input type="text" id="DescricaoProd" name="DescricaoProd" required="" style="width:350px">
</div>
<div class="campo">
<strong><label for="Unidade">Unidade</label></strong>
<input type="text" id="DescricaoUnid" name="DescricaoUnid" style="width:160px" required="" size="120">
</div>
</fieldset>
<button class="btn btn-success btn_contact" type="button">Registo</button>
</form>
</section>
我有这个 ajax 可以在不刷新页面的情况下发送数据并清理输入:
<script type="text/javascript">
$(".btn_contact").click(function ()
$.ajax(
type: "POST",
url: "inserir",
data: $("#feedback_form").serialize(), // serializes the form's elements.
success: function (data)
if ($.trim(data) == 'true')
$("#feedback_form").find('input').val(''); //clear text
$(".success_messages").removeClass('hide'); // success message
else
$(".error_message").removeClass('hide'); // error message
);
);
</script>
在插入页面我有 php 代码:
<?php
$servername = "xxx.xxx.x.xx";
$username = "xxxxxx";
$password = "xxxxxxxxx";
$dbname = "xxxxxxxx";
$conn = new mysqli($servername, $username, $password, $dbname);
$conn->set_charset('utf8');
$name = isset($_POST["DescricaoProd"]) ? $_POST["DescricaoProd"] : '';
$unid = isset($_POST["DescricaoUnid"]) ? $_POST["DescricaoUnid"] : '';
if (!empty($name)) && (!empty($unid))
echo 'true';
else
echo 'false';
$sql = "INSERT INTO ProdHigieneteste (DescricaoProd,DescricaoUnid)
VALUES ('$name','$unid')";
if ($conn->query($sql) === TRUE);
$sql1 = "INSERT INTO StockHigieneteste (DescricaoProd,DescricaoUnid)
VALUES ('$name','$unid')";
if ($conn->query($sql1) === TRUE);
//Count total number of rows
$rowCount = $query->num_rows;
$conn->close();
?>
但是当我单击注册按钮时,我在控制台中收到以下错误:
POST http://xxx.xxx.x.xx/wordpress/index.php/inserir 500(内部 服务器错误)
并且不插入到数据库表中。
除了@Jeff 识别的错误之外还有这个语法错误:
if (!empty ($name)) && (!empty ($unid))
我不得不切换到:
if (!empty ($name) && !empty ($unid))
【问题讨论】:
您的调试测试结果如何?数据库错误?任何其他错误消息?是否发送了正确的数据?它到达php吗? ...?DescicaoUnid
听起来像一个整数,但您将其默认为''
。 ?
这行应该做什么? if ($conn->query($sql) === TRUE);
- 这是一个语法错误。
如果这是您页面上的所有代码,我并不奇怪您会收到 500 错误消息。该文件不仅包含语法错误(关闭
没有匹配的打开
),我也看不到您在哪里定义 $conn
。
@Jeff - 平心而论,empty()
-checks 确实有一些意义,因为它不仅检查变量是否存在,而且检查它们是否为空也是。没有意义的是 OP 无论如何都会继续执行脚本。 :-)
【参考方案1】:
这里至少有 2 个语法错误
if ($conn->query($sql) === TRUE);
那里
if ($conn->query($sql1) === TRUE);
所以把它们改成
if ($conn->query($sql)) // check for === TRUE is not necessary
// either put the second query in here, or just enjoy the success
else
// get the error, throw a message...
$sql1 = "INSERT INTO StockHigieneteste (DescricaoProd,DescricaoUnid)
VALUES ('$name','$unid')";
if ($conn->query($sql1))
//Count total number of rows
$rowCount = $query->num_rows;
else
// get the error, throw a message...
$conn->close(); // put that OUTSIDE the condition
除此之外:
不清楚是否在某处之前设置了 $conn。编辑:在新代码中显示。更好的方法是包含一个单独的文件来进行数据库连接(因为您可能更经常需要它)。您对 sql 注入攻击持开放态度! 使用prepared statements。
这可能不是问题的全部,这只是显而易见的事情。
【讨论】:
我按照建议进行了更改,但它给出了相同的错误。我已经编辑了问题并将数据访问数据库 “它给出了同样的错误” - 什么错误? (阅读我的第一条评论) 如何测试它是否到达 php?数据未输入到数据库表中。我在php端做了var_dump ($ name);
并没有返回任何东西
然后查看网络选项卡以检查实际发送的内容。之后检查$("#feedback_form").serialize()
给你什么。 ...等等。
如何检查 $ ("# feedback_form"). Serialize() 是否提供并验证它在网络选项卡上发送的内容?以上是关于在 wordpress 中使用 ajax 将数据发送到 php 时出错的主要内容,如果未能解决你的问题,请参考以下文章
如何在Wordpress环境中使用Ajax将附件发送到服务器端[重复]
Wordpress 使用 Wordpress 将 ajax 值传递到特定页面
使用 AJAX 将 Wordpress 帖子内容加载到 DIV