【问题标题】:AJAX call not picking up id and sending it to php fileAJAX 调用未获取 id 并将其发送到 php 文件
【发布时间】:2015-07-17 00:33:02
【问题描述】:

我有一个页面,我接受或拒绝新用户。当某人被接受时,他们会转到一个名为 Accepted Users 的部分,在该部分中,管理员必须更改他们的权限级别或组#。因此,在下面我从 user_request 表中获取该特定用户的 user_id 并希望通过 id 更新我的 users 表。我只想通过 AJAX 调用我的 php 文件来更新选项框的“组”。

由于某种原因,我的 AJAX 调用没有找到 id 和组号,也没有发送到我的 php 文件。

在控制台的标题部分中,我在尝试发送此内容后得到以下内容..

id:0 更新组:

有人看到我做错了吗?

$con2 = mysqli_connect("localhost", "root", "", "db");
$run2 = mysqli_query($con2,"SELECT * FROM user_requests ORDER BY id DESC");
$runUsers2 = mysqli_query($con2,"SELECT * FROM users ORDER BY id DESC");
$numrows2 = mysqli_num_rows($run2);

    if( $numrows2 ) {
        while($row2 = mysqli_fetch_assoc($run2)){
            if($row2['status'] == "Approved"){

                $approved_id        = $row2['user_id'];
                $approved_firstname = $row2['firstname'];
                $approved_lastname  = $row2['lastname'];
                $approved_username  = $row2['username'];

    if ($approved_firstname == true) {
        echo "Name - ". $approved_firstname . " " . $approved_lastname . "</br>" . 
            "Username - ". $approved_username . "</br></br>"
?>
<div class="change_group_button"> 
     <a class="change_group" href="javascript:void(0)">Change User Permission</a>
</div><br>
<div id="light" class="change_group_popup">
    <a class="close" href="javascript:void(0)">Close</a>

    <form id="update_group" action="" method="POST" accept-charset="utf-8">
       <div class="field">
        <label for="group">Group</label>
        <input type="hidden" value="<?php echo $approved_id; ?>" id="approved_id" name="id" />
        <select id='group_id' name='group' required>
            <option value=''><?php echo htmlentities($group); ?></option>
            <option value="1">Bench</option>
            <option value="2">Spectator</option>
            <option value="3">Team Member</option>
            <option value="4">Commissioner</option>
        </select>
    </div>
    <input type="submit" value="submit">
    </form>

Ajax 调用

$(document).ready(function () {

    $('#update_group').on('submit', function (event) {
    event.preventDefault();
        $.ajax({
            url: 'user_group_update.php',
            type: 'POST',
            data: {
            id: $("#approved_id").val(), //id
            update_group: $("#group_id").val() //group level
        },
            success: function (data) {
                //do something with the data that got returned
                $("#success").fadeIn();
                $("#success").show();
                $('#success').html('User Permission Level Changed!');
                $('#success').delay(5000).fadeOut(400);
                alert(data);
            },
             error: function(jqXHR, textStatus,errorThrown )
            {
              // alert on an http error 
              alert( textStatus +  errorThrown );
            }
        });
        return false;
    });
});

user_group_update 文件...

$approved_id = $_POST['id'];
$change_group = $_POST['update_group'];

$con = mysqli_connect("localhost","root","","db");
    /* check connection */
    if (mysqli_connect_errno()) {
        printf("Connect failed: %s\n", mysqli_connect_error());
        exit();
    }
    $stmt = $con->prepare("UPDATE users SET `group`=? WHERE id=?");
    if ( !$stmt || $con->error ) {
     // Check Errors for prepare
        die('User Group update prepare() failed: ' . htmlspecialchars($con->error));
    }
    if(!$stmt->bind_param('ii', $change_group, $approved_id)) {
    // Check errors for binding parameters
        die('User Group update bind_param() failed: ' . htmlspecialchars($stmt->error));
    }
    if(!$stmt->execute()) {
        die('User Group update execute() failed: ' . htmlspecialchars($stmt->error));
    }

更新: 显示 HTML 部分的完整代码

if( $numrows2 ) {
        while($row2 = mysqli_fetch_assoc($run2)){
            if($row2['status'] == "Approved"){

                $approved_id        = $row2['user_id'];
                $approved_firstname = $row2['firstname'];
                $approved_lastname  = $row2['lastname'];
                $approved_username  = $row2['username'];

    if ($approved_firstname == true) {
        echo "Name - ". $approved_firstname . " " . $approved_lastname . "</br>" . 
            "Username - ". $approved_username . "</br></br>"
?>
<div class="change_group_button"> 
     <a class="change_group" href="javascript:void(0)">Change User Permission</a>
</div><br>
<div id="light" class="change_group_popup">
    <a class="close" href="javascript:void(0)">Close</a>

    <form id="update_group" action="" method="POST" accept-charset="utf-8">
       <div class="field">
        <label for="group">Group</label>
        <input type="hidden" value="<?php echo $approved_id; ?>" id="approved_id" name="id" />
        <select id='group_id' name='group' required>
            <option value=''><?php echo htmlentities($group); ?></option>
            <option value="1">Bench</option>
            <option value="2">Spectator</option>
            <option value="3">Team Member</option>
            <option value="4">Commissioner</option>
        </select>
    </div>
    <input type="submit" value="submit">
    </form>
    <p>Bench = 1</p>
    <p>Spectator = 2</p>
    <p>Team Member = 3</p>
    <p>Commissioner = 4</p>
</div>
<div id="fade" class="lighter_black_overlay"></div>
<?php               
                            ;} else {
                        echo "There are no Approved Users at this time.";
                    }
                }
            }
        }

【问题讨论】:

  • 如果您在浏览器中查看页面的源代码,$approved_id 的正确值是否出现在您的&lt;input type="hidden"... 中?
  • 是的。它有右括号。我只是在我的问题中添加了更多的 html 代码来显示它。
  • 对不起,我不明白,如果您提交的表格打印了 1 次或更多?因为问题可能是两个具有相同 ID 的输入隐藏。如果不止一个,您必须重命名:approved_id_0approved_id_1,并在 javascript 中使用正确的 id 调用它们。
  • @LucaOlivieri:他与“表单 ID”有相同的错误......并且他正确提交。 :-/ 你知道这很奇怪
  • 如果问题是这个尝试:$(this).find("#approved_id").val() 来检索 id 的值。而对于 select $(this).find("#group_id option:selected" ).val();

标签: javascript php jquery ajax


【解决方案1】:

你这里有很多问题..首先..你不运行这部分:

$runUsers2 = mysqli_query($con2,"SELECT * FROM users ORDER BY id DESC");

所以你没有group

现在,您可以像这样合并您的 SQL:

$run2 = mysqli_query($con2,"SELECT user_requests.*,users.group FROM user_requests INNER JOIN users ON user_requests.user_id=users.id ORDER USERS BY id DESC"); 

只是知道我不知道你表的配置是什么,所以我想没关系。

现在,您需要像这样获取元素的分组:

$group= $row2['group'];

现在,如果你想选择,你可以使用类似的东西:

    <?php $selectedstring = "selected"; ?>
    <select id='group_id' name='group' required>
        <option value=''><?php echo htmlentities($group); ?></option>
        <option <?php echo $goup=='1'?$selectedstring:''; ?> value="1">Bench</option>
        <option <?php echo $goup=='2'?$selectedstring:''; ?> value="2">Spectator</option>
        <option <?php echo $goup=='3'?$selectedstring:''; ?> value="3">Team Member</option>
        <option <?php echo $goup=='4'?$selectedstring:''; ?> value="4">Commissioner</option>
    </select>

此外,在您的提交 ajax 中,使用如下内容:

     $.ajax({
        url: 'user_group_update.php',
        type: 'POST',
        data: { 
        'id': $("#approved_id").val(), 
        'update_group': $("#group_id").val(),
        },
        success: function (data) {
            //do something with the data that got returned
            $("#success").fadeIn();
            $("#success").show();
            $('#success').html('User Permission Level Changed!');
            $('#success').delay(5000).fadeOut(400);
            alert(data);
        },
         error: function(jqXHR, textStatus,errorThrown )
        {
          // alert on an http error 
          alert( textStatus +  errorThrown );
        }
    });

【讨论】:

  • 好吧,我真的不需要知道用户当前的组级别,因为他们在注册时总是1。我为所有注册的人设置了一个值,在获得更高权限之前不允许他们访问该站点或登录。
  • 我没有看到 AJAX 中发生了什么变化。所以你在想如果我将选项值转换为 php 会有帮助吗?很抱歉提出不好的问题。
  • 如果不需要,为什么要运行 SQL,尝试将未声明的变量推送到屏幕中?我在您的 Ajax 的第一部分添加引号。不会解决您的问题,但可以提供帮助。此外,在此页面中……您显示的用户不止 1 个还是只有 1 个?
  • 因为我正在考虑添加它。一旦我至少发送了这个初始部分,我就想完成所有这一切。
【解决方案2】:

我之前在 cmets 中写的很清楚: 您必须指定要读取您提交的表单的输入值,因为在您的 html 中有许多表单,输入和选择具有相同的 id,这并不好。所以改变:

  id: $("#approved_id").val(), //id
        update_group: $("#group_id").val() //group level

何去何从

    id:  $(this).find("#approved_id").val(), //id
    update_group: $(this).find( "#group_id option:selected" ).val()  //group level

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-17
    • 2016-08-22
    • 1970-01-01
    • 2015-10-27
    • 2011-11-19
    相关资源
    最近更新 更多