2014-12-03 66 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>