通过在其他地方导航来阻止人们绕过我的表单验证



我有一个表单,允许用户编辑数据库中的项目数据。我要求每个项目都有一张附带的图片,所以我用jQUery验证的必要规则来验证项目图片。

目前,用户将选择一个项目并生成包含项目详细信息的表单,顺序为"类别>子类别>项目>生成的表单"。然后,用户可以删除现有的项目图片,并将其替换为新的图片。然而,由于我将物品图片作为必填项,如果不将他删除的物品图片替换为新的物品图片,他将无法提交表格。

除了一个例外,这种验证非常有效。删除项目图片后,如果用户点击我的导航栏并转到其他地方,他可以完全跳过验证。这给我留下了一个没有显示图片的项目,并导致他加载相同表单时出错,因为该项目没有显示图片。

有什么办法可以防止这种情况发生吗?

PHP表单生成代码(摘录):

//Input and preview for Display Pic
echo"<div class='BizEditItemDetails' >";
echo"<label for='BizEditItemFileDP'>Upload Image[DP] &nbsp &nbsp&nbsp&nbsp(Max Size:2MB)</label>";
echo"<input type='file' class='BizEditItemInput' id='BizEditItemFileDP' name='BizEditItemFileDP' />";
echo"<input type='button' id=ImageCancelDP name=ImageCancelDP class='ImageCancelButton' value='Cancel'>";
echo"<span></span>";
echo"<br>";
echo"<img id='ImagePreviewDP' name='ImagePreviewDP' class='ImagePreview' src="$dp" > ";
echo"<input type='hidden' id='ImagePreviewDPValidate' name='ImagePreviewDPValidate' value="$dp" >";
echo"<input type='hidden' id='DisplayDeleteItemID' name='DisplayDeleteItemID' value=$itemid>";
echo"<input type='hidden' id='DisplayDeleteItemPicID' name='DisplayDeleteItemPicID' value=$dpid>";
echo"<input type='hidden' id='DisplayDeleteFilePath' name='DisplayDeleteFilePath' value=$dpfilepath >";
echo"<input type='button' id='DisplayDelete' name='DisplayDelete' class='ImageDeleteButton' value='Delete Picture'>";
echo"<br>";
echo"</div>";

jQuery验证(摘录):

ImagePreviewDPValidate:{
required:true
},

您需要重新思考您的流程,您当前的流程无法修复。

问题是,您允许第一个请求将服务器端记录置于无效状态。你不能那样做。不能保证用户会提出第二个请求,也不能用JavaScript强制解决问题。如果他们只是关闭浏览器窗口,或者离开电脑,或者他们的互联网连接断了怎么办?

我建议更改流程,以便用户可以替换图像,这将在向服务器发出的单个请求中发生,而不是允许他们删除图像并添加新图像。

最新更新