使用会话将HTML,Javascript和PHP连接

时间:2016-02-27 01:11:33

标签: javascript php html session

我正在尝试使用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;但是无法让它发挥作用。现在我根本没有警觉。

1 个答案:

答案 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");
    }