2016-05-14 101 views
2

正如你所看到的,我有這個頁面,每個表格行上都有'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

回答

0

你檢查過,如果項目已插入到數據庫中的表(它應該命名爲「cartitem s「或類似的..)?

據我所知,購物車頁面只是檢索該表中的項目。 因此,首先確保項目已成功插入。

+0

是的項目可以插入成功,但它不插入正確的數據行,而是插入另一行的數據 – Marcus

0

實際上,您不需要每行上的<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://stackoverflow.com/questions/37093708/make- a-button-countdown-timer-which-will-be-permanent-disabled-after-5-minutes/37105653#37105653)或者在MySQL表中 - 但是,你可能會使用'SESSION'變量來標識用戶。在購物車上存儲時間戳,以便知道它是否已過時。這些是一些想法。欲瞭解更多信息,谷歌'如何PHP會話工作' – gibberish

+0

非常感謝您的輸入,但我真的很想用數據庫的方式做到這一點。嗯,好吧,我會嘗試更新我的帖子圖片,也許你可以再看一次?:)對不起,因爲麻煩你 – 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')「;因爲您已經發送了它們,不需要查詢來獲取它們 –

相關問題