Javascript “提交”按钮,用于将该行的数据插入数据库

Javascript “提交”按钮,用于将该行的数据插入数据库,javascript,php,html,sql,Javascript,Php,Html,Sql,如您所见,我有一个页面,每个表行上都有“添加到购物车”按钮。假设我在产品id为1的表行中单击“添加到购物车”,我希望将productid、productname、cartquantity传输到另一个网页上的购物车。可能吗 好的,如你们所见,我想将产品id 1添加到我的购物车中,数量为3。但当我按“添加到购物车”时 它总是运行到我的最后一个productid,即shofffwef,并将其添加到购物车中。不确定出了什么问题:( 这是我的“添加到购物车”按钮的sql代码 if(isset($_PO

如您所见,我有一个页面,每个表行上都有“添加到购物车”按钮。假设我在产品id为1的表行中单击“添加到购物车”,我希望将productid、productname、cartquantity传输到另一个网页上的购物车。可能吗

好的,如你们所见,我想将产品id 1添加到我的购物车中,数量为3。但当我按“添加到购物车”时

它总是运行到我的最后一个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>";
while($row=mysqli\u fetch\u数组($result)){
回声“;
“回声”;
“回声”;
回显“$row['retailprice']”;
回显“$row['pointsformula']”;
回声“.”-“。
"".
"+".
"";
“回声”;
回声“;
}
回声“;

我到处搜索,但找不到解决方案,请帮助我,谢谢!

您是否已检查这些项目是否已插入数据库中的表中(它应命名为“cartitems”或类似名称)

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

事实上,您不需要在每一行上添加
标记——事实上,如果您使用AJAX提交表单,您可能根本不需要
标记。即使您以表单形式提交表单,您也只需要一组
标记

不过,您确实需要一些javascript来管理“添加到购物车”过程

基本上,您需要在页面本身上创建soft
cart
。为此,您可以使用javascript变量或隐藏的输入字段。让我们使用隐藏的输入字段,暂时不隐藏它,这样您就可以看到发生了什么:

<form id="tcform" method="post" action="checkout.php">
    <input type="text" id="tempcart" /><!-- when ready, change to type="hidden" -->
</form>
单击“签出”按钮时,可以使用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
页面(或您的任何页面)应首先使用硬编码值进行测试

一旦它可靠地将硬编码值放入数据库,接下来测试它正在接收的数据。通过创建一个虚拟的
checkout.php
页面,该页面只会将它通过
$\u POST
接收到的数据回显到屏幕上。一旦您确定这两个部分都正常工作,然后将它们放在一起……希望它能做到第一次工作。如果没有,至少你知道什么在工作,调试工作更简单/更快


祝你好运。

你需要用它自己的形式分隔每一行。假设你想避免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>";
while($row=mysqli\u fetch\u数组($result)){
回声“;
“回声”;
“回声”;
回显“$row['retailprice']”;
回显“$row['pointsformula']”;
回声“.”-“。
"".
"+".
"";
“回声”;
回声“;
}
回声“;

这样,当您单击“提交”时,只发送该行的数据。现在有点混乱。

我想您需要为每行添加
标记。@frz3993是的,我这样做了,但没有在这里显示,同时向tag@Marcus注意我的回答下面的注释你需要用它自己的形式分开每一行。你有很多name='hidden'inputsOh,所以我把name='hidden'输入保持原样?只需为每一行添加表单?我已经这样做了,但问题并没有消失..哦,我明白了,我会研究它,并在我有空时尝试一下。非常感谢!那么你的意思是,当我添加到购物车时,它会存储在一个临时购物车中,直到最后我才将整个临时购物车提交给数据库?因为用户可能会转到其他页面,如果用户在返回购物车之前导航到另一个页面,我担心临时购物车数据会丢失。如果您担心用户离开当前页面,那么您可以将临时购物车存储在服务器上,或者存储在MySQL表中-但同样,您可能会使用e> SESSION变量来识别用户。在购物车中存储一个时间戳,以便知道它是否过时。这些是一些想法。有关更多信息,谷歌
php会话如何工作
非常感谢您的输入,但我真的很想用数据库的方式来做。嗯,好的,我将尝试更新我的帖子图片,也许您可以有一个再次查看?:)很抱歉,您没有注意到。是的,项目可以成功插入,但它不会插入正确的数据行,而是插入另一行的数据data@Marcus我假设是这样,但无论如何都要尝试$queryinsert=“插入购物车(productid、productname、cartquantity、amount)值(“$\u POST[productid]”、“$\u POST[productname]“,$”邮政[cartquantity],“50”);由于您已经向他们发送了无需查询即可获取的消息,请将您的购物车插入查询作为字符串回传并发布到此处好的,即使单击第一个产品,我也会从行中获取最后一个产品,如图所示。“插入购物车(productid、productname、cartquantity、amount)从productid='2'所在的产品中选择productid、productname、'1'、'50'”我想这是由于我的“添加到购物车”按钮问题,它无法正确识别我单击的行
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.2/jquery.min.js"></script>
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>";