将自动递增ID从一种形式传送到另一种形式的最佳方法是什么?
我有3个表(用户,住所和users_residences)。我希望用户注册,添加到users表,重定向到表单以创建住所,该住所将向住宅表添加一行,同时将住宅tabe行的id和users表行的id添加到users_residences表
我一直在玩uri细分,但想不出一种方法来存储(或调用)刚刚添加的用户ID,以便在第二种形式中使用。
我可能会使用会话在users表中存储会话ID,然后从中查找行ID,但这看起来很糟糕。
我对编程很陌生,所以请随时告诉我,我失败了,但至少指出了我可以学习其中一些概念的方向。
感谢
人
答案 0 :(得分:1)
我说你最好使用users表中的会话密钥;它更安全(假设您通过https执行此操作)。
从安全角度来看,在隐藏字段中存储值很容易操作。如果你的字段使用自动增量,那么很容易猜出下一个字段是什么。用户可以假装成为下一个注册用户并获取该用户的信息。您还会提供有关其他用户的ID,您的网站注册用户数等信息。
另外,除非你打算做一些ajaxy,否则我不确定有多少选择;用户将单击“提交”,在保存发生时重定向到另一个网页,可以传输的唯一信息将是您将其重定向到会话的URL。你可以在网址中传递它,但它也会遇到上述问题。
答案 1 :(得分:0)
在第二种形式中,您可以包括:
<input type='hidden' name='user_id' value='whatever' />
答案 2 :(得分:0)
在MySQL中,您可以使用以下语句获取最后插入行的ID:
select LAST_INSERT_ID();
然后,您可以在表单或会话中传递该值,以便将来插入。
答案 3 :(得分:0)
你可以打电话
$id = mysql_insert_id();
运行insert语句后立即获取数据库为autoincrement字段生成的最后一个id。如果语句没有生成id,则返回0。这个page更详细地解释了。
然后,您可以在下一个表单上使用该ID
<input type="hidden" value="<?= $id ?>"/>
答案 4 :(得分:0)
我认为首先应该在此过程中使用数据库事务。 要做的第二件事是使用以下内容获取事务中最后插入的id:
像:
<强> $这 - &GT; DB-&GT; trans_start();
..(查询)...
$这 - &GT; DB-&GT; INSERT_ID();
..(查询)...
$ this-&gt; db-&gt; trans_complete();
的问候,
@pcamacho