如何将信息保存在数组中以供会话调用php


How to save information in array for session to recall php

这是一本很烂的PHP书。它假定您已经知道如何使用PHP,并给出了完全不适用的示例来回答它提出的问题。我需要将任务保存到一个数组,所以当页面打开时,它会显示您以前所做的任务。web上几乎没有任何PHP的例子,除了极其简单和极其困难。

<?php
$lifetime = 60 * 60 * 24 * 365 ;    
session_set_cookie_params($lifetime, "/");
session_start();
if (empty($_SESSION['tasks'])) $_SESSION['tasks'] = array();
if (isset($_POST['tasklist'])) {
    $task_list = $_POST['tasklist'];
} else {
    $task_list = array();
}
$errors = array();
switch( $_POST['action'] ) {
    case 'add':
        $new_task = $_POST['newtask'];
        if (empty($new_task)) {
            $errors[] = 'The new task cannot be empty.';
        } else {
            $task_list[] = $new_task;
        }
        break;
    case 'delete':
             $task_index = $_POST['taskid'];
             unset($task_list[$task_index]);
            $task_list = array_values($task_list);
            break;
    }

task_list.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Task List Manager</title>
    <link rel="stylesheet" type="text/css" href="main.css"/>
</head>
<body>
    <div id="page">
    <div id="header">
        <h1>Task List Manager</h1>
    </div>
    <div id="main">
    <!-- part 1: the errors -->
    <?php if (count($errors) > 0) : ?>
    <h2>Errors</h2>
    <ul>
        <?php foreach($errors as $error) : ?>
            <li><?php echo $error; ?></li>
        <?php endforeach; ?>
    </ul>
    <?php endif; ?>
    <!-- part 2: the tasks -->
    <h2>Tasks</h2>
    <?php if (count($task_list) == 0) : ?>
        <p>There are no tasks in the task list.</p>
    <?php else: ?>
        <ul>
        <?php foreach($task_list 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($task_list as $task) : ?>
          <input type="hidden" name="tasklist[]" value="<?php echo $task; ?>"/>
        <?php endforeach; ?>
        <input type="hidden" name="action" value="add"/>
        <label>Task:</label>
        <input type="text" name="newtask" id="newtask" /> <br />
        <label>&nbsp;</label>
        <input type="submit" value="Add Task"/>
    </form>
    <br />

    <!-- part 4: the delete form -->
    <?php if (count($task_list) > 0) : ?>
    <h2>Delete Task</h2>
    <form action="." method="post" >
        <?php foreach($task_list as $task) : ?>
          <input type="hidden" name="tasklist[]" value="<?php echo $task; ?>"/>
        <?php endforeach; ?>
        <input type="hidden" name="action" value="delete"/>
        <label>Task:</label>
        <select name="taskid">
            <?php foreach($task_list as $id => $task) : ?>
                <option value="<?php echo $id; ?>">
                    <?php echo $task; ?>
                </option>
            <?php endforeach; ?>
        </select>
        <br />
        <label>&nbsp;</label>
        <input type="submit" value="Delete Task"/>
    </form>
    <?php endif; ?>
    </div><!-- end main -->
    </div><!-- end page -->
</body>
</html>

修改后的_SESSION中没有存储新的数组(切换到actions)。这样做:

$_SESSION['tasks'] = $task_list;

查看:

foreach($_SESSION['tasks'] as $value) {
    //display task
}

顺便说一句,这是可怕的想法。你应该使用数据库。一些主机块session_set_cookie_params和用户将丢失他的数据后清除浏览器缓存。

你也应该这样称呼它:

session_set_cookie_params($time);

第二个参数为可选参数

更详细的示例

核心:

//session start etc
if(!isset($_SESSION['tasks'])) $_SESSION['tasks'] = array();
if(isset($_POST['action']) {
    switch($_POST['action']) {
        case 'add':
            if(isset($_POST['newtask']) && !empty($_POST['newtask']))
                $_SESSION['tasks'][] = $_POST['newtask'];
            break;
        case 'remove':
            if(isset($_POST['taskid']))
                unset($_SESSION['tasks'][$_POST['taskid']]);
            break;
    }
}
显示:

echo '<form method=post><input type=hidden name=action value=remove>';
foreach($_SESSION['tasks'] as $k => $v) {
    echo $v.'<br />Remove: <input type=submit name=taskid value='.$k.'>';
}
echo '</form>';

添加:

<form method=post>
<input type=hidden name=action value=add>
<input type=text name=newtask>
<input type=submit>
</form>