验证图像的存在而不需要使用jQuery

时间:2014-01-05 16:49:41

标签: javascript php jquery forms validation

背景

我有一个存储有关items的信息的数据库。我目前正在使用一个表单,该表单动态提取并显示有关数据库中任何项目的当前现有数据,并在数据库中更新对表单的更改。

我的表单有一个字段(ImagePreviewDP),显示当前正在显示的项目的图片(显示图片)。我正在尝试验证此图片以确保它存在并使其成为必填字段,如果删除显示图片,如果没有上传新的显示图片来替换删除的图片,则无法提交表格。 ImagePreviewDP是 当前设置为在页面加载时自动显示现有的显示图片,并显示通过文件输入字段选择的图片。 的问题:

我的显示图片验证目前是 NOT WORKING ,因为用户可以删除显示图片并提交表单。

Php Code生成表单(extract):

//Fetches the item DP
$fetchdp=$cxn->prepare("SELECT `ItemDP` FROM `Items` WHERE `BusinessID`=:bizid AND `ItemID`=:itemid");
$fetchdp->bindValue(":bizid",$bizid);
$fetchdp->bindValue(":itemid",$itemid);
$fetchdp->execute();
while($getdp=$fetchdp->fetch(PDO::FETCH_ASSOC))
{
    $dp=$getdp["ItemDP"];
}

//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='BizEditItemFilesDP' />";
    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=DisplayDeleteItemID name=DisplayDeleteItemID value=$itemid>";
    echo"<input type='hidden' id=DisplayDeleteItemPicID name=DisplayDeleteItemPicID value=$itempicid>";
    echo"<input type='hidden' id=DisplayDeleteFilePath name=DisplayDeleteFilePath value=$dp >";
    echo"<input type='button' id=DisplayDelete name=DisplayDelete class='ImageDeleteButton' value='Delete Picture'>";
    echo"<br>";
echo"</div>";

jQuery验证规则(提取):

'BizEditItemFilesDP':{
    remote:{
    url:"checkdp.php",
    type:"get",
    data:{dp:$("#ImagePreviewDP").prop("src")}
    }
},

远程通话代码:

require("../../inc/connection.inc");

$dp=$_GET['dp'];
$check=$cxn->prepare("SELECT `ItemDP` FROM `Items` WHERE `ItemDP`=:dp")
$check->bindValue(":dp",$dp);
$check->execute();
$count=$check->rowCount();

if($count > 0)
{
    echo json_encode(false);
}
else
{
    echo json_encode(true);
}
事情尝试了:

我已尝试将jQuery验证规则设置为

'BizEditItemFilesDP':{
    required:true,
    remote:{
    url:"checkdp.php",
    type:"get",
    data:{dp:$("#ImagePreviewDP").prop("src")}
    }
},

'BizEditItemFilesDP':{

    remote:{
    url:"checkdp.php",
    type:"get",
    data:function(){
    return $("#ImagePreviewDP").prop("src");
    }
},

但它不起作用,因为所需规则需要选择一个文件(选择上传),并且不关心ImagePreviewDP字段中是否已存在现有文件。

我如何验证显示图片以使其成为必填字段?我多年来一直坚持这一点,似乎无法使其发挥作用。

任何输入都会非常感激。

1 个答案:

答案 0 :(得分:0)

这没关系

'BizEditItemFilesDP':{
    required:true,
    remote:{
    url:"checkdp.php",
    type:"get",
    data:{dp:$("#ImagePreviewDP").prop("src")}
    }
},

但是,总是需要选择文件的原因是因为验证规则中的必需:true,行。如果BizEditItemFilesDP为空,这将始终失败..

此外,如果您希望在ImagePreviewDP已存在时输入有效,则在远程验证中,如果($ count&gt; 0),您应该返回true。 (目前你返回false)。


(似乎有点陷阱22)验证你想要的方式的问题是如果需要= true 对于BizEditItemFilesDP然后立即将其留空

BUT

如果BizEditItemFilesDP需要= false ,则立即将其留空(并且永远不会调用远程验证脚本来检查ImagePreviewDP)。

解决这个问题的方法可能是将验证规则放在总是有值的东西上(提交按钮或隐藏字段或其他),在验证规则中为该字段设置为true,然后同时发送BizEditItemFilesDP和ImagePreviewDP到远程验证脚本并远程验证它们。那么你的远程验证脚本总会被调用。

我认为必须有一种更简单的方法来确保在不需要BizEditItemFilesDP时调用远程验证脚本并留空,但我确定无法找到它。