首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP Todo CheckList检查功能

PHP Todo CheckList检查功能
EN

Stack Overflow用户
提问于 2012-05-18 22:40:40
回答 1查看 465关注 0票数 1

我需要一个PHP ToDo列表的帮助。除了将其从已完成的列表移动到仍然需要做的列表的复选框之外,我已经完成了大部分工作。以下是我到目前为止拥有的代码:

对于编辑屏幕:

代码语言:javascript
复制
%% views/header.html %%
        <h1>{{$title}}</h1>
        <div class='inputs'>
        <form action="@@todo/update@@" method="post">
            <input type="hidden" id="id" name="id" value="{{$todo['id']}}" />
            <label for="description">Description:</label>
            <input type="text" id="description" name="description" value="{{$todo    ['description']}}" />
            <label for="done">Done?:</label>
            <input type="checkbox" id="done" name="done" value="1" />
            <input type="submit" value="Update" />
        <form>
    </div>
    <p><a href="@@index@@"><< Back</a></p>
    %% views/footer.html %%

对于todo.inc文件:

代码语言:javascript
复制
<?php
include_once "include/util.inc";
include_once "models/todo.inc";
function safeParam($arr, $index, $default) {
    if ($arr && isset($arr[$index])) {
        return $arr[$index];
    }
    return $default;
}
function get_view($params) {
    $id = safeParam($params, 0, false);
    if ($id === false) {
        die("No todo id specified");
    }
    $todo = findToDoById($id);
    if (!$todo) {
        die("No todo with id $id found.");
    }
    // @formatter:off
    renderTemplate(
        "views/todo_view.inc",
        array(
            'title' => 'Viewing To Do',
            'todo' => $todo
        )
    );
    // @formatter:on
}
function get_list($params) {
    $todos = findAllCurrentToDos();
    $dones = findAllDoneToDos();
    // @formatter:off
    renderTemplate(
        "views/index.inc",
        array(
            'title' => 'To Do List',
            'todos' => $todos,
            'dones' => $dones
        )
    );
    // @formatter:on
}
function get_edit($params) {
    $id = safeParam($params, 0, false);
    if (!$id) {
        die("No todo specified");
    }
    $todo = findToDoById($id);
    if (!$todo) {
        die("No todo found.");
    }
    // @formatter:off
    renderTemplate(
        "views/todo_edit.inc",
        array(
            'title' => 'Editing To Do',
            'todo' => $todo
        )
    );
    // @formatter:on
}

function post_add($params) {
    if (!isset($_POST['description'])) {
        die("no description given");
    }
    $description = htmlentities($_POST['description']);
    addToDo($description);
    redirectRelative("index");
}

function validate_present($elements) {
    $errors = '';
    foreach ($elements as $element) {
        if (!isset($_POST[$element])) {
            $errors .= "Missing $element\n";
        }
    }
    return $errors;
}

function post_update($params) {
    $errors = validate_present(array('id', 'description', 'done'));
    if ($errors) {
        die($errors);
    }
    $id = $_POST['id'];
    $description = $_POST['description'];
    $done = $_POST['done'];
    updateToDo($id, $description, $done);
    redirectRelative("todo/view/$id");
    }

function get_delete($params) {
    $id = safeParam($params, 0, false);
    if (!$id) {
        die("No todo specified");
    }
    $todo = findToDoById($id);
    if (!$todo) {
        die("No todo found.");
    }
    deleteToDo($id);
    redirectRelative("index");
}
?>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-19 01:27:17

您的错误存在于这两个函数中。

代码语言:javascript
复制
function validate_present($elements) {
    $errors = '';
    foreach ($elements as $element) {
        if (!isset($_POST[$element])) {
            $errors .= "Missing $element\n";
        }
    }
    return $errors;
}

function post_update($params) {
    $errors = validate_present(array('id', 'description', 'done'));
    if ($errors) {
        die($errors);
    }
    $id = $_POST['id'];
    $description = $_POST['description'];
    $done = $_POST['done'];
    updateToDo($id, $description, $done);
    redirectRelative("todo/view/$id");
}

当被post_update调用时,您正在尝试验证validate_present中是否存在donedone显然不能存在,因为当复选框未被选中时,它不会被发送到服务器。$_POST甚至不包含该变量,因此它返回缺少的元素(因为从技术上讲是缺少的)。我将不使用validate_present,并按如下方式更改post_update

代码语言:javascript
复制
function post_update($params) {
    $errors = validate_present(array('id', 'description'));
    if ($errors) {
        die($errors);
    }
    $id = $_POST['id'];
    $description = $_POST['description'];
    $done = (isset($_POST['done'])? 1 : 0);
    updateToDo($id, $description, $done);
    redirectRelative("todo/view/$id");
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10654697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档