我正在尝试使用PHP,HTML和Javascript为作业创建购物车,但我很难获得PHP工作的基础知识。
由于这是一项任务,我不会发布我的确切代码,但我会发布一些修改后的代码,用于描述我所挣扎的一般概念。另请注意,我在这篇文章中大大简化了该计划,但我认为我已经包含了所有相关内容。
首先,我在HTML中有一个表单,其中包含selection-options标记:
<?php session_start(); ?> <!-- This is on the first line of the page -->
...
<form id="formexample" method="post" action="cart.php">
<select name="formexample2">
<option value="1">Option 1</option>
<option value="2">Option 2</option>
</select>
<select name="formexample2">
<option value="1">Option 1</option>
<option value="2">Option 2</option>
</select>
<button type="button" onclick="addToCart()">Add to Cart</button>
</form>
<div class="test"></div>
&#34; addToCart()&#34;是一个Javascript函数,我已将其写入单独的文件并导入&#34;标题&#34;标签。我知道这个功能有效,因为当我输入&#34; alert(&#34; test&#34;);&#34;时它会响应。其中一条线如下:
$(".test").append("<?php include \"cart.php\"; ?>");
当我用&#34; test&#34;替换追加时在&#34; p&#34;标签出现没有问题。
&#34; cart.php&#34;是同一目录中的php文件。它存储会话的数据:
<?php
$PHPtest= 1;
$_SESSION['cart'][$_POST['formexample1']] = $_POST['formexample1'];
$_SESSION['cart'][$_POST['formexample1']][$_POST['formexample2']] = [$_POST['formexample2']]
/* Note that in my actual code the form has 11 different select tags, some with up to ten options. I'm storing the information as a big multidimensional array in $_SESSION for ease. */
?>
我试图在我之前提到的相同Javascript函数中创建一个循环,我在其中访问会话数据。循环开始于&#34; if(?php echo isset($ _ SESSION [\&#39; cart \&#39;] [$ _ POST [\&#39; formexample1 \&#39;]] ;? &gt;&#34;)&#34; - 我删除了&lt;在问号之前,这样你就可以在我发帖时看到代码。这是我的程序失败的地方。看来我的问题是通过PHP变量到Javascript。 为了测试这个,我在cart.php的开头写了以下内容:
$PHPtest = 1;
然后我将其写入Javascript函数:
var test = "<?php echo $PHPtest; ?>";
alert(test);
根据Google的说法,这是将PHP变量传递给Javascript时应该使用的格式。当我这样做时,警报只是简单地显示引号之间的内容(即&lt;?php echo $ cartCheck;?&gt;)。
我一直在网上寻找,据我所知,我正在做人们对会话的看法,将PHP变量分配给Javascript和数组;那为什么它不起作用?
提前致谢。
修改
我暂时在cart.php中注释掉了$ _SESSION行。我用$ PHPtest练习。
cart.php现在看起来像这样:
<?php
session_start();
$PHPtest = 1;
echo json_encode($PHPtest);
?>
Javascript函数现在看起来像这样(添加了AJAX):
function addToCart()
{
var test;
$.ajax(
{
url:"cart.php",
type:"post",
data:"$PHPtest",
success:function(response)
{
test = $.parseJSON(response);
console.log(response); //sends the response to your console
},
error:function()
{
console.log("Error");
}
});
alert(test);
}
我也感动了#34;包括&#34; cart.php&#34;&#34;在主页面的顶部。请参阅Josh S的回复中的讨论,了解我是如何到达这里的。
警报显示&#34; undefined&#34;。
编辑2 我已根据此答案更新了我的功能:Get variable from PHP file using JQuery/AJAX
这就是我现在所拥有的:
function addToCart()
{
var test;
$.ajax(
{
url:"cart.php",
type:"post",
data: data,
success:function(PHPtest)
{
test = $.parseJSON(PHPtest);
console.log(test); //sends the response to your console
},
error:function()
{
console.log("Error");
}
});
alert(test);
}
我尝试了各种组合&#34; PHPtest&#34;和&#34;测试&#34;但是无法让它发挥作用。现在我根本没有警觉。
答案 0 :(得分:0)
使用对PHP文件的Ajax调用来处理实时页面和PHP。
PHP在访问浏览器之前已经过处理。你无法动态使用它。
您无法在没有任何诡计的情况下混合使用前端和后端脚本(例如,AJAX调用)。
修改强>
如果使用jQuery,那么您的脚本正在寻找帖子。
$.ajax({
url:"script/location/run.php",
type:"post",
data:"name=value&your=post&data=goeshere",
success:function(response) {
console.log(response); //sends the response to your console
},
error:function() {
console.log("um, error with the script, or it can't be found");
}
});
编辑2
购物车的设置应与此类似;
<?php
session_start(); //On any PHP document (that are not includes or require) this is required at the top of the page to use sessions
$PHPtest= 1;
$_SESSION['cart']['formexample1'] = $_POST['formexample1'];
$_SESSION['cart']['formexample2'] = $_POST['formexample2'] ;
/* Note that in my actual code the form has 11 different select tags, some with up to ten options. I'm storing the information as a big multidimensional array in $_SESSION for ease. */
?>
但是,如果您设置会话变量,您仍然无法使用客户端(浏览器,调用AJAX)上的PHP命令直接访问它们。
因此您需要在此处回复您的购物车,以便您可以在客户端访问它们。
//at the end of cart.php
echo json_encode($_SESSION['cart']); //will convert your session cart to JSON and send to the response variable in your AJAX.
你的JS
var cart = '';
$.ajax({
url:"script/location/run.php",
type:"post",
data:"name=value&your=post&data=goeshere",
success:function(response) {
//response will hold the JSON value of your cart
cart = $.parseJSON(response); //decodes to a JSON object in JavaScript;
//you can access the cart variables like this
console.log(cart.formexample1);
},
error:function() {
console.log("um, error with the script, or it can't be found");
}