Tôi đã thêm một số cách thực sự hacky để cập nhật. Bạn cần phải đề phòng SQL Injection và những thứ xấu khác khi sử dụng post
... đảm bảo rằng bạn luôn xác thực và làm sạch dữ liệu của mình. Cách "hacky" hoạt động bởi vì chúng tôi đang làm việc với các giá trị số nguyên và chúng dễ dàng được làm sạch.
Ảnh chụp màn hình:
Đây là bảng của tôi ... Tôi đã gọi nó như vậy cho stackoverflow ...
+----+-------+-------+-------+-------+-------+-------+-------+-------+
| id | week1 | week2 | week3 | week4 | week5 | week6 | week7 | week8 |
+----+-------+-------+-------+-------+-------+-------+-------+-------+
| 1 | | | | | | | | |
| 2 | 1 | | | | | | | |
| 3 | 1 | | 1 | | | | | |
| 4 | 1 | | 1 | | 1 | | | |
| 5 | 1 | | 1 | | 1 | | 1 | |
+----+-------+-------+-------+-------+-------+-------+-------+-------+
Đây là tệp PHP của tôi .... (dán nó vào một tài liệu PHP trống để chạy, nó tự chứa bên cạnh việc thay đổi kết nối và truy vấn db)
<?php
$mysqli = new mysqli("localhost", "root", "password", "test");
if (!empty($_POST)) {
print "<pre>POST VARS: \n".print_r($_POST,true)."</pre>";
foreach($_POST as $i => $data)
{
if (substr($i,0,3)=='row' && is_numeric(substr($i,3)))
{
$row_id = substr($i,3);
$data = array_flip($data);
$values = array();
for ($x=1; $x<9; $x++) {
$values[] = "week$x = ". ((isset($data[$x])) ? '1' : '0');
}
$stmt = "\nupdate so ".
"\n set ".implode(", \n ",$values).
"\n where id = $row_id; \n";
$update = $mysqli->query($stmt);
if ($update) { print "Row $row_id updated successfully.<br/>"; }
}
print "<br/>";
}
}
$result = $mysqli->query("select * from so");
$mysqli->close();
?>
<form method="post" id="updating" action="<?php $_PHP_SELF ?>">
<?php
while($row = $result->fetch_object())
{
$count = 1;
print "<div style='border:1px solid black; display:inline-block;'>\n";
print "Row ".$row->id."<br/>\n";
while($count < 9)
{
$week = "week$count";
$checkvalue = $row->{$week};
?>
Week<?php echo $count ?> <input type="checkbox" id="Week<?php echo$count;?>" name="row<?php echo $row->id
?>[]" value="<?php echo $count;?>" <?php if($checkvalue==1){
?> checked="checked" <?php } ?> />
<?php
$count++;
}
print "</div><br/><br/>\n\n\n";
}
?>
<input name="update" type="submit" id="update" value="Update">
</form>
"; foreach ($ _ POST as $ i => $ data) {if (substr ($ i, 0,3) =='row' &&is_numeric (substr ($ i, 3))) {$ row_id =substr ($ i, 3); $ data =array_flip ($ data); $ giá trị =array (); for ($ x =1; $ x <9; $ x ++) {$ giá trị [] ="tuần $ x =". ((Isset ($ data [$ x]))? '1':'0'); } $ stmt ="\ ncập nhật". "\ n set" .implode (", \ n", $ giá trị). "\ n trong đó id =$ row_id; \ n"; $ update =$ mysqli-> query ($ stmt); if ($ update) {print "Đã cập nhật thành công hàng $ row_id. "; }} print "
"; }} $ result =$ mysqli-> query ("select * from so"); $ mysqli-> close ();?>
Đây là $_POST
sau khi gửi:
POST VARS:
Array
(
[row2] => Array
(
[0] => 1
)
[row3] => Array
(
[0] => 1
[1] => 3
)
[row4] => Array
(
[0] => 1
[1] => 3
[2] => 5
)
[row5] => Array
(
[0] => 1
[1] => 3
[2] => 5
[3] => 7
)
[update] => Update
)
"Nguồn xem" của tôi về biểu mẫu:
<form method="post" id="updating" action="">
<div style='border:1px solid black; display:inline-block;'>
Row 1<br/>
Week1 <input type="checkbox" id="Week1" name="row1[]" value="1" />
Week2 <input type="checkbox" id="Week2" name="row1[]" value="2" />
Week3 <input type="checkbox" id="Week3" name="row1[]" value="3" />
Week4 <input type="checkbox" id="Week4" name="row1[]" value="4" />
Week5 <input type="checkbox" id="Week5" name="row1[]" value="5" />
Week6 <input type="checkbox" id="Week6" name="row1[]" value="6" />
Week7 <input type="checkbox" id="Week7" name="row1[]" value="7" />
Week8 <input type="checkbox" id="Week8" name="row1[]" value="8" />
</div><br/><br/>
<div style='border:1px solid black; display:inline-block;'>
Row 2<br/>
Week1 <input type="checkbox" id="Week1" name="row2[]" value="1" checked="checked" />
Week2 <input type="checkbox" id="Week2" name="row2[]" value="2" />
Week3 <input type="checkbox" id="Week3" name="row2[]" value="3" />
Week4 <input type="checkbox" id="Week4" name="row2[]" value="4" />
Week5 <input type="checkbox" id="Week5" name="row2[]" value="5" />
Week6 <input type="checkbox" id="Week6" name="row2[]" value="6" />
Week7 <input type="checkbox" id="Week7" name="row2[]" value="7" />
Week8 <input type="checkbox" id="Week8" name="row2[]" value="8" />
</div><br/><br/>
<div style='border:1px solid black; display:inline-block;'>
Row 3<br/>
Week1 <input type="checkbox" id="Week1" name="row3[]" value="1" checked="checked" />
Week2 <input type="checkbox" id="Week2" name="row3[]" value="2" />
Week3 <input type="checkbox" id="Week3" name="row3[]" value="3" checked="checked" />
Week4 <input type="checkbox" id="Week4" name="row3[]" value="4" />
Week5 <input type="checkbox" id="Week5" name="row3[]" value="5" />
Week6 <input type="checkbox" id="Week6" name="row3[]" value="6" />
Week7 <input type="checkbox" id="Week7" name="row3[]" value="7" />
Week8 <input type="checkbox" id="Week8" name="row3[]" value="8" />
</div><br/><br/>
<div style='border:1px solid black; display:inline-block;'>
Row 4<br/>
Week1 <input type="checkbox" id="Week1" name="row4[]" value="1" checked="checked" />
Week2 <input type="checkbox" id="Week2" name="row4[]" value="2" />
Week3 <input type="checkbox" id="Week3" name="row4[]" value="3" checked="checked" />
Week4 <input type="checkbox" id="Week4" name="row4[]" value="4" />
Week5 <input type="checkbox" id="Week5" name="row4[]" value="5" checked="checked" />
Week6 <input type="checkbox" id="Week6" name="row4[]" value="6" />
Week7 <input type="checkbox" id="Week7" name="row4[]" value="7" />
Week8 <input type="checkbox" id="Week8" name="row4[]" value="8" />
</div><br/><br/>
<div style='border:1px solid black; display:inline-block;'>
Row 5<br/>
Week1 <input type="checkbox" id="Week1" name="row5[]" value="1" checked="checked" />
Week2 <input type="checkbox" id="Week2" name="row5[]" value="2" />
Week3 <input type="checkbox" id="Week3" name="row5[]" value="3" checked="checked" />
Week4 <input type="checkbox" id="Week4" name="row5[]" value="4" />
Week5 <input type="checkbox" id="Week5" name="row5[]" value="5" checked="checked" />
Week6 <input type="checkbox" id="Week6" name="row5[]" value="6" />
Week7 <input type="checkbox" id="Week7" name="row5[]" value="7" checked="checked" />
Week8 <input type="checkbox" id="Week8" name="row5[]" value="8" />
</div><br/><br/>
<input name="update" type="submit" id="update" value="Update">
</form>
chỉnh sửa
Tôi quay lại câu trả lời này để tham khảo điều gì đó và tôi chỉ nhận ra rằng tôi đang sử dụng lại ID
giá trị cho các hộp kiểm. Nó không phải là một vấn đề trong tình huống này nhưng nó luôn luôn là một thực tế xấu. Mỗi hộp kiểm phải có một ID duy nhất trên trang. Vì vậy, .... nó thực sự phải là id="row1week1"
, id="row1week2"
... id="row8week1"
... id="row8week8"
.