从表中批准用户-复选框


Approve users from table - check box

我正在编写一个php脚本来批准在我的页面上注册的用户,但当我想批准他们时,我遇到了一个小问题。这是我能到达的最远的地方。

表:

<?php
mysql_connect("localhost", "root", "") or die(mysql_error());
mysql_select_db("activation") or die(mysql_error());
//User Approval Script
$result2 = mysql_query("SELECT * FROM userinfo WHERE status='0'") 
or die(mysql_error());
echo "<table border='1'>";
echo "<tr> <th>Name</th> <th>Action</th> <th>Hours</th> <th>Approve</th> </tr>";
while($row = mysql_fetch_array( $result2 )) {
 // Print out the contents of each row into a table
 echo "<tr><td>"; 
 echo $row['first_name'];
 echo "</td><td>"; 
 echo $row['last_name'];
 echo "</td>"; 
 echo "<td>"; 
 echo $row['email'];
 echo "</td><td>";
 echo "<form action='"approve.php'" method='"post'"><input name='"approve[]'" type='"checkbox'">";
 echo "</td></tr>";
}
echo "</table>";
echo "<input type='"submit'" value='"Approve'"></form>";
?>

approve.php

<?php
mysql_connect("localhost", "root", "") or die(mysql_error());
mysql_select_db("activation") or die(mysql_error());
$ticked = $_POST['approve'];
foreach($ticked as $id) {
     mysql_query("UPDATE status SET approved = '1' WHERE `ID` = '$id'");
}
unset($id);  
?>

我也想知道如何向每个被批准的用户发送电子邮件。。。

提前感谢大家!

编辑:

approve.php上的页面全部为空,状态没有得到更新。

你能试试吗,将<form>标签从复选框附近移到顶部,并用$row["id"] 添加复选框值

<?php
        mysql_connect("localhost", "root", "") or die(mysql_error());
        mysql_select_db("activation") or die(mysql_error());
        //User Approval Script
        $result2 = mysql_query("SELECT * FROM userinfo WHERE status='0'") 
        or die(mysql_error());
        echo "<form action='"approve.php'" method='"post'"><table border='1'>";
        echo "<tr> <th>Name</th> <th>Action</th> <th>Hours</th> <th>Approve</th> </tr>";
        while($row = mysql_fetch_array( $result2 )) {
         // Print out the contents of each row into a table
         echo "<tr><td>"; 
         echo $row['first_name'];
         echo "</td><td>"; 
         echo $row['last_name'];
         echo "</td>"; 
         echo "<td>"; 
         echo $row['email'];
         echo "</td><td>";
         echo "<input name='"approve[]'" type='"checkbox'" value='".$row["id"]."' >";
         echo "</td></tr>";
        }
        echo "</table>";
        echo "<input type='"submit'" value='"Approve'"></form>";
?>

在approve.php中,

<?php
    mysql_connect("localhost", "root", "") or die(mysql_error());
    mysql_select_db("activation") or die(mysql_error());
    $ticked = $_POST['approve'];
    foreach($ticked as $id) {
         mysql_query("UPDATE status SET approved = '1' WHERE `ID` = '$id'");
         $message ='Approved message';
         mail('to email address', 'Your Subject', $message);
    }
 ?>

注意:使用mysqli_*函数或PDO代替使用mysql_*函数(已弃用)

您试图在循环while中打开表单,但在复选框中错过了属性value

更改

echo "<form action='"approve.php'" method='"post'"><input name='"approve[]'" type='"checkbox'">";

echo '<input name="approve" type="checkbox" value='.$row["id"].'>';

然后将echo "<form action ='approve.php' method='post'>";置于while($row = mysql_fetch_array( $result2 )) { 之上

你应该有一个大表单,有很多复选框(我想这就是你的第二个页面所基于的),但复选框是<input> s,而不是<form> s。你的最终HTML应该看起来像:

<form>
    <table>
    ...
    <td><input type="checkbox" name="approve[]" value="USERIDTHATYOUWANTTOAPPROVE"></td>
    ...
    <td><input type="checkbox" name="approve[]" value="OTHERUSERIDTHATYOUWANTTOAPPROVE"></td>
    ...
    </table>
</form>

还有

  • 您的代码非常容易受到SQL注入的影响。请参阅如何防止PHP中的SQL注入?为什么我不应该在PHP中使用mysql_*函数
  • 您应该使用准备好的语句来卸载代码中的工作(您只发送一次查询,每次都更改参数)