我正在为我所在班级的任务列表管理器工作。我必须包含会话,我需要将每个任务推送到一个数组中,并能够从数组中删除它。
我认为我正确地做到了,但是当我运行程序时,任务列表显示为空。我想我可能没有正确地将任务添加到任务列表数组中,我真的想要一副新的眼睛来看一看,因为也许你会看到我没有的。
<?php
if (isset($_POST['tasklist'])) {
$task_list = $_POST['tasklist'];
} else {
$task_list = array();
}
// put the array in a session variable
$_SESSION['tasks']=$task_list;
$_SESSION['errors']=$errors;
//start the session to last one year
$lifetime = 60 * 60 * 24 * 365; // 1 year in seconds
ini_set('session.gc_maxlifetime', $lifetime);
//session_set_cookie_params($lifetime, '/');
session_start();
$errors = array();
switch( $_POST['action'] ) {
case 'add':
$new_task = $_POST['newtask'];
if (empty($new_task)) {
$_SESSION['errors'] = 'The new task cannot be empty.';
} else {
$_SESSION['tasks'] = $new_task;
}
break;
case 'delete':
$task_index = $_POST['taskid'];
unset($task_list[$task_index]);
$_SESSION['tasks'] = array_values($_SESSION['tasks']);
break;
}
include('task_list.php');
?>
<?php
session_start(); // Access the current session.
?>
</head>
<body>
<div id="page">
<div id="header">
<h1>Task List Manager</h1>
</div>
<div id="main">
<!-- part 1: the errors -->
<?php if (count($_SESSION['errors']) > 0) : ?>
<h2>Errors</h2>
<ul>
<?php foreach($_SESSION['errors'] as $error) : ?>
<li><?php echo $error; ?></li>
<?php endforeach; ?>
</ul>
<?php endif; ?>
<!-- part 2: the tasks -->
<h2>Tasks</h2>
<?php if (count($_SESSION['tasks']) == 0) : ?>
<p>There are no tasks in the task list.</p>
<?php else: ?>
<ul>
<?php foreach($_SESSION['tasks'] as $id => $task) : ?>
<li><?php echo $id + 1 . '. ' . $task; ?></li>
<?php endforeach; ?>
</ul>
<?php endif; ?>
<br />
<!-- part 3: the add form -->
<h2>Add Task</h2>
<form action="." method="post" >
<?php foreach($_SESSION['tasks'] as $task) :
array_push($_SESSION['tasks'],$task);
endforeach; ?>
<!--<input type="hidden" name="action" value="add"/> -->
<label>Task:</label>
<input type="text" name="<?php $_SESSION['tasks'] ?>" id="newtask" value="<?php echo $task; ?>" /> <br />
<label> </label>
<input type="submit" value="Add Task"/>
</form>
<br />
<!-- part 4: the delete form -->
<?php if (count($_SESSION['tasks']) > 0) : ?>
<h2>Delete Task</h2>
<form action="." method="post" >
<?php foreach($_SESSION['tasks'] as $task) :
$_SESSION['tasks']=array_diff($_SESSION['tasks'],$task);
endforeach; ?>
<!--<input type="hidden" name="action" value="delete"/> -->
<label>Task:</label>
<select name="taskid">
<?php foreach($_SESSION['tasks'] as $id => $task) : ?>
<option value="<?php echo $id; ?>">
<?php echo $task; ?>
</option>
<?php endforeach; ?>
</select>
<br />
<label> </label>
<input type="submit" value="Delete Task"/>
</form>
<?php endif; ?>
</div><!-- end main -->
</div><!-- end page -->
</body>
</html>
答案 0 :(得分:0)
您需要在与会话进行任何互动之前致电session_start()
。因此,如果文件是单独访问的,那么你需要它们。如果task_list.php
中仅包含index.php
,则只需将其移至index.php
的顶部。此外,在add
操作的逻辑中,您没有正确的语法将任务添加到$_SESSION['tasks']
数组,而是使用$new_task
中的任何内容覆盖它。
答案 1 :(得分:0)
这是来自Murach的PHP书。这本书像第10章一样变成了下铺。没有有效的解释或示例和问题假设您已经了解PHP,因为它不会教您需要知道的内容。