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

标签 javascript php jquery forms validation

我有一个表单,可以让用户在我的数据库中编辑项目数据。我要求每个项目都有随附的图片,因此我使用 jQUery 验证所需的规则来验证项目图片。

目前,用户将选择一个项目并按照“类别”>“子类别”>“项目”>生成表单的顺序生成包含项目详细信息的表单。然后,用户可以删除现有的项目图片并将其替换为新的图片。但是,因为我正在将项目图片设为必填项目,所以如果不将他删除的项目图片替换为新的项目图片,他将无法提交表单。

此验证工作完美,但有一个异常(exception)。删除项目图片后,如果用户单击我的导航栏并转到其他地方,他可以完全跳过验证。这给我留下了一个没有显示图片的项目,并且当他加载相同的表单时会导致错误,因为该项目没有显示图片。

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

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 强制解决该问题。如果他们只是关闭浏览器窗口,或者离开计算机,或者他们的互联网连接中断怎么办?

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

关于javascript - 阻止人们通过导航到其他地方来绕过我的表单验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21065489/

相关文章:

javascript - 如何使用nodejs获取mongodb的slave状态?

javascript - 无法在 webextensions 中使用 AsmJS

javascript - 如何在 php 中制作二维键数组?

php - 验证/允许YouTube嵌入代码

javascript - 我可以使用 val() 插入或编辑文件输入吗?

javascript - Jquery Tokeninput 和动态嵌套表单

javascript - Firefox/IE jQuery 为 (":hover") 无法正常工作

javascript - 如何有条件地从对象中删除属性?

php - 仅通过表单安全地允许从第三方网站插入我的 MySQL 数据库表?

jQuery、SVG : How to animate an attribute value (not style property)?