我有一个表单,允许用户在我的数据库中编辑项目数据。我要求每个项目都有一个附带的图片,所以我使用jQUery验证的必需规则验证itempic。
目前,用户将选择一个项目,并按照类别>的顺序生成包含项目详细信息的表单。子类别>项目>生成的表格。然后,用户可以删除现有的项目图片并将其替换为新项目。但是,因为我正在将项目图片作为必填项目,所以他将无法在不替换项目图片的情况下提交表单他删除了新项目图片。
此验证完美地完成了一个例外。删除项目图片后,如果用户点击我的导航栏并转到其他地方,他就可以跳过完全绕过验证。这样就留下了一个没有显示图片的项目,当他加载相同的表格时会导致错误,因为该项目没有显示图片。
有没有办法阻止这种情况?
PHP表单生成代码(Extract):
//Input and preview for Display Pic
echo"<div class='BizEditItemDetails' >";
echo"<label for='BizEditItemFileDP'>Upload Image[DP]      (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
},
答案 0 :(得分:3)
您需要重新考虑您的流程,您当前的流程无法修复。
问题是您允许第一个请求将服务器端记录置于无效状态。你不能这样做。无法保证用户将发出第二个请求,并且您无法强制使用JavaScript。如果只是关闭浏览器窗口,或离开计算机,或他们的Internet连接死亡怎么办?
我建议更改流程,以便用户可以替换图像,这可能发生在对服务器的单个请求中,而不是允许他们删除图像并添加新图像