【问题标题】:How to restrict user to fill application more than once in PHP如何限制用户在 PHP 中多次填写应用程序
【发布时间】:2021-01-06 16:08:56
【问题描述】:

我有这个 PHP 应用程序,用户 Student 可以在其中查看和申请其他用户 Employer 可以发布的实习。 Screenshot of the Student Dashboard。问题是:

如果学生已经申请实习,应限制再次申请。 This is the form when Apply is clicked

这是表单页面的 PHP 代码:

`

$name=$_POST['name'];
$email=$_POST['email'];
$employer=$_POST['employer'];
$title=$_POST['title'];

$query="INSERT INTO student_applications(name,email,employer,job_title) VALUES('$name','$email','$employer','$title')";
$result=mysqli_query($conn,$query);
if($result)
    header("Location: student-profile.php");
else
    header("Location: register_intern.php");

?>`

【问题讨论】:

  • 你听说过sql注入吗?
  • 您的代码容易受到SQL injection 攻击。您应该使用mysqliPDO 准备好的语句和this post 中所述的绑定参数。
  • 这只是一个代码 sn-p 为问题提供上下文
  • @SatyamRaj 人们将 SO 视为示例,因此最好不要在网站上包含不安全的代码,如果存在不安全的代码,则应将其调出以警告任何未来的查看者。
  • 您尝试过什么限制访问?使用 cookie 就足够了,还是您已经使用了某种身份验证?

标签: php


【解决方案1】:

student_applications.email 上创建唯一约束。那么每个申请人就不可能有超过一行:

CREATE UNIQUE INDEX email ON student_applications (email);

然后当需要插入一个新用户时,不要费心检查是否存在,只需尝试插入一个新行。如果已经有一行包含相同的电子邮件,则插入将失败。

【讨论】:

  • 是的,但它不会说明发生了什么,对吧?
  • 在列上有一个唯一索引总是好的 - 但这是一种不好的做法,等待错误而不是之前测试它
  • @Philipp Read-before-write 仅在单用户环境中是安全的。
  • 没说,你不应该添加索引 - 说,你应该之前也检查一下。应防止可预防的错误
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-18
  • 2021-03-18
  • 2021-11-20
  • 2021-01-16
  • 2018-09-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多