使用表单提交更新数据库中选定的下拉值

Posted

技术标签:

【中文标题】使用表单提交更新数据库中选定的下拉值【英文标题】:update selected dropdown values in database with form submit 【发布时间】:2016-11-11 06:55:38 【问题描述】:

用户注册到站点。管理员将登录并查看用户列表。

我正在尝试为管理员提供一个选项来选择复选框并通过下拉提交更改用户的状态。当我尝试下面的代码时,我可以选择 "Y/N/A" ,点击 submit 按钮后显示消息 "Added Successfully" ,但它不更新值 在数据库中。

表名:tbl_users,列:userStatus [enum],值:Y、N、A

表格

<form method="post" action="ajax1.php">
 <select name="userStatus">
 <option value="N">N</option>
 <option value="Y">Y</option>
 <option value="A">A</option>
 </select>

 <button type="submit" name="submit" >Submit</button>

 </form>

ajax1.php

if(isset($_POST["submit"]))


$userStatus=$_POST["userStatus"];

$conn = new Database();
$stmt = $conn->dbConnection()->prepare("INSERT INTO tbl_users (userStatus) VALUES ('$userStatus')"); 
echo " Added Successfully ";

显示用户复选框、ID、姓名、电子邮件的代码

$stmt = $user_home->runQuery("SELECT * FROM tbl_users");
$stmt->execute(array(":uid" => $_SESSION['userSession']));
$row = $stmt->fetch(PDO::FETCH_ASSOC);
$stmt->execute();
$status = array('Y'=>'Verified','N'=>'Not verified' , 'A'=>'Approved'); 

echo "<table>";
echo "<tr>
    <td></td>
    <td>id</td>
    <td>name</td>
    <td>email</td>
</tr>";

while($data = $stmt->fetch())
 
    echo "<tr>
        <td> <input type='checkbox' > </td>
        <td>" . $data['userID'] . "</td>
        <td>" . $data['name'] . "</td>
        <td>" . $data['email'] . "</td>
</tr>";

echo "</table>";

我在发布问题之前进行了很多研究和尝试,在某些链接中我看到我们需要使用 javascript,但在其他一些链接中,他们提到我们只能使用 php 来实现。 我对编码很陌生,请帮助我

编辑

按照以下回答后,我将代码更新为$stmt = $conn-&gt;dbConnection()-&gt;prepare('UPDATE tbl_users SET userStatus = ? WHERE userID = ?');

【问题讨论】:

你在做什么,你试图在用户表中插入状态。 @HappyCoding 是的,我正在尝试更新status... 之前只有status 值......我需要根据选定的值更改那些values.. ... 请检查 mysql UPDATE。 这是解决问题的一种方式。请制作一个调用 ajax 请求的 java 脚本函数来更新相同的内容,并且您应该传递所需的变量来查询相同的内容。然后,您应该在下拉 on-change 事件上调用该函数。这样你就可以实现了。 @HappyCoding 我试过这样:$stmt = $conn-&gt;dbConnection()-&gt;prepare('UPDATE tbl_users SET userStatus = ? WHERE userID = ?'); 但仍然没有运气..... 【参考方案1】:
    <form method="post" action="ajax1.php">
        <select name="userStatus" id="userStatus" onchange="UpdateStatus();">
            <option value="N">N</option>
            <option value="Y">Y</option>
            <option value="A">A</option>
        </select> 
        <button type="submit" name="submit" >Submit</button> 
    </form>
    <script> 
        function UpdateStatus()
            var staus=$('#userStatus :selected').val();

            allCheckedBoxes="";
            $("input[id^='checkBoxId']:visible:checked").each(function() // this is to get checked checkbox vaues to update which user to update
                allCheckedBoxes=allCheckedBoxes+$(this).val()+","; // comaseparated valuse
            ); 

            var dataString="allCheckedBoxes="+allCheckedBoxes+"&staus="+staus;

            $.post("aupdate_status.php",'allCheckedBoxes='+allCheckedBoxes'&staus='+staus,function(result,status,xhr)
            
                if( status.toLowerCase()=="error".toLowerCase() )
                 alert("An Error Occurred.."); 
                else
                
                    alert(result);
                
            )
            .fail(function() alert("something went wrong. Please try again") );
        
    </script>
    update_status.php
    <?php 
    $staus=$_POST['staus'];
    $allCheckedBoxes=$_POST['allCheckedBoxes'];
    $ArrallCheckedBoxes=explode(",",$allCheckedBoxes);
    foreach($ArrallCheckedBoxes as $tempBoxes)
        $sqlQueryToUpdate=" UPDATE tbl_users SET userStatus = '".$staus."'  WHERE userID = '".$tempBoxes."' ;";
        $conn = new Database();
        $stmt = $conn->dbConnection()->prepare($sqlQueryToUpdate); 
        echo " ok success";
    
    ?>

Please try this . This is working in my case. This will work you too. Don't forget add jquery in your coding. 

【讨论】:

谢谢,但我收到了这个 Parse 错误:语法错误,$ArrallCheckedBoxes=explode("," $allCheckedBoxes); 行中的意外'$allCheckedBoxes' (T_VARIABLE) @abcd 现在请检查我已经编辑了答案。爆炸的语法是错误的,这是错误的原因。请用 $ArrallCheckedBoxes=explode(",",$allCheckedBoxes); 重新调整该行。 我替换了,现在我得到了这个错误:Notice: Undefined index: staus in line $staus=$_POST['staus']; & Notice: Undefined index: allCheckedBoxes in line $allCheckedBoxes=$_POST['allCheckedBoxes'];【参考方案2】:

你正在做的实际上是用这一行向表中插入一个新行:

"INSERT INTO tbl_users (userStatus) VALUES ('$userStatus')"

你应该做一个UPDATE,而不是插入。你基本上想要做的是UPDATE用户WHERE用户userID(或任何id列的名称)是所选用户的id。

见MySQL UPDATE。

【讨论】:

我试过这样:$stmt = $conn-&gt;dbConnection()-&gt;prepare('UPDATE tbl_users SET userStatus = ? WHERE userID = ?'); 但它对我没有用,我会检查上面的链接..... 另见:***.com/questions/6514649/…

以上是关于使用表单提交更新数据库中选定的下拉值的主要内容,如果未能解决你的问题,请参考以下文章

从 sql server 获取选定的值到 php 中的下拉列表

表单提交时更改的值(下拉表单)

从下拉列表中更新所选值的 mysql 记录

使用表单中的组合框中的选定值访问更新表

如何在layui中使用表单

仅为提交的表单编辑的值更新数据库值