【问题标题】:php mysql update database on button clickphp mysql 在按钮单击时更新数据库
【发布时间】:2015-12-24 12:13:24
【问题描述】:

正如标题所述,我正在尝试编写一个代码来更新特定行的列中的布尔数据(我称为“状态”)。我在表中使用 while 循环来显示新注册的行和状态为 NULL 的行,我在 td 中分别放置了两个按钮(接受、拒绝),因此它们将显示给每个名称,我想要的是当单击接受按钮时,它会将其在表格中的行的状态设置为 1,当单击拒绝时,同样的事情,但设置为 0 而不是 1。

我对此进行了大量研究,但遇到了一个又一个的障碍,所以我真的希望你能在这方面提供帮助,非常感谢!

这是我的代码:

<table id="sHold" style="border:none;">

<?php
    $conn = mysqli_connect('localhost', 'root', '', 'srs-db') or die('ERROR: Cannot Connect='.mysql_error($conn));

    function getStudent () {
        global $conn;
        $query = "SELECT * FROM student_table WHERE status IS NULL;";
        $result = mysqli_query($conn, $query);

        $i = 1;

        while ($row = mysqli_fetch_array($result)) {
            $sId = $row['student_id'];
            $sName = $row['student_name'];

            echo "<tr id='sNew".$i."'>";
            echo "<td>".$i." - </td>";
            echo "<td>$sId</td>";
            echo "<td>$sName</td>";
            echo "<td><button name='sAcc".$i."'>Accept</button></td>";
            echo "<td><button name='sRej".$i."'>Reject</button></td>";
            echo "</tr>";

            $i++;
        }
        if (isset($_POST['sAcc'.$i])) {
            $row['status'] = 1;
        }
    }

    getStudent();

?>

</table>

【问题讨论】:

  • 为什么在循环之外使用 $i?
  • @Gacek 我第一次把它放在里面,但是数字没有增加,所以我把它放在外面,它工作正常
  • 当用户点击按钮时,您需要使用 AJAX 向服务器发送请求。该请求应包含该行中的$sId,以及他们是否单击了AcceptReject。那么AJAX服务器脚本就可以做UPDATE student_table SET status = ? WHERE student_id = ?
  • 如果您还不知道 Javascript,则需要学习 Javascript。
  • 代码丢失了很多。您需要 form 将数据发布到服务器或一些 javascript 以发送 Ajax 请求。阅读更多关于 PHP 的表单处理以了解更多信息。

标签: php html mysql


【解决方案1】:

首先,你错过了&lt;form&gt; 元素。没有它或没有 ajax,您的表单输入将毫无用处。

其次,您的$_POST 检查只会检查最后一项。因为在您退出循环后,$i 被设置为循环中的最后一个值。因此,您的示例仅适用于最后一项。

&lt;button&gt; 现在将发送带有索引sAccsRej 之一的$_POST。它的值将是您的条目的 ID。

<table id="sHold" style="border:none;">
<form method="post" action="">
<?php
    $conn = mysqli_connect('localhost', 'root', '', 'srs-db') or die('ERROR: Cannot Connect='.mysql_error($conn));

    function getStudent () {
        global $conn;
        $query = "SELECT * FROM student_table WHERE status IS NULL;";
        $result = mysqli_query($conn, $query);

        $i = 1;

        while ($row = mysqli_fetch_array($result)) {
            $sId = $row['student_id'];
            $sName = $row['student_name'];

            echo "<tr id='sNew".$i."'>";
            echo "<td>".$i." - </td>";
            echo "<td>{$sId}</td>";
            echo "<td>{$sName}</td>";
            echo "<td><button type='submit' name='sAcc' value='{$sId}'>Accept</button></td>";
            echo "<td><button type='submit' name='sRej' value='{$sId}'>Reject</button></td>";
            echo "</tr>";

            $i++;
        }
    }

    if (isset($_POST['sAcc']) && intval($_POST['sAcc'])) {
        $user_id = (int) $_POST['sAcc'];

        // Do the database update code to set Accept
    }
    if (isset($_POST['sRej']) && intval($_POST['sRej'])) {
        $user_id = (int) $_POST['sRej'];


        // Do the database update code to set Reject
    }



    getStudent();

?>
</form> 
</table>

Tip: 我假设你是初学者。我重做了你的代码。但是您不需要将此代码放入函数中。例如,使用函数来处理数据检索。不要用它来显示html。

【讨论】:

  • 非常感谢先生!!你是救生员,因为我需要这个来完成一个截止日期是本周日的项目。此外,您的假设是正确的,我确实是 PHP 的初学者。我只使用它,因为它是我使用数据库的项目的最佳选择
  • 您能解释一下这里做了什么以及为问题/答案的未来访问者做了什么吗?以及为什么他们的代码一开始就失败了。
【解决方案2】:
<table id="sHold" style="border:none;">

<?php
    $conn = mysqli_connect('localhost', 'root', '', 'srs-db') or die('ERROR: Cannot Connect='.mysql_error($conn));

    function getStudent () {
        global $conn;
        $query = "SELECT * FROM student_table where status='NULL'";
        $result = mysqli_query($conn, $query);

        $i = 1;

        while ($row = mysqli_fetch_array($result)) {
            $sId = $row['student_id'];
            $sName = $row['name'];

            echo "<tr id='".$sId."'>";
            echo "<td>".$i." - </td>";
            echo "<td>$sId</td>";
            echo "<td>$sName</td>";
            echo "<td><button name='sAcc' id='acc-".$sId."' onclick='approveuser(this.id)'>Accept</button></td>";
            echo "<td><button name='sRej' id='rec-".$sId."' onclick='approveuser(this.id)'>Reject</button></td>";
            echo "</tr>";

            $i++;
        }

    }

    getStudent();

?>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script>
function approveuser(id){

     trid=id.split('-')[1];
     //alert(trid);

    $.ajax({
        url: "update.php",
        type:"post",
        data:{ val : id },


        success: function(result){
            //alert(result);
            $('table#sHold tr#'+trid).remove();
            alert('Updated');

    }
    });
}
</script>
//The code give below this update.php pge(ajax page)
<?php
$data=$_POST['val'];
$status =explode('-',$data);
$user_id=$status[1];

if($status[0]=='acc'){
    $value=1;
}
elseif($status[0]=='rec'){
    $value=0;
}

  $conn = mysqli_connect('localhost', 'root', '', 'srs-db') or die('ERROR: Cannot Connect='.mysql_error($conn));
 mysqli_query($conn,"update student_table set status='$value' where student_id=$user_id");

?>

【讨论】:

  • 不刷新页面的ajax方法
  • 这个答案不是注入安全的或一般稳定的,因为没有使用准备好的语句。
猜你喜欢
  • 2016-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-17
  • 2010-12-10
  • 2019-01-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多