<html>
<head>
<meta http-equiv="content-type" charset="utf-8" />
</head>
<body>
<?php
/*
*原形文档的应用
*/
function make_list($parent){
global $tasks;
echo '<ol>';
//遍历每个有子菜单的项
foreach($parent as $task_id => $todo){
/*
*原形文档输出,注意结束符EOT要在新行的最前端
*
*/
echo <<<EOT
<li><input type="checkbox" name="tasks[$task_id]" value="done" />$todo
EOT;
//判断这项是否有子菜单,有的话,用相同的方法遍历
//判断的方法是,是否有数据项以这个项的路径为父路径
if(isset($tasks[$task_id])){
make_list($tasks[$task_id]);
}
echo '</li>';
}
echo '</ol>';
}
$dbc = mysqli_connect('localhost','root','gonglishan520','xsphpdb') or die('could connect to database');
if(isset($_POST['submitted']) && isset($_POST['tasks']) && is_array($_POST['tasks'])){
$q = 'update tasks set date_completed=NOW() where task_id in(';
foreach($_POST['tasks'] as $task_id => $v){
$q .= $task_id.', ';
}
//去除末尾的', ';
$q = substr($q,0,-2).')';
$r = mysqli_query($dbc,$q);
if(mysqli_affected_rows($r) == count($_POST['tasks'])){
echo '<p>all completed</p>';
}else{
echo '<p>not all completed</p>';
}
}
//先把所有项取出来
$q = 'select task_id,parent_id,task from tasks where date_completed="0000-00-00 00:00:00" order by parent_id,date_added asc';
$r = mysqli_query($dbc,$q);
$tasks = array();
//根据父路径,自身路径重新组合数组
while(list($task_id,$parent_id,$task) = mysqli_fetch_array($r,MYSQLI_NUM)){
$tasks[$parent_id][$task_id] = $task;
}
if(empty($tasks)){
die('not data yet');
}else{
echo '<form action="test.php" method="post">';
make_list($tasks[0]);
echo '<input name="submitted" type="hidden" value="true">
<input name="submit" type="submit" value="update">
</form>
';
}
?>
</body>
</html>
数据表结构图: