在 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-&gt;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

如何在 Wordpress 中使用 Ajax 将 Javascript 对象传递给 PHP

如何在 ajax 调用中使用 wordpress 函数

用 ajax 更新而不是替换 wordpress 自定义字段