2014-12-03 92 views
-1

我試圖創建一個php車,我有一個表與幾個產品,當我點擊提交按鈕調用一些JavaScript,然後提交表單。 當我執行頁面並按下按鈕時,我得到一個頁面「productcart.php?productid = 1 & command = add」,並且chrome表示存在內部服務器錯誤。我相信有一個jscript或PHP錯誤,不會讓變量被拉入php代碼塊。任何人都可以看到有什麼我做錯了嗎? 還有什麼「?productid = 1 & command = add」是什麼意思?爲什麼瀏覽器返回?PHP沒有從jscript獲取變量

<script type="text/javascript"> 
 
\t function addtocart(prod_id) 
 
\t { 
 
\t \t document.productform.productid.value = prod_id; 
 
\t \t document.productform.command.value = 'add'; 
 
\t \t document.productform.submit(); 
 
\t } 
 
\t </script>
<?php 
 
\t include("local-connect.php"); 
 
\t include("productfunctions.php"); 
 
\t 
 
\t if($_REQUEST['command'] == 'add' && $_REQUEST['productid'] > 0) 
 
\t { 
 
\t \t $product_id = $_REQUEST['productid']; 
 
\t \t add_to_cart($product_id, 1); 
 
\t \t echo 'it worked'; 
 
\t \t //header("Location:cart.php"); 
 
\t \t exit(); 
 
\t } 
 
?> 
 

 
<form name="productform" action=""> 
 
\t \t <input type="hidden" name="productid" /> 
 
\t \t <input type="hidden" name="command" /> 
 
\t \t 
 
\t <table id="product_table"> 
 
\t <?php 
 
\t \t $query = "SELECT * FROM products"; 
 
\t \t $result = mysqli_query($dbc,$query) or die ("Error querying database"); 
 
\t \t while($row = mysqli_fetch_array($result)) 
 
\t \t { 
 
\t \t \t echo '<tr> 
 
\t \t \t <td><img id="shopping_img" src="' .$row['image'] . '"/></td> 
 
\t \t \t <td><p><strong>' . $row['name'] . '</strong></p> 
 
\t \t \t <p>' . $row['descri'] . '</p> 
 
\t \t \t <p>Price:<strong>&#36;' . $row['price'] . '</strong></p></td> 
 
\t \t \t <td><input type="button" value="Add to Cart" onclick="addtocart(' . $row['id'] . ')" /></td> 
 
\t \t \t </tr>'; 
 
\t \t } 
 
\t ?> 
 
\t </table> 
 
\t 
 
\t </form>

+0

檢查服務器的錯誤日誌有關500 – 2014-12-03 18:46:19

+3

細節*也什麼了 「?的productid = 1&命令=添加」 呢?爲什麼瀏覽器返回?*因爲GET是GET請求,因爲GET是窗體方法的默認值。 – epascarello 2014-12-03 18:48:49

+1

你應該編輯你的'php.ini'並啓用錯誤記錄。沒有它們的調試真的很難。您可以將'display_errors'或'log_errors'設置爲'On':http://php.net/log-errors – 2014-12-03 18:49:45

回答

0

這將解決? 「的productid = 1個&命令=添加」,在URL和代碼注入保護。 我添加了method =「post」並使用了$ _POST我也使用了intval()來確保一個整數發送給你的函數。

<script type="text/javascript"> 
 
\t function addtocart(prod_id) 
 
\t { 
 
\t \t document.productform.productid.value = prod_id; 
 
\t \t document.productform.command.value = 'add'; 
 
\t \t document.productform.submit(); 
 
\t } 
 
\t </script>
<?php 
 
\t include("local-connect.php"); 
 
\t include("productfunctions.php"); 
 
\t 
 
\t if($_POST['command'] == 'add' && $_POST['productid'] > 0) 
 
\t { 
 
\t \t $product_id = intval($_POST['productid']); 
 
\t \t add_to_cart($product_id, 1); 
 
\t \t echo 'it worked'; 
 
\t \t //header("Location:cart.php"); 
 
\t \t exit(); 
 
\t } 
 
?> 
 

 
<form name="productform" action="" method="post"> 
 
\t \t <input type="hidden" name="productid" /> 
 
\t \t <input type="hidden" name="command" /> 
 
\t \t 
 
\t <table id="product_table"> 
 
\t <?php 
 
\t \t $query = "SELECT * FROM products"; 
 
\t \t $result = mysqli_query($dbc,$query) or die ("Error querying database"); 
 
\t \t while($row = mysqli_fetch_array($result)) 
 
\t \t { 
 
\t \t \t echo '<tr> 
 
\t \t \t <td><img id="shopping_img" src="' .$row['image'] . '"/></td> 
 
\t \t \t <td><p><strong>' . $row['name'] . '</strong></p> 
 
\t \t \t <p>' . $row['descri'] . '</p> 
 
\t \t \t <p>Price:<strong>&#36;' . $row['price'] . '</strong></p></td> 
 
\t \t \t <td><input type="button" value="Add to Cart" onclick="addtocart(' . $row['id'] . ')" /></td> 
 
\t \t \t </tr>'; 
 
\t \t } 
 
\t ?> 
 
\t </table> 
 
\t 
 
\t </form>