【发布时间】:2013-03-29 19:21:17
【问题描述】:
我正在开发一个允许在数据库中维护组织成员的 PHP/MySQL 应用程序。目前,在单击“添加成员”跨度时,我在数据库中插入一个空白条目并将创建的 ID 返回给 PHP。收到有效 ID 后,应用程序用户将通过 jQuery 重定向到引用新创建成员的编辑页面。
据我所知,这有以下优点/缺点:
优势
- 可以在提交 jQueryUI 对话框后立即将购买/付款与成员关联,因为我已经拥有该成员的 ID。
- 统一了原本单独的添加/编辑屏幕,因此更易于维护。
缺点
- 很有可能我的条目过时。也就是说,有人可能多次单击“添加成员”而不保存新页面,从而导致条目保持空白。
- 无法在表中强制执行尽可能多的约束,因为我需要能够接受所有列的 NULL。
我是否考虑了所有场景/优点/缺点?我应该为添加成员创建一个单独的页面,还是最好接受过时的条目,并在我获取所有成员时添加一些检查以确保我没有显示过时的条目?
我目前添加成员的数据库功能:
public static function addMember()
{
$q = 'INSERT INTO ' . MemberTable::TABLE_NAME
. ' (' . MemberTable::ID
. ') VALUES (null)';
try
{
$db = new DBConnection();
$toRet = $db->execute($q);
}
catch(Exception $e)
{
error_log($e->getMessage());
$toRet = -1;
}
if($toRet > 0)
{
DBSystemEvent::logMessage("Added new member with ID $toRet");
}
unset($db);
return $toRet;
}
编辑1:重读问题后,我需要澄清第一段中提到的成员和用户是不同的。用户是指登录到应用程序的人。会员无法登录应用程序。这类似于医院应用程序(患者不能登录或编辑自己的信息;只有护士或医生等应用程序用户才能登录和编辑信息)。
编辑 2: 虽然没有一个给出的答案完全适合我的问题(因为我可能不得不在不知道 ID 的情况下插入数据库),但我决定根据我的问题接受一个答案措辞(因为使它更具体可能会进入过于本地化的领域)。
【问题讨论】:
-
为什么不直接将编辑页面用作添加/编辑页面?如果填写时未设置 ID,则添加;如果填写时未设置 ID,则进行编辑?
-
@MichaelRushton - 我在这个应用程序的早期迭代中已经这样做了。但是,如果设置了 ID 但没有具有该 ID 的成员,则无法进行编辑(因为 UPDATE 会影响 0 行)。话虽如此,我已经在顶部获取成员,如果找不到成员,我基本上可以取消设置 ID...
-
为什么不办理全流程?如果他们未能完成就中止。
-
如果没有具有该 ID 的成员,则无需设置该 ID。您将拥有
edit.php?id=0而不是edit.php?id=1(并且在提交表单时,如果id == 0那么您INSERT而不是UPDATE)。 -
如果他使用用户 ID 将购买保存到数据库中,那么 ID=0 可以在 2 个同时的新用户之间混合数据。
标签: php mysql web-applications