我从MVC应用程序中的另一个文件中提供表单预设数据值。其中一个数据集属性(ID)将保持固定且无法更新。只能更新姓名,电话号码等。我的问题是我需要设置一些我可以提交的东西,就像其他预设数据一样;然而,与其他预设数据不同,我不能将其放在表格中,因为用户可能会更改它。
<form action="crud.ctrl.php?act=update" method="post">
<label>ID: <?=$data1["id"]?> <br /><br>
<label>First Name:</label> <br><input type="text" name="fnameUP" id="fnameUP" value="<?= $data1["fname"] ?>"> <br />
<label>Last Name:</label> <br><input type="text" name="lnameUP" value="<?= $data1["lname"] ?>""> <br />
<label>Phone:</label> <br><input type="text" name="phoneUP" value="<?= $data1["phone"] ?>""> <br />
<label>Email:</label> <br><input type="text" name="emailUP" value="<?= $data1["email"] ?>""> <br />
<label>Location:</label> <br><input type="text" name="locationUP" value="<?= $data1["location"] ?>""> <br />
<label>MC:</label> <br><input type="text" name="mcUP" value="<?= $data1["mc"] ?>""> <br />
<label>Position:</label> <br><input type="text" name="posUP" value="<?= $data1["pos"] ?>""> <br />
<label>Department:</label> <br><input type="text" name="deptUP" value="<?= $data1["dept"] ?>""> <br />
<input type="submit">
</form>
答案 0 :(得分:2)
解决此问题的一种方法是在原始表中使用另一个唯一列。例如,您可以“加密”ID并哈希,或使用其他形式创建足够长的字符串以防止用户猜测任何现有的“ID”。
然后只需在表单中包含该列作为隐藏输入字段,例如
<input type="hidden" name="custom_id" value="<?=$data1["custom_id"]?>">
这样,即使用户弄乱了ID,他也有很小的机会能够改变另一条记录。你的哈希越复杂,机会就越小。
如果这不够安全,我的下一个想法是在数据库中有另一个列/表,当你转发将在表单中显示的数据时生成一个哈希,并且只允许更新具有该值的记录组。这样,唯一的“可编辑”行是有人在最后X分钟内请求编辑表单的行。