在Wordpress中传递给PHP会话的Javascript变量
我不确定这是否是最好的方法,但我有一个按钮,当按下它时调用在Wordpress中传递给PHP会话的Javascript变量,javascript,php,wordpress,session,Javascript,Php,Wordpress,Session,我不确定这是否是最好的方法,但我有一个按钮,当按下它时调用onClickJS函数,它传递了两个参数。我想在php会话中保存这两个参数,然后加载另一个页面并使用这些值 所以,我知道如果我在第页上使用类似的内容!: <?php session_start(); $message1 = "A message"; $message2 = "Another message"; $_SESSION['routineName'] = $message1;
onClick
JS函数,它传递了两个参数。我想在php会话中保存这两个参数,然后加载另一个页面并使用这些值
所以,我知道如果我在第页上使用类似的内容!:
<?php
session_start();
$message1 = "A message";
$message2 = "Another message";
$_SESSION['routineName'] = $message1;
$_SESSION['dayName'] = $message2;
?>
我试过这样的方法:
function trackIt(routine, dayName)
{
<?php
session_start();
$_SESSION['routineName'] = ?> routine; <?php
$_SESSION['dayName'] = $message2;
?>
}
函数trackIt(例程,dayName)
{
常规;
}
和其他人,但什么都不起作用
这就是我调用onClick(trackIt)函数的方式:
echo('<td colspan="3" style="background-color:#005673; text-align:right; padding: 4px 0px;">
<button class="btnTrack" onClick="trackIt(\'' . $name . '\' , \'' . $nameday1 . '\')" >Track It!</button></td>');
echo('
跟踪它!);
我想做的是将例程和dayName保存到会话中
是否可以将JS变量/参数保存到PHP会话中
PS:我正在使用Wordpress。
谢谢 您放在文件中的PHP代码不是在Javascript运行时执行的,而是在页面发送到客户端之前执行的。因此,您不能从内容中的任何位置访问
$\u会话
,您需要从Wordpress的代码中访问。通常这是通过
您需要将Javascript变量传递给服务器端PHP。正如@Grasshopper所说,最好(或至少是最可维护的方式)是通过AJAX:
// This is your JAVASCRIPT trackit function
function trackIt(routine, day) {
$.post(
'/wp-setvar.php',
{
routine : routine,
day : day
}, // You can add as many variables as you want (well, within reason)
function success(data) {
// Here we should receive, given the code below, an object
// such that data.result is a string saying "OK".
// Just in case you need to get back something from the server PHP.
// Otherwise just leave this function out.
}
);
};
在服务器上,您需要创建一个特定的文件来接受传入的变量(最好是从插件执行此操作,以免在安装之外添加文件:WordFence等安全扫描程序不赞成这种做法)。下面这是一个屠夫的解决方案
<?php /** This is wp-setvar.php */
/** Set up WordPress environment, just in case */
require_once( dirname( __FILE__ ) . '/wp-load.php' );
session_id() || session_start();
nocache_headers();
// DO NOT, FOR ANY REASON, ACCESS DIRECTLY $_SESSION
// ONLY USE A VARIABLE WITHIN $_SESSION (here, "ajjx")
// OTHERWISE THIS MAY ALLOW ANYONE TO TAKE CONTROL OF YOUR INSTALLATION.
$_SESSION['ajjx'] = $_POST;
Header('Content-Type: application/json;charset=utf8');
die(json_encode(array(
'result' => 'OK', // This in case you want to return something to the caller
)));
那你就:
<?php print ajjx('routine', 'none!'); ?><!-- will print routine, or "none!" -->
或
一个更具杀伤力的解决方案是在wp config.php
本身中添加上面的函数定义。然后它将在Wordpress中随处可见。如果您有权访问wp config.php
。另外,先备份wp config,然后使用完整的FTP客户端进行备份;不要使用Wordpress插件编辑它,因为如果wp config
崩溃,插件也可能崩溃。。。你会发现自己处于一种“我的开罐器被锁在罐头里”的境地
如果你对上面的一些问题感到不舒服,最好什么都不做。或者先在一个可以轻松重新安装的一次性Wordpress安装上进行练习。这是一个空的Javascript函数(不执行任何操作并返回未定义的
),因为其中的PHP代码不会输出任何内容。AJAX可能是最好的选择。下面是一个jQuery/AJAX示例:但由于您希望将用户带到另一个页面,因此可以使用带有隐藏字段的表单。
<?php
...
$value = '';
if (array_key_exists('ajjx', $_SESSION)) {
if (array_key_exists('routine', $_SESSION['ajjx']) {
$value = $_SESSION['ajjx']['routine'];
}
}
function ajjx($varname, $default = '') {
if (array_key_exists('ajjx', $_SESSION)) {
if (array_key_exists($varname, $_SESSION['ajjx']) {
return $_SESSION['ajjx'][$varname];
}
}
return $default;
}
<?php print ajjx('routine', 'none!'); ?><!-- will print routine, or "none!" -->
<?php print ajjx('routine'); ?><!-- will print nothing if routine isn't defined -->