【问题标题】:Sending AJAX call to a php file to INSERT a value into my database将 AJAX 调用发送到 php 文件以将值插入到我的数据库中
【发布时间】:2015-07-12 04:22:30
【问题描述】:

我有一个名为 user_requests 的数据库表,其中有一个名为“status”的列。我在 userRequests.php 页面上输出状态'。我通过 while 循环输出所有用户请求。我想要完成的是能够点击“批准”或“拒绝”按钮来更改我的 user_requests 表中的“状态”。我正在尝试使用 AJAX 执行此操作,这是我第一次尝试进行 AJAX 调用。当我点击批准时,我希望它获取我在旁边选择接受的用户的 ID,然后将 'Accept' 和 INSERTthat 的值携带到我的 user_requests 数据库表中的 'status' 行中。

正如我现在所拥有的那样,什么都没有发生。有没有人认为我这样做有什么问题?

userRequests.php

<?php
$con = mysqli_connect("localhost", "root", "", "db");
$run = mysqli_query($con,"SELECT * FROM user_requests ORDER BY id DESC");
$numrows = mysqli_num_rows($run);

    if( $numrows ) {
        while($row = mysqli_fetch_assoc($run)){
            if($row['status'] == "Pending"){

                $pending_id         = $row['id'];
                $pending_user_id   = $row['user_id'];
                $pending_firstname = $row['firstname'];
                $pending_lastname  = $row['lastname'];
                $pending_username  = $row['username'];
?>
        <form action="" method="POST" id="status">
             <input type='hidden' value='<?php echo $pending_id; ?>' id='pending_id'/>
<?php
        if ($pending_firstname == true) {
            echo "Name - ". $pending_firstname . " " . $pending_lastname . "</br>" . 
                "Username - ". $pending_username . "</br></br>"
?>
        </form>

                        <button id="approve" type="submit" form="status" name="approve" value="Approved">Approve</button>
                        <button id="deny" type="submit" form="status" name="deny" value="Denied">Deny</button><br><br><br>
<?php   
                    ;} else {
                        echo "There are no Pending Requests at this time.";
                    }
                }
            }
        }
?>

AJAX 调用

<script>
    $(document).ready(function(){

    $('#submit').click(function(){
    var id_val=$("#pending_id").val();
    var id_val=$("#approve").val();
    $.post("userRequest_approve.php", $("#status").serialize(),  function(data) {   });

    $('#success').html('User Status Changed!');
    $('#success').hide(2000);

    });

    });
</script>

userRequest_approve.php 文件

 <?php
require_once 'core/init.php';

$term = mysql_escape_string($term); // Attack Prevention
$pending_id = $_POST['id'];
$status = $_POST['approve'];

$con = mysqli_connect("localhost","root","","db");
    /* check connection */
    if (mysqli_connect_errno()) {
        printf("Connect failed: %s\n", mysqli_connect_error());
        exit();
    }
    $stmt = $con->prepare("INSERT INTO user_requests (status, date_responded) VALUES (?, NOW())");
    if ( false===$stmt ) {
     // Check Errors for prepare
        die('User Request update prepare() failed: ' . htmlspecialchars($con->error));
    }
    $stmt->bind_param('s', $status);
    if ( false===$stmt ) {
    // Check errors for binding parameters
        die('User Request update bind_param() failed: ' . htmlspecialchars($stmt->error));
    }
    $stmt->execute();
    if ( false===$stmt ) {
        die('User Status update execute() failed: ' . htmlspecialchars($stmt->error));
    }

?>  

【问题讨论】:

  • $('#submit').click(function(){...... 我没有看到任何 ID="submit" 所以你的点击是错误的 ID,除非我错过了一些代码这里
  • @lauw 很好。我解决了这个问题,现在我从我的 AJAX 调用中收到了我的成功消息,但我的数据库中没有任何变化。
  • 您的 javascript 代码没有意义。您定义var id_val 两次,其中第二个值覆盖第一个值。然后你永远不会对var id_val 做任何事情。然后你的$.post 中有$("#status").serialize(),但是由于你的&lt;form action="" method="POST" id="status"&gt; 是在循环中完成的,所以你将拥有n#status 数量(其中ids 应该是唯一的)所以怎么样javascript 知道你想要哪个#status 表单数据?
  • 另外,#pending_id#approve 也有同样的问题。每个都有n 编号,所以javascript应该选择哪个,因为它总是会找到第一个,而不是与您单击的按钮相关的那个。
  • @Sean 我不确定 Approve 按钮的值“已批准”是否会发送或如何发送。这就是为什么我做了var id_val=$("#approve").val(); 我只是尝试将其更改为var val=$("#approve").val();,但这并没有帮助。我更改希望按钮的“已批准”值发送过来并插入该用户的 ID。

标签: php ajax mysqli prepared-statement


【解决方案1】:

我认为你的 javascript 是你代码中最薄弱的部分,这里有一些简单的 ajax 调用示例,只需更改一些值并尝试一下

$('.approve').click(function(){
        $.ajax({
           url: '/whereEver/itNeedsToGo',
           data: {
                id: $(this).val(), //the value of what you clicked on
                status: 'Approved' //you clicked on it so you know the status might aswell hardcode it
            },
           success: function(data) {
                //do something with the data that got returned
           },
           type: 'POST'
        });
});

编辑:我会让它有点“肮脏”来实现你想要的......有更多的方法可以解决它,但现在我会用简单的方法来做...... 将 ID 更改为类 &lt;button class="approve" type="submit" form="status" name="approve" value="&lt;?=$pending_id;?&gt;"&gt;Approve&lt;/button&gt; 为批准按钮提供待定 ID 的值.....然后我相应地编辑上面的 ajax 调用......这应该可以工作

【讨论】:

  • 我需要继承我在旁边选择“接受”的用户的 ID。
  • 类似这样的东西...我为您做了一些更改.....您可能需要 jquery 库以防您的代码中未包含
  • 什么也没做。我的 userRequest_approve.php 文件是允许值通过并发送还是导致它停在那里?
  • @paul....请检查您是否包含 JQuery....它可能需要...您的 userRequest_approve.php 应该接受它...实际上有 1 个简单找出 print_r($_POST) 的方法,看看你的 jquery 中发生了什么......
  • 您不能对多个元素使用相同的 id。所以 pending_id 不能工作超过 1,你总是可以将它用作一个类并进行排序(不推荐),使用自定义变量,如 data-request-id (最好的 imo),或者在 id 上附加一些东西(pending_id_ ##,也很容易)使其独一无二。
猜你喜欢
  • 1970-01-01
  • 2012-04-08
  • 2013-07-03
  • 1970-01-01
  • 2014-09-10
  • 2014-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多