2016-09-13 3 views
0

기본 옥션 사이트를 만들고이 커뮤니티의 도움을 아주 많이 받았습니다. 지금은 마무리 단계이지만 서버 측 유효성 검사에 약간의 문제가 있습니다.PHP 유효성 검사 오류

경매는 html과 PHP가있는 PHP 페이지에 나열되어 있으며, PHP는 MySQL 쿼리를 실행 한 다음 결과를 나열합니다. 여기 예 : 사용자가 제출 버튼을 클릭

$result = mysqli_query($con,"SELECT * From auction WHERE category = 'Bathroom' ORDER BY ID DESC"); 


while($row = mysqli_fetch_array($result)) 
    { 
    echo "<form name='auction' id='auction" . $row['ID'] . "'> 
      <input type='hidden' name='id' value='" . $row['ID'] . "' /> 
      <div class='auction-thumb'> 
       <div class='auction-name'>" . $row['Item'] . "</div>"; 
      echo "<img class='auction' src='" . $row['ImagePath'] . "' />"; 
      echo "<div class='auction-bid'>Current Bid: £<div class='nospace' id='" . $row['ID'] . "'>" . $row['CurrentBid'] . "</div></div>"; 
      echo "<div class='auction-bid'>Your Name: <input type='text' class='bidder' name='bidname' autocomplete='off'/></div>"; 
      echo "<div class='auction-bid'>Your Bid: <input type='text' class='auction-text' name='bid' autocomplete='off'/></div>"; 
      echo "<div class='auction-bid'><input type='submit' name='submit' value='Place Bid!' /></div>"; 
      echo "<div class='bid-success' id='bid" . $row['ID'] . "'>Bid placed!</div>"; 
    echo "</div></form>"; 
    } 
echo "</table>"; 

mysqli_close($con); 

되면, 다음과 같은 jQuery를 실행 :

:

$(document).ready(function(){ 
     $('form[name="auction"]').submit(function(){ 
      var id = $(this).find('input[name="id"]').val(); 
      var bidname = $(this).find('input[name="bidname"]').val(); 
      var bid = $(this).find('input[name="bid"]').val(); 
      var currentbid = $('#'+id).text(); 

      var itemdesc = $(this).find('.auction-name').text(); 

      bid = parseFloat(parseFloat(bid).toFixed(2)); 
      currentbid = parseFloat(parseFloat(currentbid).toFixed(2)); 



      if (bidname == '') 
      { 
       alert("No name!") 
       return false; 
      } 

     /* if (bid > currentbid) 
      { 
       alert("Bid is greater than current bid"); 
      } 
      else 
      { 
       alert("Bid is too low!"); 
       return false; 
      }*/ 

      $.ajax({ 
      type: "POST", 
      url: "auction-handler.php", 
      dataType: "json", 
      data: {bidname: bidname, bid: bid, id: id, itemdesc: itemdesc}, 
      success: function(data){ 
       $('#bid'+id).fadeIn('slow', function() { 
        $(this).delay(1500).fadeOut('slow'); 

       }); 
       //$('#auction' + id).find('.nospace').html(currentbid); 
      }, 
      error: function() { 
       alert("bid too low"); 
      } 

     }); 
     return false; 

     }); 
    }); 

는 코드 게시물 경우, 다음과 같은 PHP 코드는 핸들러 페이지에서 실행

if (mysqli_connect_errno()) 
    { 
      echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
    } 

$bidname = $_POST['bidname']; 
$bid = $_POST['bid']; 
$id = $_POST['id']; 
$itemdesc = $_POST['itemdesc']; 



$highestbid = mysqli_fetch_row(mysqli_query($con,"SELECT CurrentBid from Auction WHERE ID = '$id'")); 
    if ($bid <= $highestbid) 
    { 
     $_SESSION['errors']['bid'] = 'Sorry, but the bid is too low'; 
     echo json_encode($_SESSION['errors']); 
     exit; 
    } 
    else 
    { 

$query = "UPDATE auction SET CurrentBid = '$bid', Bidder = '$bidname' WHERE ID = '$id'"; 

$query2 = "INSERT INTO auction_log (Item, Bid, Bidder) VALUES ('$itemdesc','$bid','$bidname')"; 



mysqli_query($con, $query) or die(mysqli_error()); 

mysqli_query($con, $query2) or die(mysqli_error()); 

mysqli_close($con); 

게시 된 입찰가가 현재 MySQL 테이블에있는 것보다 높은지 확인하기 위해 서버 측 유효성 검사를 일부 추가했습니다.

오전 데 문제는 내가 넣어 무엇을 입찰에 상관없이 "죄송하지만, 입찰가가 너무 낮다"오류가 있다는 것입니다.

나는 현재 입찰가보다 높은 입찰을 넣으면, 내가 할 오류, 입찰가를 낮추면 오류가 발생합니다.

두 가지 방법으로 AJAX의 성공 섹션을 트리거합니다.

나는 누군가가 매우 도움이된다면, 나는 아주 간단한 것을 놓치고있는 것처럼 느낀다.

나는 왜 그것이 downvoted되고 있는지 모르겠다, 나는 단지 도움을 찾고있다. 그것은 단지 오류가 있음을 경고하지만, 당신이 잘못 알고하지 않기 때문에

감사

+0

여기서 세션을 지우시겠습니까? – madalinivascu

+0

아약스 이후 어떻게이 메시지를 업데이트하고 있습니까? – madalinivascu

+0

@ madalinivascu 죄송합니다. 어디에서 할 수 있을지 모르겠습니다. 어떤 메시지? – Barnold

답변

0

당신이 AJAX 오류를 처리하는 방법은 매우 좋지 않다.

error: function() { 
       alert("bid too low"); 
      } 

error: function(jqXHR, textStatus, errorThrown) { 
       console.log(textStatus, errorThrown); 
      } 

를 교체하고 당신은 알 다음 AJAX 객체에서

, 콘솔에 실제 오류를 기록 하나 현재의 에러 콜백을 교체 오류가 무엇입니까

+0

안녕하세요, 주석 주셔서 감사합니다, 나는 다음과 같은 응답을받습니다 : 'SyntaxError : JSON.parse : JSON 데이터의 첫 번째 열 1에서 데이터의 예기치 않은 끝'. 나는 이것이 무엇을 의미하는지 너무 확신하지 못합니다. – Barnold

+0

두 경우 모두 (입찰가가 너무 낮거나 입찰가가 더 높음) 동일한 오류가 발생합니까? –

+0

예, 정상적으로 작동합니다 (즉, 더 높은 입찰가를 게시하는 경우 낮은 입찰가를 게시하면 MySQL이 업데이트 됨). 너무 높거나 낮 으면 같은 오류가 발생합니다. – Barnold