使用AJAX验证

时间:2014-08-07 23:32:22

标签: javascript php jquery mysql ajax

我的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个不同的用户身份登录): problems

从图片中可以看出,在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;
                }
            }
        );
    }

1 个答案:

答案 0 :(得分:0)

首先,我有两个可能的解决办法:

  1. 标记中没有itemhidden元素。
  2.   

    var itemid = document.getElementById(“itemidhidden”)。value; // itemid   = null

    1. 其次,在ajax之后,bidprice和id总是存在,即使是空的,我认为你需要empty()这不是isset():
    2.  if(isset($_REQUEST['bidprice']) && isset($_REQUEST['id'])) 
          {
      

      应该是:

      if(!empty($_REQUEST['bidprice']) && !empty($_REQUEST['id'])) 
          {
      

      我相信在你当前的代码中,对于isset总是如此,所以它不会做任何事情,因为没有id。

      以下是您需要!empty than isset

      的更好理由