2014-12-02 4 views
0

Я не уверен, что это лучший способ сделать это, но у меня есть кнопка, которая при нажатии на нее вызывает функцию JS onClick, и она передала два параметра. Я хочу сохранить эти два параметра в сеансе php, затем загрузить другую страницу и использовать эти значения.Переменная Javascript, переданная на сеанс PHP в Wordpress

Так, я знаю, что если я использую что-то вроде этого на странице!

<?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?

PS: Я использую Wordpress.

Спасибо!

+3

Это пустая функция Javascript (ничего не делает и возвращает 'undefined'), так как внутри PHP-код ничего не выводит. – Paulpro

+1

AJAX, вероятно, лучший выбор. Вот пример jQuery/AJAX: http://stackoverflow.com/questions/2269307/using-jquery-ajax-to-call-a-php-function – Grasshopper

+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 
))); 

Теперь, когда вам нужна переменная сохранения сеанса, например."Рутина", вы положили

<?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 --> 

еще более решительным решением является добавление определения функции abov e в пределах wp-config.php сам. Тогда он будет доступен везде в Wordpress. Если у вас есть доступ к wp-config.php. Кроме того, резервное копирование wp-config сначала и используйте для этого полный FTP-клиент; не используйте плагин Wordpress, чтобы отредактировать его, так как если wp-config выйдет из строя, плагин может также сработать ... и вы окажетесь в ситуации . Могу ли я иметь возможность открывать-закрывать-внутри-может- ,

Если вы не чувствуете себя комфортно с некоторыми из вышеперечисленных, лучше всего, если вы ничего не сделаете. Или сначала начните с одноразовой установки Wordpress, которую вы можете легко установить.

Смежные вопросы