2010-07-22 4 views
1

У меня есть 2 страницы, один PHP и один Javascript. Я хотел бы передать переменную из этого PHP скрипта на одной странице:Как передать переменную PHP в Javascript?

$strFind="SELECT * FROM cometchat_chatrooms_users WHERE userid=$curmemid"; 
$result=mysql_query($strFind) or die(mysql_error()); 
$row=mysql_fetch_array($result); 
$room=$row['chatroomid']; 

к этому Javascript на другой странице:

var timestamp = 0; 
var currentroom = $room; 
var heartbeatTimer; 
var minHeartbeat = 3000; 
var maxHeartbeat = 12000; 

Как я могу это сделать?

+0

спасибо за все ответы, но ничего из этого не работает, я был уверен, что сеансы один должно сработать. –

+0

Или вы можете использовать запрос AJAX или скрытый ввод. Когда вы используете PHP-сессии, помните, что ваш JavaScript также должен быть сгенерирован PHP. – CSchulz

ответ

2

Вы не может фактически «пропускать» переменную где угодно. Но только скалярное значение. Честно говоря, вы можете передавать только текстовые данные.
Таким образом, в случае JavaScript у вас есть 2 варианта:

  1. Чтобы генерировать весь JS код из PHP вместе со всеми его переменными. Очень нравится, как вы создаете HTML.

  2. Чтобы запросить переменную JS, запущенную в браузере, используя технику AJAX.

8

Вы можете сделать это, когда JavaScript генерируется PHP. Пример:

<?php 
... 
$curmemid = intval($externalValue); 
$strFind = 'SELECT * FROM cometchat_chatrooms_users WHERE userid='.$curmemid; 
$result = mysql_query($strFind) or die(mysql_error()); 

if (isset($result)) { 
    $row = mysql_fetch_array($result); 
    $room = $row['chatroomid']; 
} else 
{ 
    echo 'There is something wrong!'; 
    $room = -1; 
} 
... 
?> 
<script type="text/javascript"> 
var timestamp = 0; 
var currentroom = <?php echo $room; ?>; 
var heartbeatTimer; 
var minHeartbeat = 3000; 
var maxHeartbeat = 12000; 
</script> 
+0

Это просто попытается присвоить значение 'JavaScript * переменной * $ room' (которая не определена) для' currentroom'. – Quentin

+0

Нет, это присвоит переменной JavaScript 'currentroom' значение переменной PHP' $ room'. – CSchulz

+2

@David Dorward: Нет, это не так, этот код абсолютно правильный, '$ room' находится между' ' – nico

-2

Код будет работать как есть. Когда вывод (html и javascript) генерируется вашим php, он уже выполнил замену. Таким образом, ваше значение будет вставлено в виде литерала. Если это строка, вам все равно придется ее процитировать.

var currentroom = '$ room';

станет

вар currentroom = 'myroom';

в производстве.

+0

Нет, это не сработает, см. H3llGhost ответ, как правильно это сделать. – nico

1

на другой странице вы можете использовать $ _SESSION

<script type="text/javascript"> 
var timestamp = 0; 
var currentroom = <?php echo $_SESSION['room']; ?>; 
var heartbeatTimer; 
var minHeartbeat = 3000; 
var maxHeartbeat = 12000; 
</script> 

Для такого же файла/сценария не sequence- его очень простой, не нуждается в ЗАСЕДАНИИ

var currentroom = <?php echo $room; ?>; 
+0

спасибо, что ответили Садату, страница, на которой этот скрипт java должен идти, - это страница .js, ; не работает. –

+0

Это довольно страшный пример. Сессии - относительно сложные звери и могут легко привести к таким вещам, как условия гонки. Возможно, было бы немного лучше, если бы потрудился упомянуть, что вам нужно создать сеанс и хранить в нем данные, прежде чем вы сможете что-то вытащить из него! – Quentin

+0

@ Джон, я это хорошо знаю. Согласно вашему вопросу, вам это нужно на другой странице. Помните одно, вы не можете выполнить php в JS-файле, если вы не разрешаете его с помощью конфигурации основного сервера. – Sadat

2

Другой вариант заключается в том, что из PHP выводит скрытый элемент с переменной в нем, а затем читает JS.

Например

<?php 
echo '<input type="hidden" id="myvar" value='.$val.' />'; 
?> 

, а затем в JS

var v = document.getElementById("myvar"); 
// do something with v.value 

Конечно, это легко подменены клиентом, поэтому берут 2 Предостережения:

1) использовать только если он не является проблемой для любого пользователя, чтобы иметь возможность видеть значение переменной (например, глядя на источник)

2) если JS делает все, что может быть «опасным», например, выполняет асинхронный вызов страницы PHP, которая что-то делает в БД с этим значением, обязательно проверит правильные проверки на второй странице PHP (НЕ в JS), чтобы убедиться, что значение не было изменено

+1

htmlspecialchars! htmlspecialchars! Всякий раз, когда вы помещаете данные, которые вы не знаете, безопасны в документе, используйте htmlspecialchars! Нам не нравятся дыры в безопасности XSS! – Quentin

+0

Что касается двух предупреждений ... они применяются к любым данным, которые вы в конечном итоге просите клиента отправить обратно к вам. Нет ничего особенного в том, чтобы встраивать его в HTML. – Quentin

+0

@ Давид Дорвард: извините? Какая часть данных вы считаете небезопасной? Что касается двух предупреждений, я хочу сказать, что JS может делать только что-то на стороне клиента, и в этом случае проблемы с фальсификацией данных не являются проблемой. Если он делает что-то серверное, тогда вы должны сделать соответствующие проверки на сервере, вот и все. – nico

3
<?php 

$strFind="SELECT * FROM cometchat_chatrooms_users WHERE userid=$curmemid"; 
$result=mysql_query($strFind) or die(mysql_error()); 
$row=mysql_fetch_array($result); 
$room=$row['chatroomid']; 

?> 
<script type="text/javascript"> 
var timestamp = 0; 
var currentroom = <?php if(isset($room))echo $room; else echo ""; ?>; 
var heartbeatTimer; 
var minHeartbeat = 3000; 
var maxHeartbeat = 12000; 
</script> 
0

пытаются использовать сеанс, чтобы сохранить переменную номера и использовать его с JavaScript на эхо инструкции

+0

Кусок кода будет приветствоваться. – Florent

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