【发布时间】:2017-01-19 22:11:41
【问题描述】:
我正在尝试创建一个非常简单的拍卖页面,感谢这个社区,我离我越来越近了。
该页面非常简单,发生的情况是有人可以输入他们的姓名和出价,出价,然后页面将为他们刷新新的出价(前提是它高于当前的出价)。不幸的是,这只会刷新出价者的页面。
我希望为当前正在查看该页面的每个人更新该页面,以便他们确保出价高于当前出价。
我在网上查看过,但找不到太多对我有帮助的东西,我看到这是通过称为轮询的方法完成的,或者 AJAX 和 jQuery - 但是我不确定它们是否相同。
这是我的 HTML 代码的 sn-p,此代码检索拍卖:
<div class="auction-main">
<h1 class="auction-title">Bathroom Accessories</h1>
<?php
$con=mysqli_connect("xxxx","xxxx","xxxx","xxxx");
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$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></form>";
}
echo "</table>";
mysqli_close($con);
?>
这是我的 jQuery 的 sn-p,此代码发布到 PHP 页面以实际出价:
<script>
$(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();
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",
data: {bidname: bidname, bid: bid, id: id, itemdesc: itemdesc},
success: function(data){
window.location.reload();
bidname = '';
bid = '';
currentbid = '';
}
});
return false;
});
});
</script>
最后,这是我的 PHP 的 sn-p。此代码将出价发布到 MySQL 数据库:
<?php
ini_set('display_errors', 'On');
error_reporting(E_ALL | E_STRICT);
$con=mysqli_connect("lena","Admin","1tadm1nI","auction");
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'];
$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 数据库上的任何更新几乎“推送”到网页。
如果有人可以给我建议,或编写 sn-ps 代码以说明我如何实现这一点,我将不胜感激。
感谢您的阅读,如果您需要更多信息,请告诉我。
【问题讨论】:
-
您需要从服务器端更新客户端(或至少触发客户端让它知道有新数据要从服务器拉取)。一种方法是使用
WebSockets。 -
这不是一件简单的事情,但也许这可以帮助你stackoverflow.com/questions/333664/…
-
为此目的最好使用套接字。 Jquery 和 AJAX 的另一种方法是每秒更新一次(大约)并刷新信息。但最好的方法是使用套接字。你可以在谷歌中查看它们。 socket.io / websocket 等
-
或者你可以尝试在setTimeLimit中调用一个简单的ajax函数,例如每'N'秒刷新一次内容。不是一个完美的解决方案,但有效
-
或者如果你不坚持使用mysql,那么你可以看看
rethinkdb
标签: php jquery html mysql ajax