数据库:
+------+------+
| id |status|
+------+------+
| 50 | 2 |
+------+------+
| 51 | 0 |
+------+------+
| 52 | 1 |
+------+------+
正如你所看到的那样,有一个名为id的列和另一个名为status的列,表示sth的当前状态(2 =完成,1 =在工作中,0 =打开)
所以我做了一个小GUI,您可以通过选择选项输入字段选择当前状态,它还预先选择当前状态记录。
function generateSelect($name = '', $options = array(), $default = '') {
$html = '<select name="'.$name.'">';
foreach ($options as $option => $value) {
if ($value == $default) {
$html .= '<option value='.$value.' selected="selected">'.$option.'</option>';
} else {
$html .= '<option value='.$value.'>'.$option.'</option>';
}
}
$html .= '</select>';
return $html;
}
正如我所提到的,数据库中的每个数字代表一个状态为
的文本$statusArray=array("Done" => "2", "In Work" => "1","Open" => "0");
这就是每个id的所有选择选项字段的生成:
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
$strStatus = generateSelect("stat", $statusArray, $row['status']);
echo '<tr><td>' . $row['id']. '</td><td>'.$strStatus.'</td></tr>';
我现在要做的是,当按下提交按钮时,它会更新所有状态记录。
我尝试过:
1.确认所选的
function getSelected(){
$value="";
if($_POST['status']=="0")
$value="0";
else if($_POST['status']=="1")
$value="1";
else if($_POST['status']=="2")
$value="2";
else if($_POST['status']=="3")
$value="3";
return $value;
} 2.可能存在问题的SQL语句
$tmp = getSelected();
$sql = "UPDATE form SET status='$tmp' WHERE *";
另一种选择是保存编辑的那个,也许使用选择字段中的onchange方法? 非常感谢我能得到的每一个帮助:)提前花时间查看代码。
更新
为快速回答和额外更新@MarioZ
然而,它似乎仍然不适合工作。 :/也许你可以帮助我^^
首先只用$ row ['id']工作正常,因为我希望能够更新我添加的更多字段。“['status']”
$strStatus = generateSelect($row['id']."['status']", $statusArray, $row['status']);
并且也尝试了这个,但没有成功。
$personArray=array("Zivildiener" => "4", "Schmikl" => "3", "Poier" => "2","Dirnböck" => "1","Tom" => "0");
$strPerson = generateSelect($row['id']."['person']", $personArray, $row['person']);
我还添加了这个也很好,但仅适用于状态:/
foreach($_POST as $key => $value) {
$sql = "UPDATE form SET status='$value' WHERE id = $key";
$result = $conn->query($sql); }
Idk老实说,我并没有真正了解foreach循环,但是它以某种方式工作,你可能需要知道数据库中有更多的列我没有听,但尽管如此,你给出的第一个答案完美无缺,没有任何线索怎么样:x所以如果你有时间我会非常感谢你的帮助:)
答案 0 :(得分:0)
您需要将每行的ID作为每个选择的名称传递:
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
$strStatus = generateSelect($row['id'], $statusArray, $row['status']);
echo '<tr><td>' . $row['id']. '</td><td>'.$strStatus.'</td></tr>';
因此,当您检索$ _POST数据时,您将id作为键,选项的值作为值:
foreach($_POST as $key => $value) {
$sql = "UPDATE form SET status='$value' WHERE id = $key";
}
您可以在该循环中调整函数getSelected()
,以确保查询中没有注入其他值。
最终更新:
这是一种做你想做的事情,我写的很容易理解并适用于你的代码:
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<form name="tasks" action="<?php $_SERVER['PHP_SELF']; ?>" method="post">
<?php
// Names of fields
$status_list[] = "open";
$status_list[] = "in work";
$status_list[] = "done";
$person_list[] = "John";
$person_list[] = "Bran";
$person_list[] = "Edd";
$task_list[50] = "Kill enemies";
$task_list[51] = "Avenge father";
$task_list[52] = "Sleep";
// Database conection
$db = new mysqli("localhost", "root", "", "test");
// Update database only if post
if(!empty($_POST)) {
foreach($_POST as $key => $value){
if($db->query("UPDATE change_status SET status = {$value['status']}, person = {$value['person']} WHERE id = $key ")) {
echo "<span>".$key." - UPDATED!</span>";
} else {
echo "<span>".$key." - FAILED!</span>";
}
}
}
// Get database
$query = $db->query("SELECT * FROM change_status");
// Draw the HTML content
$form = "";
while($result = $query->fetch_array()) {
$form .= '<div>';
$form .= '<span>'.$task_list[$result['id']].'</span>';
$form .= ' - ';
$form .= '<select name="'.$result['id'].'[status]">';
foreach($status_list as $key => $value) {
$form .= '<option value="'.$key.'"';
$form .= $result['status'] == $key? " selected" : "";
$form .= '>'.$value.'</option>';
}
$form .= '</select>';
$form .= '<select name="'.$result['id'].'[person]">';
foreach($person_list as $key => $value) {
$form .= '<option value="'.$key.'"';
$form .= $result['person'] == $key? " selected" : "";
$form .= '>'.$value.'</option>';
}
$form .= '</select></div>';
}
echo $form; // display html content
?>
<input type="submit">
</form>
</body>
</html>