2016-05-14 1 views
2

Как вы можете видеть, у меня есть эта страница, где есть кнопка «добавить в корзину» в каждой строке таблицы. Допустим, я нажимаю «добавить в корзину» для строки таблицы, где идентификатор продукта равен 1, я бы хотел, чтобы productid, productname, cartquantity были перенесены в корзину покупок на другой веб-странице. Является ли это возможным?Кнопка отправки в каждой строке таблицы, которая вставляет данные этой строки в базу данных

Add to cart page нормально, так как вы можете видеть, я хотел бы добавить идентификатор продукта 1 в мою телегу с количеством 3. Но когда я нажал добавить в корзину

Cart Page Он всегда бежит к моей последней ProductID, который shofffwef и вместо этого добавляет его в корзину. Не уверен, что это происходит не так :(

Вот мой SQL-код для добавления в корзину кнопку

if(isset($_POST['insert'])){ //$_POST[X] X = name of textbox (***You got to do this In BASHOP) take note the productname.    
    $queryinsert = "insert into cart(productid,productname,cartquantity,amount) SELECT productid,productname,'$_POST[cartquantity]', '50' FROM product WHERE productid='$_POST[hidden]'";  
      mysqli_query($dbconn,$queryinsert);             
    } 

И вот мой код, чтобы показать таблицу, как и в первой картине.

while($row = mysqli_fetch_array($result)) { 
    echo "<tr>"; 
    echo "<td>"."<input type = 'text' name='productid' value=". $row['productid'] ."></td>"; 
    echo "<td>"."<input type = 'text' name='productname' value=". $row['productname'] ."></td>"; 
    echo "<td>" . $row['retailprice'] . "</td>"; 
    echo "<td>" . $row['pointsformula'] . "</td>"; 
    echo "<td>"."<button type='button' class='quantityaddsub' id='sub' onclick='quantitysub(".$row['productid'].")'>-</button>". 
        "<input type='text' class='quantity' name='cartquantity' id='quantity".$row['productid']."' value=1>". 
        "<button type='button' class='quantityaddsub' id='add' onclick='quantityadd(".$row['productid'].")'>+</button>". 
    "<input type='hidden' name='hidden' value=".$row['productid']."></td>"; 
    echo "<td>" . "<input type='submit' name='insert' value='Add To Cart'" . "></td>"; 
    echo "</tr>"; 
} 
echo "</table>"; 

Я искал всюду, но не смог найти решение, пожалуйста, помогите мне!

+0

Я думаю, что вам нужно '

' тег для каждой строки. – frz3993

+0

@ frz3993 yup, я сделал это, но не показал здесь, наряду с добавлением метода = 'post' к

тег – Marcus

+0

@Marcus Замечание к комментарию ниже моего ответа – gibberish

ответ

0

Вы проверили, были ли элементы вставлены в таблицу в базе данных (ее следует называть «cartitem» s "или аналогичный ..)?

Насколько я знаю, страница корзины покупок просто извлекает элементы из этой таблицы. Итак, сначала убедитесь, что элементы были вставлены успешно.

+0

Да, элементы могут быть вставлены успешно, но они не вставляются в правильную строку данных, вместо этого вставляют данные другой строки – Marcus

0

На самом деле вам не нужны теги <form> для каждой строки - на самом деле вам может не понадобиться теги <form>, если вы отправляете свою форму с помощью AJAX. Даже если вы отправляете форму в виде формы, вам нужен только один набор тегов <form>.

Что вам нужно, однако, это некоторый javascript для управления процессом добавления в корзину.

jsFiddle Demo

В принципе, вам нужно создать мягкую cart на самой странице. Для этого вы можете использовать переменную javascript или скрытое поле ввода. Давайте использовать скрытое поле ввода и оставить его нескрываемым на некоторое время, так что вы можете увидеть, что происходит:

<form id="tcform" method="post" action="checkout.php"> 
    <input type="text" id="tempcart" /><!-- when ready, change to type="hidden" --> 
</form> 

Каждый раз, когда кнопка AddToCart нажата, она будет добавить, что идентификатор ТР в корзине.Чтобы сделать вещи проще, давайте создадим идентификатор для каждого TR, добавьте PRODUCTID в качестве компонента ID этого ТР:

$out = "<table>"; 
while($row = mysqli_fetch_array($result)) { 
    $out .= "<tr id='tr_" .$row['productid']. "'>"; 
    $out .= "<td>"."<input type = 'text' name='productid' value=". $row['productid'] ."></td>"; 
    $out .= "<td>"."<input type = 'text' name='productname' value=". $row['productname'] ."></td>"; 
    $out .= "<td>" . $row['retailprice'] . "</td>"; 
    $out .= "<td>" . $row['pointsformula'] . "</td>"; 
    $out .= "<td>"."<button type='button' class='quantityaddsub' id='sub' onclick='quantitysub(".$row['productid'].")'>-</button>". 
        "<input type='text' class='quantity' name='cartquantity' id='quantity".$row['productid']."' value=1>". 
        "<button type='button' class='quantityaddsub' id='add' onclick='quantityadd(".$row['productid'].")'>+</button>". 
    "<input type='hidden' name='hidden' value=".$row['productid']."></td>"; 
    $out .= "<td>" . "<input type='submit' name='insert' value='Add To Cart'" . "></td>"; 
    $out .= "</tr>"; 
} 
$out .= "</table>"; 
echo $out; 

Теперь каждый TR имеет свой идентификатор, как: tr_17

Ваш код AddToCart может выглядеть как это:

$('.btnAddToCart').click(function(){ 
    var thisTR = $(this).closest('tr'); 
    thisTR.addClass('clicked'); //optional - use CSS to color row 
    var trid = thisTR.attr('id'); //tr_17 
    trid = trid.split('_')[1]; //17 
    $('#tempcart').val($('#tempcart').val() +'|'+ trid); 
}; 

Когда кнопка нажата CHECKOUT, вы можете использовать JavaScript, чтобы отправить tcform вместо:

$('#btnCheckout').click(function(){ 
    $('#tcform').submit(); 
}); 

Обратите внимание, что в приведенном выше примере используется JQuery, так что не забудьте включить свою библиотеку:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.2/jquery.min.js"></script> 

Конечная нота: при устранении проекта, как это, разбить его на этапы. Страница checkout.php (или что бы вы ни называли) сначала должна быть проверена с использованием жестко заданных значений.

После того, как он надежно помещает жестко заданные значения в базу данных, следующий тест, какие данные он получает. Сделайте это, создав страницу dummy checkout.php, которая просто отображает на экране данные, полученные через $_POST. Как только вы убедитесь, что обе части работают правильно, затем соедините их и ... надеюсь, что он будет работать в первый раз. Если нет, вы, по крайней мере, знаете, что работает, и отладочная работа намного проще/быстрее.

Bon шанс.

+0

О, я вижу, я посмотрю на нее и попробую ее когда я им благодарю! Значит, вы имеете в виду, что когда я добавляю в корзину, он хранится во временной корзине, и только в конце я отправляю всю временную корзину в базу данных? Поскольку пользователь может перейти на другие страницы и опасается, что временные данные корзины будут потеряны, если пользователь перейдет на другую страницу, прежде чем вернуться в корзину. – Marcus

+0

Если вы беспокоитесь о том, что пользователь покидает текущую страницу, вы можете сохранить временную корзину на сервере, [возможно, используя переменную '$ _SESSION'] (http://stackoverflow.com/questions/37093708/make- a-button-countdown-timer-which-will-be-finally-disabled-after-5-minutes/37105653 # 37105653) или в таблице MySQL, но, опять же, вы, вероятно, будете использовать переменную 'SESSION' для идентификации пользователя , Храните временную метку с тележкой, чтобы вы знали, что она устарела. Это некоторые идеи. Для получения дополнительной информации google 'how do php sessions work' – gibberish

+0

Большое спасибо за ваш ввод, но я действительно очень хочу это сделать в базе данных. Uhhmm, хорошо, я постараюсь обновить мои фотографии, и, может быть, вы снова можете посмотреть?:) Извините за inconviniencing вы – Marcus

0

Вам нужно отделить каждую строку своей собственной формой. Предполагая, что вы хотите, чтобы избежать JQuery

while($row = mysqli_fetch_array($result)) { 
echo "<tr><form action='otherscript.php' method='POST'>"; 
echo "<td>"."<input type = 'text' name='productid' value=". $row['productid'] ."></td>"; 
echo "<td>"."<input type = 'text' name='productname' value=". $row['productname'] ."></td>"; 
echo "<td>" . $row['retailprice'] . "</td>"; 
echo "<td>" . $row['pointsformula'] . "</td>"; 
echo "<td>"."<button type='button' class='quantityaddsub' id='sub' onclick='quantitysub(".$row['productid'].")'>-</button>". 
       "<input type='text' class='quantity' name='cartquantity' id='quantity".$row['productid']."' value=1>". 
       "<button type='button' class='quantityaddsub' id='add' onclick='quantityadd(".$row['productid'].")'>+</button>". 
"<input type='hidden' name='hidden' value=".$row['productid']."></td>"; 
echo "<td>" . "<input type='submit' name='insert' value='Add To Cart'" . "></td>"; 
echo "</form></tr>"; 
} 
echo "</table>"; 

Таким образом, когда вы нажмете кнопку отправить, только данные этой строки посылается. Сейчас это немного грязно.

+0

AHhh он все еще не работает :(я пробовал – Marcus

+0

Является ли моя инструкция sql правильной? – Marcus

+0

@Marcus Я бы так предположил, но попробуйте это в любом случае $ queryinsert = "вставить в корзину (productid, productname, cartquantity, количество) Значения ('$ _ POST [productid]', '$ _POST [productname]',, '$ _ POST [cartquantity]', '50') ", так как вы уже отправили им нет необходимости в получении запроса –

Смежные вопросы