2012-06-24 64 views
2

我正在创建一个人员招聘网站,并且在向上一页上创建的记录中添加新数据时遇到问题。为了便于使用,我将表单分成多个步骤(每一步都在一个新页面上),其中步骤1在候选数据库表中创建记录并插入候选人的个人详细信息(姓名,姓氏,联系方式,性别等),并将用户发送到下一页(步骤2),其中可以上传配置文件图片,并将图像路径插入到新创建的记录中的字段中。正在更新我刚刚创建的记录

问题来了,我似乎无法获得调用相关记录的记录ID的代码。我想过使用mysql_insert_id,但问题是双重的。首先,我不确定我是否知道如何正确使用它,并且多次Google搜索都没有让我更聪明。其次,由于该公司将在全国各地设立多个分支机构,因此有可能两个用户同时添加候选人,并且用户A可能最终将照片添加到用户B创建的记录中。

我已经尝试使用$ _POST来获取记录ID,但是数据一旦插入表格后似乎不会将数据传递到下一页。

我对PHP并不完全陌生,但这并不是我以前做过的事情,因为我曾经有一个朋友会处理这种事情,但不幸的是,他几个月前去世了,所以我不得不在我走的时候学习如何做到这一点,取得一点成功。

我希望我对自己的问题已经够清楚了,因为我有点不知所措。

任何援助将不胜感激。

+0

欢迎来到堆栈溢出!一定要记住所有你认为有用的答案,包括那些适合他人问题的答案。并检查/接受你自己的问题的最佳答案。 –

回答

0

首先,我会使用PDO(或mysqli),而不推荐使用mysql_ *扩展名。

使用PDO,你执行你的发言后,就可以使用两个函数来得到你所需要的ID:

$stmt->execute($values);  // $stmt contains the prepared statement 

$return_code = $stmt->rowCount(); 
// $return_code = 1 : new record 
// $return_code = 2 : updated record 

if ($return_code == 1) 
{ 
    $ID_YOU_NEED = $db->lastInsertId(); // $db is the database connection 
} 

顺便说一句,我用rowCount(),因为我常对我的大部分插入查询使用ON DUPLICATE KEY UPDATE ,你可以跳过这一步。

然后,我会将ID存储在会话 中,或将其添加为下一个表格 的隐藏字段。

顺便说一句,根据需要,我也不会存储在一个数据库什么,只是还没有到所有需要的信息已经进来了。

+0

-1由于没有安全性,因此不要将dbms标识存储为隐藏字段 - 任何人都可以更改该值,从而访问数据库中其他人的记录。 –

+0

@Larry K我​​想你是对的,在这种情况下,这将是一个坏主意;我现在在系统上工作很多,只有管理员可以编辑数据,并且没有彻底读懂问题(尽管我可能有一个隐藏的变量来匹配另一个会话变量) – jeroen

+1

再次,thans for反馈。你最后一点建议(“直到所有必需的信息进入之前,我都不会在db中存储任何东西”)让我想到了。我想我已经意识到解决我的问题。实际上,我在这个项目的这个阶段耗尽了时间,并且让这个最终插入的东西被证明是耗时的(我认为睡眠剥夺正在付出代价)。我知道会话,通过使用会话,我不必调用最后一个ID,因为我收集所有数据,然后在整个过程结束时插入记录。你会说我的逻辑在这里听起来吗? – UbuntuElphie

1

你会更好的使用PHP PDO。在那里,有一个函数可以获取插入的行的ID(http://us3.php.net/manual/en/pdo.lastinsertid.php)。当你运行插入代码时,在它后面运行它,它会给你刚才插入的行的ID。现在,将该ID附加到用户链接或会话变量(或其他任何用户特定的链接),并且您将能够轻松跟踪每个人将能够编辑的最后一行。

+0

将会更好地存储在一个会话中,并保持它完全不可见和服务器端。通过链接或形式信息传递安全问题。 – Ilion

+0

是的,我完全同意你的看法,但看起来这个章节对于编程来说是相当新颖的,或者至少PHP能够通过一个链接开始起作用。当他有工作并理解这些概念时,我会说他可以回头加强代码以防止安全问题。尽管如此,尽管并非不同意你的评论。 – Fluffeh

+0

感谢您的反馈。 @Fluffeh,你是对的,我是新来的。到目前为止,我的PHP技能只需要我做最低限度的工作,这样我的队友就可以进来并完成需要完成的任务,以使代码按照它的意图工作。如前所述,他在这个项目的中途死亡,所以我在这里找到我的脚时,在黑暗中摸索着。 – UbuntuElphie

0

首先,

在你的页面

其插入记录到数据库,您需要获取新创建的记录的ID。使用mysqli::insert-id还有其他方法可以做到这一点。

其次,

存储在用户的会话记录ID,并用它在随后的页面为更新记录。出于安全原因,将id存储在会话中非常重要,而不是作为URL GET值或“隐藏”字段。

+0

感谢您的反馈。我肯定会使用会话而不是隐藏字段(之前我曾经建议不要使用URL GET Value,但是,在阅读我收到的反馈后,没有意识到隐藏字段的脆弱性) – UbuntuElphie

相关问题