Как решить проблему, связанную с вставкой записей в MySQL с помощью PHP? - PullRequest
1 голос
/ 04 марта 2012

У меня есть две страницы, product.php и viewcart.php.Когда пользователь нажимает кнопку в product.php, он добавляет продукт в бэкэнд (вместе с его атрибутами) и переходит в viewcart.php.Данные передаются в viewcart.php с помощью кода ниже.Есть некоторые переменные php, которые необходимо передать в дополнение к значению из текстового поля в product.php (переменная «val» ниже).

<script language="javascript">
          function test()
{
    var val=document.getElementById("textarea").value;  
    var hrf="viewcart.php?retailer=<?php echo $retailer?>&link=<?php echo $link; ?>&price=<?php echo $price; ?>&title=<?php echo $title; ?>&options="+val;
        document.getElementById("a_link").href=hrf;
}
</script>
<a href ="#" id="a_link" onclick="test();" class="btn btn-success" type="submit"><i class="icon-shopping-cart icon-white"></i>  Add to Cart</a>

На viewcart.php продукт добавляется в бэкэнд, а затем отображается с помощью кода ниже:

@$link = $_GET['link'];
$price = $_GET['price'];
$title = $_GET['title'];
$retailer = $_GET['retailer'];
$options = $_GET['options'];
$session = session_id();
$_SESSION['sess_var'] = $session;

//connect to database code here
mysql_query("INSERT INTO sessionid (sessionid, link, retailer, price, title, qt, options) VALUES('$session' , '$link', '$retailer', '$price', '$title', 1, '$options') ");

Проблема, с которой я сталкиваюсь, заключается в том,обновляет viewcart.php;продукт добавляется снова из-за кода выше.Как я могу гарантировать, что продукт будет добавлен в базу данных ТОЛЬКО, если пользователь нажимает кнопку отправки на product.php (а не обновляя viewcart.php или нажимая кнопку «назад», чтобы перейти к viewcart.php)?

Ответы [ 4 ]

1 голос
/ 04 марта 2012

Технически, если вы обновите страницу теми же данными POST, насколько я знаю, у вас будет тот же реферер, поэтому вам не следует пытаться проверить, является ли реферер product.php.

Что вы должны сделать, это использовать запрос обновления / вставки MySQL.Сначала убедитесь, что вы также вставляете первичный ключ в свой запрос (чтобы при обновлении страницы это был тот же ключ), а затем используйте что-то похожее на:

INSERT INTO sessionid (id,a,b,c) VALUES (0,1,2,3)
  ON DUPLICATE KEY UPDATE id=id;

Наконец, незабудьте очистить ваши данные.

0 голосов
/ 04 марта 2012

Эта проблема часто решается с использованием шаблона POST / Redirect / GET . Как правило, если у вас есть файл с именем viewcart.php, он должен отображать корзину и не добавлять продукт.

0 голосов
/ 04 марта 2012
// where submit is the name of the forms submit input/button
if ($_GET["submit"]) {
    // add to cart
} else {
    // products should have already been added
}
0 голосов
/ 04 марта 2012

Вы должны нажать, если строка уже была добавлена. Поэтому используйте select, и если «fetch ()» возвращает что-то отличное от «false», вставьте свои данные.

...