【问题标题】:Issue with adding form in codeigniter given certain condition在特定条件下在 codeigniter 中添加表单的问题
【发布时间】:2025-12-07 08:05:02
【问题描述】:

我想允许用户将应用程序发送到某个工作。我最初允许编辑,但有一些问题,如下所示:How do I completely overwrite previously edited data such that only the latest one is displayed in Codeigniter? 在尝试了不同的方法来解决它之后,我仍然无法解决。但现在几乎不重要了,因为我意识到我原来的计划会产生更多的问题。此外,在现实生活中,建议应该提出一次,所以应该提交最好的。 我现在的问题是,即使某个用户已经发送了申请,每次他尝试访问同一个职位时,“申请”按钮仍然有效,因此仍然进行了多次申请。我试图改变我的模型上的一些东西,但它仍然没有用。

这是我的提供者控制器中的内容:

public function write_proposal() 
{
    //allows provider to send proposal to client
    $this->validateRole('provider');
    $this->load->model('job_model');

    $id = $this->uri->segment(3, 0);
    $data['my_preference'] = $this->job_model->get_my_job_proposals($id);   
    //$data['id'] = $id;        

    $data['job'] = $this->job_model->get_job($id);
    $this->load->view('provider/write_proposal', $data);

}

public function job_proposal_submit() 
{
    //completes proposal submission
    $this->validateRole('provider');
    $this->load->model('job_model');

    $this->job_model->add_job_proposal_from_provider($_POST);       

    redirect('provider/view_job/' . $_POST['job_id'] . "?message=Proposal submitted.");

}

我的工作模型中的这个对应的..

    public function add_job_proposal_from_provider($obj) 
{
    //I wanted to make here the condition that adding new proposal will only work if the user has not yet submitted any proposal for the specific job but it produced another error, and that is none of the at least two proposals made is shown or probably even saved
    //if ($obj['proposal'] == NULL){

    $data = array
    (
        'proposal' => $obj['proposal'],
        'job_id' => $obj['job_id'],
        'status' => "Open",
        'provider_id' => $this->auth_model->get_user_id()
    );

    $this->db->insert('job_proposal', $data);
    //}
}

我期待任何帮助。谢谢

【问题讨论】:

  • 加载模型时遇到什么错误?
  • 虽然显示了“已提交工作建议”的消息,但实际情况是,创建的工作建议的第二个或第三个等将不再显示..甚至第一个也不显示。
  • 你能显示你的完整代码吗
  • 我在控制器中添加了代码..

标签: php codeigniter submit add conditional-statements


【解决方案1】:

一些事情,

首先,考虑实施视图端限制,虽然它不会阻止聪明的人,但它会大大改善你的 UI(用户不会有可以工作但不会做任何事情的按钮)。

我假设用户必须登录才能发送应用程序,否则这整个事情不会太有用。

我要做的是创建一个包含所有工作 ID 的表,每次用户申请工作时,您都将他添加到该表中。

当用户尝试申请工作时,您首先检查此表中是否有与该 jobID/userID 匹配的,如果没有匹配,您可以继续检查信息是否正确发布并实际添加信息到数据库,也到那个 jobID/userID 表(所以他不能发布两次)。

在视图方面,我会向视图发送一个带有当前用户已应用的所有 jobID 的变量,并使用简单的 ifs 或 javascript 来禁用按钮(或在用户尝试按下按钮时显示警报)。

希望对你有帮助

【讨论】:

  • 感谢@patrick。就像你一样,我在概念上确实更好,但在实际实现中却没有那么多。不过我一直在努力。
  • 如果这没有回答您需要做什么的概念,我认为我在您的实际问题上遗漏了一些东西。你想要的结果是什么?
  • 最终,期望的结果是不允许登录的提供商发送多个应用程序..
  • 在这种情况下,我的回答非常适合。您必须创建 jobID/userID(两个外键)并检查用户何时单击“提交”,如果该对存在。如果 provider(id=32) 应用于 jobID(id=40),则您对该表运行查询,如果该对 40/32 存在,(sql 表返回 1 行),您不处理订单。如果它不存在,则将其插入数据库。您甚至可以在提交按钮上运行回调,以检查提供者是否已经应用于该作业。如果您在特定代码中遇到问题,请告诉我在哪里,我会尽力提供帮助
  • 感谢您的帮助帕特里克。我是一名学生,现在解决我的程序问题的时间非常有限。我实际上应该已经提交了我的论文,包括其他一些学生对我的应用程序的反应。我所有这些东西的截止日期就是明天。当我开始开发我的项目时,每次遇到某个问题,我通常都会花很多时间自己修复它。如果我知道几个月前我可以从这里得到帮助,我可以更早地完成我的项目。 . 感谢您的解释和您的时间.. 我可能会在另一个 impt 问题后回到这个问题