我不确定这是否是最好的方法,但我有一个按钮,当按下它时调用onClick
JS函数并传递两个参数。我想在php会话中保存这两个参数,然后加载另一个页面并使用这些值。
所以,我知道如果我在PAGE上使用这样的东西!:
<?php
session_start();
$message1 = "A message";
$message2 = "Another message";
$_SESSION['routineName'] = $message1;
$_SESSION['dayName'] = $message2;
?>
我可以转到第2页,使用$_SESSION['routineName']
我可以使用该信息。
所以,在第1页,我在使用onClick
调用的函数内部有代码:
function trackIt(routine, dayName)
{
<?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;
?>
}
和其他人,但没有任何作用。
这就是我调用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>');
我想要做的是将例程和dayName保存到会话中。
是否可以将JS变量/参数保存到PHP Session中?
PS:我正在使用Wordpress。
谢谢!
答案 0 :(得分:1)
您在文件中放置的PHP代码在Javascript运行时不执行,甚至在页面发送到客户端之前执行。因此,您无法从内容中的任何位置访问$_SESSION
,您需要从Wordpress的代码中执行此操作。通常这是通过a plugin完成的。
您需要将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
)));
现在,只要您需要会话保存的变量,例如&#34;例行&#34;,你把
<?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 -->
一个更加屠杀的解决方案是在wp-config.php
本身中添加上面的函数定义。然后它将在Wordpress中随处可用。只要您有权访问wp-config.php
。此外,备份wp-config首先和使用完整的FTP客户端来执行此操作;不要使用Wordpress插件进行编辑,因为如果wp-config
崩溃,插件也可能崩溃......而且你会发现自己处于 my-can-opener-被锁定在一个可以的情况。
如果您对上述某些方面感到不舒服,那么如果您什么都不做,那就最好了。或者首先在可以轻松重新安装的可消耗Wordpress安装上练习。