背景
我有一个存储有关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]      (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字段中是否已存在现有文件。
我如何验证显示图片以使其成为必填字段?我多年来一直坚持这一点,似乎无法使其发挥作用。
任何输入都会非常感激。
答案 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时调用远程验证脚本并留空,但我确定无法找到它。