使用PHP将post和get与表单一起发送到同一页面

使用PHP将post和get与表单一起发送到同一页面,php,html,forms,post,Php,Html,Forms,Post,我正在制作一个PHP应用程序,用它测试面向对象,因为我试图学习OO而不是过程编程 基本上,我有一个用户可以使用系统预订的课程列表,它们出现在用户配置文件中。从配置文件中,我希望在每个预订的课程旁边有一个“删除”链接,单击该链接可删除课程 我需要使用html表单吗?我已经开始做了,但似乎不对。我有一个名为“delete_course”的函数,它完成了我希望它完成的事情,我需要传递的只是DB中帖子的ID。所以我的问题是。。。将表单中的ID发布到带有函数调用的页面是最佳做法吗 如果这是最好的方式,那么

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

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

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

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

谢谢


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

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

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

我发现非常简单,[Delete Course]将有指向同一页面的链接,带有GET参数,比如Delete_Course=$id。 然后


如果您想在不使用JavaScript的情况下通过HTTP发布变量,则需要在HTML中提供一个表单,该表单的method属性为“POST”

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

HTML:


您可以从以下几个选项中进行选择:

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) 通过邮寄的形式。同样的逻辑也适用

我建议您也使用一些会话逻辑来识别用户,以便您可以基于$_GET[“deleteCourseid”]和类似$_session[“userid”]之类的内容删除课程

假设您有如下表格: [Postgresql]

CREATE tblusercourse(
  usercourseid SERIAL PRIMARY KEY,
  userid INTEGER REFERENCES tblusers(userid),
  courseid INTEGER REFERENCES tblcourse(courseid),
)

最好的选择是使用ajax调用(您说您很了解)从概要文件中删除该项,因此您将有两个优点

  • 用户不必等待页面加载:您可以假设一个乐观模型并立即从DOM中删除该项,并且只注册失败回调来恢复HTML元素,并在出现问题时通知用户
  • (稍微)节省服务器带宽——是的,我承认这是一个小小的优化:P
  • 但是,由于您声明自己是PHP新手,我最强烈的建议是不要使用普通的PHP文件来做这类事情,特别是如果您需要(像您应该做的那样)一个数据库。通过这种方式,您可能会学到糟糕的abhits(比如使用mysql扩展函数),实际上这个knowloedge既不是真正的面向对象的,也不是在实际应用程序中使用的

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


    这些框架中的大多数都是开源的,因此您可以通过查看代码来学习PHP。我个人推荐。

    你能提供相关的代码片段吗?从最初描述的声音来看,你想要的是一个表单,但正如@AdnanShammout所问的,你能发布一些代码吗?

    好的,我几乎所有的代码都在@greg的答案中。排序Guess谢谢Guess请不要把你的直接进入方法考虑下面的URL请求PATHYToScript脚本会发生什么PHP DeleTeEngEng==11 get不是一个合适的方法来做这个。@ AdNangSAMOUT GET会从URL中读取PARAMS。tom dick或harry将变量从任何计算机传递到脚本以删除数据的问题,我无法帮助您:-(嘿!今天天气真好!我想我会在外面编程。你们怎么说?@Will,:D该死的雪球效应!是的,这正是我想要的。@Erwin Moller还举了一个很好的例子,链接发送获取信息。只是想让thios更清楚一点,谢谢:)上面的代码会触发一个PHP通知,只需使用
    isset($\u POST[“deleteCourse”]&!empty($\u POST[“deleteCourse”])
    @AdnanShammout检查变量是否设置过多-未设置的变量被视为空。你是对的,我想的是
    ($\u POST[“deleteCourse”!=”)
    http://www.example.com/myprofile.php?deleteCourseid=23
    http://www.example.com/myprofile.php?deleteCourseid=54
    
    if (isset($_GET["deleteCourseid"]){
      $deleteme = (int)$_GET["deleteCourseid"];
      // Some query here.
    }
    
    CREATE tblusercourse(
      usercourseid SERIAL PRIMARY KEY,
      userid INTEGER REFERENCES tblusers(userid),
      courseid INTEGER REFERENCES tblcourse(courseid),
    )