ねえ、私はPHPを初めて使用するので、私がどのようにプログラミングしているかについての洞察を本当に望んでいます。また、セッションの問題の解決策を思い付くのに苦労しています。
私は物々交換およびローカルトレードシステム(LETS)のスクリプトを作成しており、現在、ユーザーがオファー中のすべての製品/サービスを表示し、製品/サービスをクリックして詳細を表示できるオファーページをコーディングしています。製品/サービスをクリックすると、彼らは入札することができます。LETSシステムでは、メンバーは他の人と取引することで稼ぐことができるタイム/ライフドルを持っています。(政府が使用している現在の法定通貨システムとは異なり)仕事をしている人々から作成された代替通貨のほとんどです。したがって、ユーザーがライフドルを持っている場合、製品/サービスを提供している他のユーザーに入札することができます。
私はこれをすべて、と呼ばれる1つの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
最後までセッションは機能します。彼らがルートを進んだ場合、問題はないと思われ、私の検証をバイパスすることはできません。ただし、ユーザーが「say」offers.php?id=100
をクリックしてからブラウザーのアドレスバーにURLoffers.php?id=200&confirm
を入力すると、検証をバイパスして、オファーを2回入力することができます(既にオファーを行っている場合)。ユーザーが他のユーザーに直接アクセスした場合も同じことが起こります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