我的PHP文档中有这样的表单:
<form id="biddingform" name="biddingform" method="POST" onsubmit="return checkBidding()" action="makebid.php" enctype="multipart/form-data">
<table class="biddingtable">
<tbody>
<tr>
<td class="bidlabel"><input type="hidden" id="itemidhidden" name="itemidhidden" value=<?php echo $_GET['itemid']; ?>></td>
<td class="bidprice">$<input class="itembidlengthfield" id="itembidprice" name="itembidprice" type="number" min="<?php echo $minprice; ?>" maxlength="10" value="<?php echo $minprice; ?>" required></td>
<td class="bidbutton"><input class="button" name="submit" id="submit" value="Make bid" type="submit"></td>
<td id="biderrormsg" class="biderrormsg"></td>
</tr>
</tbody>
</table>
</form>
我的jQuery AJAX调用看起来像这样(注意两个变量都是正确检索的):
function checkBidding()
{
var itembidprice = document.getElementById("itembidprice").value;
var itemid = document.getElementById("itemidhidden").value;
$.post('biddingvalidation.php', { bidprice: itembidprice, id: itemid }, function(result) {
window.alert(result);
if (result != "")
{
$('#biderrormsg').html(result);
return false;
} else {
return true;
}
}
);
return false;
}
最后我的biddingvalidation.php看起来像这样:
<?php
if(isset($_REQUEST['bidprice']) && isset($_REQUEST['id']))
{
require 'includes/dbfunctions.php';
$itembidprice = $_REQUEST['bidprice'];
$itemid = $_REQUEST['id'];
$biddingsql = "SELECT MAX(amount) AS amount FROM `bidding` WHERE itemid='$itemid'";
$result = db_query($biddingsql);
while($row = mysqli_fetch_array($result)) {
$maxbid = $row['amount'];
}
if ($itembidprice <= $maxbid)
{
echo "Bid too low";
} else {
echo "";
}
} else {
echo "Error, try again";
}
?>
我做了过多的测试,但我无法弄清楚为什么它没有按预期工作。我打开两个浏览器并测试如图所示,图片的左侧是我的Chrome浏览器,右侧是我的firefox浏览器。 (我在网站上以2个不同的用户身份登录):
从图片中可以看出,在Chrome上我把新的出价设置为220美元,因为我还没有更新我的firefox,那么(前)目前的最高出价仍然是200美元。所以我试图在firefox上竞标例如210 $,而不是给我任何在biddingvalidation.php文件中声明的回应错误它只是提交表单并且什么都不做(因为在mysql插入之前的后台中有其他额外的检查)。但是,我需要在这种情况下出现回显的错误消息,我为什么不出现错误?
修改 我只是尝试用window.alert显示每个变量,我注意到它甚至都没有得到结果,itembidprice&amp; itemid被正确显示,从那时起我甚至不再获得第一个window.alert(结果)
function checkBidding()
{
var itembidprice = document.getElementById("itembidprice").value;
var itemid = document.getElementById("itemidhidden").value;
window.alert(itembidprice);
window.alert(itemid);
$.post('biddingvalidation.php', { bidprice: itembidprice, id: itemid }, function(result) {
window.alert(result);
if (result != "")
{
window.alert(result);
window.alert("ja");
$('#biderrormsg').html(result);
return false;
} else {
window.alert(result);
window.alert("nee");
return true;
}
}
);
}
答案 0 :(得分:0)
首先,我有两个可能的解决办法:
itemhidden
元素。var itemid = document.getElementById(“itemidhidden”)。value; // itemid = null
if(isset($_REQUEST['bidprice']) && isset($_REQUEST['id'])) {
应该是:
if(!empty($_REQUEST['bidprice']) && !empty($_REQUEST['id'])) {
我相信在你当前的代码中,对于isset总是如此,所以它不会做任何事情,因为没有id。
以下是您需要!empty than isset
的更好理由