【问题标题】:Using PHP post and get with a form to the same page使用 PHP post 和 get 同一个表单到同一页面
【发布时间】:2012-06-27 09:18:20
【问题描述】:

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

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

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

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

谢谢

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

【问题讨论】:

  • 能否提供相关代码sn-ps?
  • 从最初描述的声音来看,您想要的是一个表格,但正如 @AdnanShammout 所问的那样,您能否发布一些代码
  • 是的,没关系,我几乎所有的代码都在@greg 的答案中。排序谢谢大家

标签: php html forms post


【解决方案1】:

如果您想在不使用 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"]);
}

【讨论】:

  • 是的,这正是我所追求的。 @Erwin Moller 还举了一个很好的例子,链接发送 GET 信息。只是想让 thios 清楚一点谢谢 :)
  • 上面的代码会触发一个PHP通知,只需检查isset($_POST["deleteCourse"] &amp;&amp; !empty($_POST["deleteCourse"])
  • @AdnanShammout 不正确。 empty() 检查是否也设置了变量 - 未设置的变量被视为空。
  • 你说得对,我在想($_POST["deleteCourse"] != '')
【解决方案2】:

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

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),
)

【讨论】:

    【解决方案3】:

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

    例如, 拉脱维亚语课程[删除课程]

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

    if (isset($_GET['delete_course'])) {
        $class->delete_course($_GET['delete_course']);
    }
    

    【讨论】:

    • 请不要将您的 get 直接传递给该方法,考虑以下 url 请求中会发生什么 path_to_script.php?delete_course=11 Get 不是执行此操作的合适方法。
    • @AdnanShammout get 会从 url 中读取参数,帖子会查看通过 weberdev.com/get_example.php3?ExampleID=3859 表单发布的数据
    • @AdnanShammout 如果您看不到汤姆迪克或哈利将变量从任何将删除数据的计算机传递给脚本的问题,那么我无法帮助您:-(
    • 嘿!今天是多么美好的一天!我想我会在外面编程。你说什么?
    • @Will, :D 该死的雪球效应!
    【解决方案4】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-10
      • 1970-01-01
      • 1970-01-01
      • 2016-03-26
      • 1970-01-01
      • 2021-11-01
      • 2017-02-03
      相关资源
      最近更新 更多