2013-08-06 3 views
0

Приветствую новичков. Я новичок в программировании, поэтому будьте осторожны.JavaScript/PHP/Ajax задает несколько переменных сеанса

Я пытаюсь опубликовать несколько переменных сеанса с помощью JavaScript, чтобы впоследствии использовать их на своем PHP в нескольких местах.

Мой файл index.php

<?php 
    session_start(); 
?> 
<!DOCTYPE html> 
<html> 
    <head> 
     <title></title> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
     <?php 
     if ((empty($_SESSION['function1Val'])) & (empty($_SESSION['function2Val'])) && (empty($_SESSION['jsStatus']))) { 
      echo '<script type="text/javascript" src="vals.js"></script> 
      <script type="text/javascript"> 
      var session=false; 
      var jsStatus; 
      var function1Val; 
      var function2Val; 
      </script>'; 
     } else { 
      echo '<script type="text/javascript"> 
      var session=true; var jsStatus=' . $_SESSION['jsStatus'] . '; 
      var session=true; var function1Val=' . $_SESSION['function1Val'] . '; 
      var session=true; var function2Val=' . $_SESSION['function2Val'] . '; 
      </script>'; 
     } 
     ?> 
    </head> 
    <body> 
    <?php 

echo $jsStatus; 
echo $function1Val; 
echo $function2Val; 

session_destroy(); 
     ?> 
    </body> 
</html> 

Мои vals.js файл

window.onload = function() { 
    // if there is no session (session = false) 
    if (!session) { 

     // Set value to variable jsStatus 
     jsStatus = 'enabled'; 

     // Call function to get function1 
     function1(); 

     // Call function to get function2 
     function2(); 

     // Make ajax call to php page to set the session variable 
     setSession(); 
    } 
} 

function function1() { 

    // code to get value goes here 
    function1Val = 'result1'; 
} 

function function2() { 

    // code to get value goes here 
    function2Val = 'result2'; 
} 

function setSession() { 
    var xmlhttp; 
    if (window.XMLHttpRequest) 
     {// code for IE7+, Firefox, Chrome, Opera, Safari 
     xmlhttp=new XMLHttpRequest(); 
     } 
    else 
     {// code for IE6, IE5 
     xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
     } 
    xmlhttp.onreadystatechange=function() 
     { 
     if (xmlhttp.readyState==4 && xmlhttp.status==200) 
     { 
     // Reload the page 
     window.location.reload(); 
     } 
     } 
    xmlhttp.open("POST","session.php?function1Val=" + function1Val,true); 
    xmlhttp.send(); 

    // like this I want to transfer other values of 'function2Val' and 'jsStatus' 
} 

Мой session.php файл

<?php 
    session_start(); 

    // check if it is already set if you like otherwise: 
    $_SESSION['function1Val'] = $_REQUEST['function1Val']; 
    $_SESSION['function2Val'] = $_REQUEST['function2Val']; 
    $_SESSION['jsStatus'] = $_REQUEST['jsStatus']; 
?> 

Я знаю, что код грязный но я не знаю, как написать t он правильный синтаксис. Я действительно пытался изменить один переменный код, но не смог. следовательно, нужна помощь.

Идея состоит в том, чтобы публиковать различные значения, полученные из различных функций JavaScript, для сеанса для использования PHP.

Пожалуйста, помогите.

UPDATE:

Это должно быть так, как значения в указанных переменных могут быть вычислены с помощью только JavaScript.

+1

Человек, я бы предложил вам сохранить ваши переменные php в скрытых div. Тогда вы можете легко использовать и обновлять эти значения и более чистые! –

+0

Я не думаю, что использование скрытых divs даст вам проблемы в приложении. Я не вижу причины. Они не занимают места, а их, как будто они не существуют, просто задерживают ценность. –

ответ

1

Вам необходимо объединить параметры амперсандом (&).

Используйте эту линию

xmlhttp.open("POST","session.php?function1Val=" + function1Val+"&function2Val=" + function2Val+"&jsStatus=" + jsStatus,true); 

BTW: Я действительно предлагаю использовать JQuery или аналогичную библиотеку для AJAX запросов. Кроме того, я бы использовал JSON для обмена данными или массивом Javascript, где имена ключей являются именами переменных.

+0

Спасибо за помощь. Как насчет этой строки в 'index.php' ------' if ((empty ($ _ SESSION ['function1Val'])) & (empty ($ _ SESSION ['function2Val'])) && (empty ($ _ SESSION ['jsStatus']))) 'а также другие части кода? –

+0

Я не совсем понимаю вопрос. Вы спрашиваете, каким будет более чистое решение? Легким взломом было бы создание массива на PHP, где ключи являются именами переменных, а значения - это код JS. – Pat

+0

Но используйте хорошие меры предосторожности против инъекций XSS (например, воздержитесь от предопределенных имен функций вместо чистого кода Javascript). Если это действительно необходимо, я могу привести пример завтра. – Pat

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