2

我正在制作一个 PHP 应用程序,用它测试面向对象,因为我正在尝试学习面向对象而不是过程编程。

基本上我有一个用户可以使用系统预订的课程列表,它们出现在用户个人资料中。从个人资料中,我希望每个预订的课程旁边都有一个“删除”链接,单击该链接会删除该课程。

我必须为此使用html表单吗?我已经开始这样做了,但似乎不对。我有一个名为“delete_course”的函数,它可以完成我想要它做的事情,而我需要传递的只是数据库中帖子的 ID。所以......我的问题是......将表单中的ID发布到带有函数调用的页面是否是最佳做法?

如果这是最好的方法,最好将其发布到用户所在的相同(当前)页面,还是发布到另一个页面,例如“cancel_course.php”?有什么好处?

谢谢

哦,顺便说一句,我对 PHP 比较陌生,但是已经做了很多 JS,所以我知道 ajax 是一个更好的选择,只是想学习 PHP :)

4

4 回答 4

4

如果您想在不使用 JavaScript 的情况下通过 HTTP POST 变量,则需要在 HTML 中使用一个带有“post”方法属性的表单。

每个删除按钮都可以在数据库中具有课程 ID 的值,这将使您可以轻松识别 PHP 中正在删除的课程。

HTML:

<form method="post">
    <ul>
        <li>
            <h1>Learn how to sew course</h1>
            <button type="submit" name="deleteCourse" value="1">Delete</button>
        </li>
        <li>
            <h1>Learn how to knit course</h1>
            <button type="submit" name="deleteCourse" value="2">Delete</button>
        </li>
</form>

PHP:

if(!empty($_POST["deleteCourse"])) {
    $courseList->deleteById($_POST["deleteCourse"]);
}
于 2012-06-27T09:24:20.713 回答
3

您有一些选项可供选择,仅举几例:

1) 通过 URL:创建超链接,例如:

http://www.example.com/myprofile.php?deleteCourseid=23
http://www.example.com/myprofile.php?deleteCourseid=54

等等以及来自 myprofile.php:

if (isset($_GET["deleteCourseid"]){
  $deleteme = (int)$_GET["deleteCourseid"];
  // Some query here.
}

2)通过表单中的POST。同样的逻辑适用。

我建议您也使用一些会话逻辑来识别用户,以便您可以根据 $_GET["deleteCourseid"] 和类似 $_SESSION["userid"] 的内容删除课程

假设您有一些表,例如:[Postgresql]

CREATE tblusercourse(
  usercourseid SERIAL PRIMARY KEY,
  userid INTEGER REFERENCES tblusers(userid),
  courseid INTEGER REFERENCES tblcourse(courseid),
)
于 2012-06-27T09:26:15.073 回答
2

如果我理解正确,你有一些东西的列表,每个东西都有它自己的删除按钮。

例如,拉脱维亚语课程【删除课程】

我发现很简单,[删除课程] 将链接到带有 GET 参数的同一页面,例如 delete_course=$id。接着

if (isset($_GET['delete_course'])) {
    $class->delete_course($_GET['delete_course']);
}
于 2012-06-27T09:23:08.043 回答
2

最好的选择是使用 ajax 调用(你说你很清楚)从配置文件中删除项目,所以你有两个优点

  1. 用户不必等待页面加载:您可以假设一个乐观模型并立即从 DOM 中删除该项目,并且只注册失败回调来恢复 HTML 元素并在出现问题时通知用户
  2. (一点)节省服务器带宽 - 是的,这是一个很小的优化,我承认:P

但是,既然你说你是 PH​​P 新手,我最强烈的建议是不要使用普通的 PHP 文件来做这类事情,特别是如果你需要(就像你应该的那样)一个数据库。这样你可能会学到不好的知识(比如使用 mysql 扩展函数而不是 PDO),而且实际上这些知识既不是真正的面向对象,也不是在现实生活中的应用程序中使用的。

PHP 开发人员(如 Python 和 Ruby 开发人员)现在使用框架来构建他们的应用程序。这些框架通常提供从数据库到 PHP 代码的 OR 映射,让您编写真正的 OO 代码,而且由于 MVC 范式更易于维护。

这些框架大部分都是开源的,所以你可以通过查看代码来学习 PHP 的东西。我个人推荐CakePHP

于 2012-06-27T09:38:10.207 回答