提交表格的每一行,将该行的数据插入到数据库

问题描述:

正如你所看到的,我有这个页面,每个表格行上都有'add to cart'按钮。比方说,我点击“添加到购物车”的产品ID为1的表行,我想要productid,productname,cartquantity转移到另一个网页上的购物车。可能吗?提交表格的每一行,将该行的数据插入到数据库

Add to cart page 好了,所以你可以看到我想产品ID 1添加到我的车与量3.但是,当我按下添加到购物车

Cart Page 它总是跑到我的最后的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代码

我到处搜索,但没有找到解决办法,请帮助我谢谢!

+0

我觉得你需要'

'标签为每一行。 – frz3993
+0

@ frz3993 yup,我做到了,但并没有在这里显示,同时添加方法='发布'

标记 – Marcus
+0

@Marcus在我的答案 – gibberish

你检查过,如果项目已插入到数据库中的表(它应该命名为“cartitem s“或类似的..)?

据我所知,购物车页面只是检索该表中的项目。 因此,首先确保项目已成功插入。

+0

是的项目可以插入成功,但它不插入正确的数据行,而是插入另一行的数据 – Marcus

实际上,您不需要每行上的<form>标签 - 事实上,如果您使用AJAX提交表单,则根本不需要<form>标签。即使您将表格作为表单提交,您也只需要一组<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的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机会。

+0

哦,我明白了,我会研究它并尝试它当我免费感谢这么多!那么你是说,当我加入购物车时,它会存储在临时购物车中,只有在最后我将整个临时购物车提交给数据库?因为用户可能转到其他页面,并且如果用户在返回购物车之前导航到另一个页面,那么临时购物车数据将会丢失。 – Marcus

+0

如果您担心用户离开当前页面,那么您可以将临时购物车存储在服务器上,[也许使用'$ _SESSION'变量](http://*.com/questions/37093708/make- a-button-countdown-timer-which-will-be-permanent-disabled-after-5-minutes/37105653#37105653)或者在MySQL表中 - 但是,你可能会使用'SESSION'变量来标识用户。在购物车上存储时间戳,以便知道它是否已过时。这些是一些想法。欲了解更多信息,谷歌'如何PHP会话工作' – gibberish

+0

非常感谢您的输入,但我真的很想用数据库的方式做到这一点。嗯,好吧,我会尝试更新我的帖子图片,也许你可以再看一次?:)对不起,因为麻烦你 – 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>"; 

这样,当你点击提交,只发送该行的数据。现在它有点混乱。

+0

AHHH它仍然无法正常工作:(我试过 – Marcus

+0

是我的SQL语句正确吗? – Marcus

+0

@Marcus我会承担如此,但试试这个$ queryinsert =“插入到购物车(productid,productname,cartquantity,金额)值('$ _ POST [productid]','$ _POST [productname]','$ _ POST [cartquantity]','50')“;因为您已经发送了它们,不需要查询来获取它们 –