提交表格的每一行,将该行的数据插入到数据库
正如你所看到的,我有这个页面,每个表格行上都有'add to cart'按钮。比方说,我点击“添加到购物车”的产品ID为1的表行,我想要productid,productname,cartquantity转移到另一个网页上的购物车。可能吗?提交表格的每一行,将该行的数据插入到数据库
好了,所以你可以看到我想产品ID 1添加到我的车与量3.但是,当我按下添加到购物车
它总是跑到我的最后的productid是shofffwef并将其添加到购物车中。不知道是怎么回事错:(
下面是添加到购物车按钮
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>";
我的SQL代码
我到处搜索,但没有找到解决办法,请帮助我谢谢!
你检查过,如果项目已插入到数据库中的表(它应该命名为“cartitem s“或类似的..)?
据我所知,购物车页面只是检索该表中的项目。 因此,首先确保项目已成功插入。
是的项目可以插入成功,但它不插入正确的数据行,而是插入另一行的数据 – Marcus
实际上,您不需要每行上的<form>
标签 - 事实上,如果您使用AJAX提交表单,则根本不需要<form>
标签。即使您将表格作为表单提交,您也只需要一组<form>
标签。
你需要什么,但是,有一些JavaScript管理添加到购物车过程。
基本上,你需要在网页上创建软cart
。为此,您可以使用JavaScript变量或隐藏的输入字段。让我们用一个隐藏的输入字段,并把它取消隐藏暂且所以你可以看到发生了什么事情:
<form id="tcform" method="post" action="checkout.php">
<input type="text" id="tempcart" /><!-- when ready, change to type="hidden" -->
</form>
每次的AddToCart按钮被点击,它会添加TR的id到购物车中。为方便起见,我们为每个TR的ID,添加产品ID为TR的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有一个ID,如: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);
};
当点击结帐按钮,你可以使用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
页面来实现这一点,该页面仅通过$_POST
收到的数据回显屏幕。一旦你确定这两部分工作正常,然后把它们放在一起,并希望它会第一次工作。如果没有,至少你知道什么是工作,调试工作更简单/更快。
Bon机会。
哦,我明白了,我会研究它并尝试它当我免费感谢这么多!那么你是说,当我加入购物车时,它会存储在临时购物车中,只有在最后我将整个临时购物车提交给数据库?因为用户可能转到其他页面,并且如果用户在返回购物车之前导航到另一个页面,那么临时购物车数据将会丢失。 – Marcus
如果您担心用户离开当前页面,那么您可以将临时购物车存储在服务器上,[也许使用'$ _SESSION'变量](http://stackoverflow.com/questions/37093708/make- a-button-countdown-timer-which-will-be-permanent-disabled-after-5-minutes/37105653#37105653)或者在MySQL表中 - 但是,你可能会使用'SESSION'变量来标识用户。在购物车上存储时间戳,以便知道它是否已过时。这些是一些想法。欲了解更多信息,谷歌'如何PHP会话工作' – gibberish
非常感谢您的输入,但我真的很想用数据库的方式做到这一点。嗯,好吧,我会尝试更新我的帖子图片,也许你可以再看一次?:)对不起,因为麻烦你 – Marcus
你需要用自己的形式分隔每一行。假设你想避免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>";
这样,当你点击提交,只发送该行的数据。现在它有点混乱。
我觉得你需要'
'标签为每一行。 – frz3993@ frz3993 yup,我做到了,但并没有在这里显示,同时添加方法='发布'
标记 – Marcus@Marcus在我的答案 – gibberish