Привет, я новичок в PHP, поэтому очень хотел бы, чтобы вы поняли, как я программирую, а также у меня возникли проблемы с решением проблемы с сессией.
Я делаю скрипт для бартерной и Локальной торговой системы ( LETS ), и в настоящее время я кодирую страницу предложения, где пользователь может просмотреть все предлагаемые товары / услуги и затем нажать на продукт / услуга, чтобы получить более подробную информацию. После нажатия на товар / услугу они могут сделать ставку. В системе LETS участники имеют Доллары времени / жизни, которые они могут заработать, торгуя с другими людьми. Так что в значительной степени это его альтернативная валюта, которая создается из людей, выполняющих работу (в отличие от нашей нынешней системы фиатных валют, которую используют правительства). Поэтому, если у пользователя есть Life Dollars, он может сделать ставку другому пользователю, который предлагает свои товары / услуги.
Я делаю все это на одной странице PHP, которая называется offers.php
. Проще говоря, будет 4 страницы, сделанные из offers.php
. Когда пользователь сначала просматривает раздел предложений (offers.php
), он видит все предложения, затем он может щелкнуть предложение (offers.php?id=X
), а затем щелкнуть, чтобы сделать ставку (offers.php?id=X&action=makebid
), а затем подтвердить ставку (offers.php?id=X&action=confirm
).
Хорошо, поэтому проблема с моими Сессиями такова: Сессии работают, когда пользователь начинает с offers.php?id=X
до конца. Если они пойдут по тому пути, к которому, как они полагают, проблем быть не должно, они не смогут обойти мою проверку. Однако, если пользователь нажимает, скажем, offers.php?id=100
, а затем вводит URL offers.php?id=200&confirm
в адресную строку браузера, он может пропустить мою проверку, в результате чего предложение будет введено дважды (если они уже сделали предложение). То же самое происходит, когда пользователь переходит непосредственно на другой offers.php?etc
URL, но это не составляет большой проблемы. Я все еще хотел бы исправить это, потому что я обеспокоен тем, когда страница продукта / услуги вставляется на другой веб-сайт, потому что тогда сеансы не будут работать должным образом. Имеет ли смысл то, что я говорю? Я могу объяснить больше, если это необходимо. Я люблю программирование, поэтому выкидывайте любые советы / проблемы, которые вы можете. Спасибо, что нашли время:)
Вот мой offers.php
код:
<?php
require_once('startsession.php');
require_once('dbconnect.php');
if (!isset($_SESSION['user_id'])) {
echo '<p class="login">Please <a href="login.php">log in</a> to access this page.</p>';
exit();
}
require_once('navmenu.php');
$dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
if (isset($_GET['id']) && $_GET['action'] == 'confirm') {
$adid = $_GET['id'];
$userid = $_SESSION['user_id'];
$cost = $_SESSION['cost'];
$sellerid = $_SESSION['seller_id'];
//Check if bid was already made
$query = "SELECT * FROM transactions WHERE ad_id = '$adid' AND buyer_id = '$userid'";
$data = mysqli_query($dbc, $query);
$row = mysqli_num_rows($data);
if ($row == 1) {
echo '<p>Bid has been made</p>';
} else {
//If bid doesnt already exist insert bid
$query = "INSERT INTO transactions (ad_id, buyer_id, seller_id, cost, status) VALUES ('$adid', '$userid', '$sellerid', '$cost', 'O')";
$data = mysqli_query($dbc, $query);
}
} else if (isset($_GET['id']) && $_GET['action'] == 'makeoffer') {
$adid = $_GET['id'];
$userid = $_SESSION['user_id'];
//Check if bid was already made
$query = "SELECT * FROM transactions WHERE ad_id = '$adid' AND buyer_id = '$userid'";
$data = mysqli_query($dbc, $query);
$row = mysqli_num_rows($data);
if ($row == 1) {
echo '<p>You have already made a bid on this..</p>';
} else {
echo '<form method="post" action="offers.php?id=' . $adid . '&action=confirm">';
echo '<p>You are about to bid 5 Life Dollars.';
echo '<input type="submit" value="Confirm" name="submit" /></p>';
echo '</form>';
}
} else if (isset($_GET['id'])) {
$userid = $_SESSION['user_id'];
//Get ad details
$adid = $_GET['id'];
$query = "SELECT * from ads WHERE id = '$adid'";
$data = mysqli_query($dbc, $query);
$row = mysqli_fetch_array($data);
//echo ad details
echo '<p>' . $row['ad_name'] . '<br>' . $row['ad_desc'] . '<br>' . 'Cost: ' . $row['timedollars']
. ' Time Dollars . ' . '<br>';
//Set session seller and cost
$sellerid = $row['seller_id'];
$_SESSION['seller_id'] = $sellerid;
$_SESSION['cost'] = $row['timedollars'];
//Check to see if a bid was already made
$query = "SELECT * FROM transactions WHERE ad_id = '$adid' and buyer_id = '$userid'";
$data = mysqli_query($dbc, $query);
$row = mysqli_num_rows($data);
if ($row == 0 && $userid != $sellerid) {
echo '<a href="offers.php?id=' . $adid . '&action=makeoffer">Make Bid</a></p>';
} else if ($row == 1) {
echo 'Already bidded';
}
} else {
//Get all ads/offers
$query = "SELECT * FROM ads WHERE ad_type = 'O'";
$data = mysqli_query($dbc, $query);
//echo all ads
while ($row = mysqli_fetch_array($data)) {
echo '<p>' . '<a href="offers.php?id=' . $row['id'] . '">' . $row['ad_name'] . '</a>' . '<br>' . $row['ad_desc'] . '</p>';
}
}
mysqli_close($dbc);
?>
enter code here