我的目标是允许用户更新当前是否有多个成员处于活动状态。让我解释一下到目前为止我做了什么。
这是我的表单/表在浏览器中的样子:
唯一可以修改的部分显然是带有复选框输入的“当前发布者”列。这是生成表的代码:
public function selectAllMembers()
{
//Declerations
$i ="";
$stmt = $this->dbh->prepare("SELECT UserId, Firstname, Lastname, Active, UserPriv FROM Members;"); //Select ALL data from table, Perhaps had a limit later
$stmt->execute(); //Execute the query
$result = $stmt->fetchAll(PDO::FETCH_NUM); //Fetch all of the data
//Display results
echo "<form name=\"UpdateUser\" method=\"Post\" action=\"\">";
echo "<table border='1'>
<tr>
<th>User Id </th>
<th>First Name</th>
<th>Last Name</th>
<th>Current Publisher</th>
<th>User Priveleges</th>
</tr>
<tr>";
if($result == false)
echo "<td>For some reason, there are no memebers.</td></tr></table>"; //Just in case there are no members...:)
else
{
foreach($result as $row)
foreach($row as $col)
{
$i++;
switch ($i) {
case 4: //Is it a current publisher?
if($col == 0)
echo "<td><input type=\"checkbox\" class=\"current\" value=\"1\" ></td>";
else
echo "<td><input type=\"checkbox\" class=\"current\" value=\"1\" checked ></td>";
break;
case 5: //Do they have user priveleges?
if($col == 0)
echo "<td>No</td>";
else
echo "<td>Yes</td>";
echo "</tr><tr>"; //start a new row
$i=0; //reset counter
break;
default:
echo "<td>$col</td>";
}
}
echo "</tr></table>";
echo "</form>";
}
}
switch语句中的case 4和case 5确定它是true还是false(我在MySQL数据库中分别使用1或0表示true或false)。同样在案例4中,我将true或false转换为输入复选框。
我想做的是提交时(我的表单还没有提交按钮),有一个功能可以比较“当前发布者”列的任何更改。如果有任何更改,请更新相应的表。现在,每个人都很活跃。说Bob Smith不再活跃,我希望他在表中的值变为false。
我有几个问题实现这个。
1)如何修改我的复选框,使其可以与PHP进行比较/处理?这就是他们现在的情况:
<input type="checkbox" value="1">
我已经看到了一些关于如何提交多个复选框并随后使用PHP处理它们的示例。例如,我可以修改它们:
<input type="checkbox" name="member[]" value="1">
我的想法是使用用户ID作为名称,因为它始终是唯一的。然后我也可以在SQL查询中使用它来识别正确的用户。
2)如何根据输入更新我的表格?我应该只使用更新查询更新所有内容,还是只查看更改了哪些值?什么是最有效的?
任何帮助都将受到赞赏 - 特别是以示例的形式。如果有任何问题,请将它们放在评论中。我希望我传达了我想要做的事情的关键。
注意:如果没有“选中”复选框,也会出现无法提交的问题。这有什么变通方法吗?我已经看到了一个javascript解决方法,但是假设用户启用了javascript(我不知道谁不再使用,但我至少应该考虑这种可能性)。
答案 0 :(得分:0)
考虑到内容,您只能打印&#34;名字/姓氏/当前发布者/用户权限&#34;并保留用户ID;
相反!,使用用户ID作为链接。我知道你知道如何创建基本表,你可以添加这种选项
<强> @ testallmembers.php 强>
<table>
<tr>
<td><a href="edit.php?id=<?php echo $row['user_id']?>">Edit</a></td>
<td>F_NAME</td>
<td>L_NAME</td>
<td>CURRENT_PUBLISHED</td>
<td>USER_PRIVILEGE</td>
</tr>
</table>
使用$ row [&#39; user_id&#39;]或您在sql中拥有的任何行索引都应该是可编辑的。
<强> @ edit.php 强>
在edit.php中你必须使用这个
if(isset($_GET['id']) && !empty($_GET['id'])) {
/*
* use mysqli_real_escape_string to quote the id, for anti sql attacks
* if you know PDO then use predefined.
*/
//[SQL CODE HERE] - search the $_GET['id'] basing from the user_id
/* then print the "EDITABLE FORM"
* SAMPLE: <form method='post' action='edit.php'>
* <input type='text' name='f_name' value='<?php $row['f_name']?>' />
* <input type='submit' name='submit'/>
* </form>
*/
//using $_POST['submit'] to get the EDITABLE form
}elseif(isset($_POST['submit'])) {
/*
* Save the values to your database, you also need to check first the input values for anti sql injection..
*/
}
答案 1 :(得分:0)
我认为你正在处理db result(关联数组)。 试试这个:
$stmt = $this->dbh->prepare("SELECT UserId, Firstname, Lastname, Active, UserPriv FROM Members;"); //Select ALL data from table, Perhaps had a limit later
$stmt->execute(); //Execute the query
$result = $stmt->fetchAll(PDO::FETCH_NUM); //Fetch all of the data
//..... your html.....
for ($i = 0; $i < count($result); $i++)
{
if($result[$i]['currentPublisher'] == 0)
{
echo "<td><input type=\"checkbox\" name=\"$result[$i]['currentPublisher']\" class=\"current\" value=\"0\" ></td>";
// NOTE: The value need to be 0
}
else
{
echo "<td><input type=\"checkbox\" name=\"$result[$i]['currentPublisher']\" class=\"current\" value=\"1\" checked ></td>";
}
}
//..... your html.....