【发布时间】:2016-06-10 10:10:34
【问题描述】:
我正在尝试使用 PHP、HTML 和 Javascript 为作业创建一个购物车,但我什至连基本的 PHP 工作都难以掌握。
由于这是一项作业,我不会发布我的确切代码,但我会发布一些修改过的代码来描述我正在努力解决的一般概念。另请注意,我在这篇文章中大大简化了程序,但我认为我已经包含了所有相关内容。
首先,我在 HTML 中有一个带有选择选项标签的表单:
<?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>
"addToCart()" 是一个 Javascript 函数,我已将其写入一个单独的文件并导入到“header”标签中。我知道该功能有效,因为它会在我输入“alert("test");”时做出响应。其中一行如下:
$(".test").append("<?php include \"cart.php\"; ?>");
当我在“p”标签中用“test”替换附加时,它看起来没有问题。
“cart.php”是同一目录下的一个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 函数中创建一个循环,在其中我访问会话数据。循环以 "if(?php echo isset($_SESSION[\'cart\'][$_POST[\'formexample1\']]; ?>")" 开始 - 我在这里删除了问号之前的
$PHPtest = 1;
然后我把它写进了 Javascript 函数中:
var test = "<?php echo $PHPtest; ?>";
alert(test);
根据 Google 的说法,这是您在将 PHP 变量传递给 Javascript 时应该使用的格式。当我这样做时,警报只会准确显示引号之间的内容(即 )。
我一直在网上寻找,据我所知,我正在做人们所说的会话,将 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);
}
我还在主页顶部移动了“include "cart.php"”。请参阅 Josh S 的回复下的讨论,了解我是如何到达这里的。
警报显示“未定义”。
编辑 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);
}
我尝试了“PHPtest”和“test”的各种组合,但无法正常工作。现在我根本没有收到任何警报。
【问题讨论】:
-
当你
alert("<?php echo $PHPtest; ?>")时会发生什么? -
警报显示引号之间的确切内容,即显示尖括号、问号和其余部分。
-
你在html页面的
<script>标签中使用它吗? -
Javascript 包含在“”中。然后,cart.php 被包含在一个带有 "$(".test").append("");" 的 Javascript 函数中。
-
也许你应该使用
load()函数,就像这里的stackoverflow.com/questions/16933989/… - 所以...$(".test").load("path/to/cart.php");。也许它没有工作,因为 php 没有被正确加载。
标签: javascript php html session