Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > JavaScript, Ajax
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.10.2018, 02:09   #1
dbalor
Форумчанин
 
Аватар для dbalor
 
Регистрация: 06.09.2016
Сообщений: 198
Вопрос Переменная js в php

Здравствуйте,

есть файл php (в нем html, js и php в одном файле).

Как передать переменную js в этом файле в переменную php в этом же файле.

P.S. разделить код на отдельные файлы html, js и php нет никакой возможности.

Ребят нужно срочно, работа
dbalor вне форума Ответить с цитированием
Старый 05.10.2018, 06:54   #2
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

Тут вопрос - зачем это нужно ?
Если я правильно понимаю, то PHP выполняется на сервере, а JS - на клиенте.
Так что мне не понятен смысл затеи.

Грубо говоря, при выполнении JS не получится изменить то, что вы хотите изменить в PHP.
Если другими словам - пока выполняется скрипт PHP, всё что находится в вашем JS-скрипте - это всего лишь текст, и там нет переменных, и не будет до тех пор, пока этот текст (JS-скрипт) не попадёт в браузер и не начнёт выполнение.

UPD: подумал может полезно будет: я в PHP использую sprintf для форматирования некоторых элементов страницы перед отправкой на клиента. Но ещё раз - это работа с текстом.
Подпись ? Не, не слышал ...

Последний раз редактировалось OmegaBerkut; 05.10.2018 в 07:04.
OmegaBerkut вне форума Ответить с цитированием
Старый 05.10.2018, 07:06   #3
dbalor
Форумчанин
 
Аватар для dbalor
 
Регистрация: 06.09.2016
Сообщений: 198
По умолчанию

Этот файл php итак находится на серваке,

выбираем из тега select имя, -> отправляем в php в этом же файле -> а скрипт php обращается c этим именем к mysql.
dbalor вне форума Ответить с цитированием
Старый 05.10.2018, 07:28   #4
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

dbalor, так речь о том что бы из JS выполнить запрос на сервер в PHP-скрипт ?
Если у вас один большой файл - то придётся сильно помучаться, что бы при запросе к PHP-скрипту из JS этот PHP-скрипт вернул только то, что нужно получить в JS ...
Можно вначале PHP-скрипта сделать условия, по которым будет обработка и возврат нужных данных, а из JS эти условия нужно соблюсти.
Проще сделать отдельный PHP-скрипт для запроса к нему из JS.

Как выполнить запрос из JS - не знаю. RTFM.
Подпись ? Не, не слышал ...

Последний раз редактировалось OmegaBerkut; 05.10.2018 в 07:33.
OmegaBerkut вне форума Ответить с цитированием
Старый 05.10.2018, 07:42   #5
dbalor
Форумчанин
 
Аватар для dbalor
 
Регистрация: 06.09.2016
Сообщений: 198
Печаль

Проблема в том что все это находится в одном файле php на серваке( код javascript из и php находятся в одном файле php):

php файл :
Код:
<?php
//код
?>
<script>
  отюда деламем запрос
</script>
<?php
  сдесь получаем и выполняем
?>
dbalor вне форума Ответить с цитированием
Старый 05.10.2018, 07:47   #6
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

dbalor, это всё понятно ... Я не могу понять, понимаете ли вы последовательность выполняемых действий ...
0) Браузер делает запрос на сервер;
1) сервер отправляет страницу в браузер;
2) браузер получает страницу, пускает JS-скрипт на выполнение;
3) из JS-скрипта выполняется запрос в PHP-скрипт;
4) PHP-скрипт получает запрос, определяет что вызов произошёл не просто из браузера, а из самого скрипта, собственно обрабатывается запрос, возвращается результат, и при этом саму страницу возвращать не нужно;
5) JS-скрипт получает результат, и делает с ним что нужно.

А ну да ещё, нужно так же позаботиться о том, что бы при пункте 1 не выполнился пункт 4 и не пытался обработать запрос JS-скрипта, так как запроса по пункту 3 на этапе выполнения пункта 1 ещё не существует.
Подпись ? Не, не слышал ...

Последний раз редактировалось OmegaBerkut; 05.10.2018 в 08:08.
OmegaBerkut вне форума Ответить с цитированием
Старый 05.10.2018, 10:55   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от dbalor Посмотреть сообщение
Проблема в том что все это находится в одном файле php на серваке( код javascript из и php находятся в одном файле php)
проблема в том, что, как Вам справедливо написали, Вы не понимаете, что, когда и где выполняется.


Цитата:
Сообщение от dbalor Посмотреть сообщение
Как передать переменную js в этом файле в переменную php в этом же файле.
дело в том, что когда начинает работать JS, к этому моменту PHP уже полностью завершил работу.
Но, если нужно что-то обработать на PHP после того, как загрузилась страница, можно из JS через стандартный HTTP протокол обратиться к серверу и передать туда необходимую информацию. Это можно делать даже без перезагрузки страницы, используя AJAX.


А по основам почитайте, пожалуйста, Самые основы. Как работает PHP.

если после этого вопросы останутся - Welcome!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 10.10.2018, 01:52   #8
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

Вот я в своём проекте наткнулся на необходимость выполнять запросы из JavaScript - суть в том, что бы за счёт JS упростить реализацию функций добавления, изменения и удаления данных в БД. Но передаю я не коды запросов к БД, а сами данные, которые в свою очередь на сервере уже формируются в запросы, и выполняются. Это исключает возможность внедрения постороннего SQL-кода (SQL-инъекции).
Честно стыренный откуда-то код, который я подогнал под себя:
Код:
function performRequest(linkReady)
{ // в linkReady могут быть любые необходимые данные
	var xmlHttp=new XMLHttpRequest();
	xmlHttp.open("GET",linkReady,false);
	xmlHttp.send(null);
	return (xmlHttp.responseText=="0"); // в моём случае это код состояния выполнения запроса
}
Два нюанса:
1) я вывел отдельные PHP скрипты для обработки подобных запросов; сделать тоже самое, но через один единственный PHP-скрипт - это абсурд из разряда выстрелить себе в ногу, и не один раз; (хотя такое вполне возможно)
2) такой подход подразумевает возможность нарушения ограничений, которые (ограничения) предусмотрены для разграничения доступа к данным аля права и уровни доступа, которые (права и уровни доступа) имеются в моём проекте - собственно эту возможность нарушения я предусмотрел в отдельных выведенных PHP-скриптах, что ещё сильнее усложняет выполнение всего этого одним PHP-скриптом.

P. S. Я всё это написал к тому, что нужно отделять мух от котлет, иначе получится лажа.
Подпись ? Не, не слышал ...

Последний раз редактировалось OmegaBerkut; 10.10.2018 в 03:26.
OmegaBerkut вне форума Ответить с цитированием
Старый 10.10.2018, 03:13   #9
Ottava
Форумчанин
 
Регистрация: 05.09.2017
Сообщений: 157
По умолчанию

Цитата:
Сообщение от dbalor Посмотреть сообщение
Проблема в том что все это находится в одном файле php на серваке( код javascript из и php находятся в одном файле php):
Да, они у вас в одном файле, НО PHP исполняется на сервере и посылает страницу в браузер.
А браузер уже исполняет яваскрипты и обрабатывает действия пользователя мышкой (как вы пишете "выбираем из тега select имя").

Если надо из браузера сделать яваскриптом запрос к PHP, надо использовать Ajax-запросы, как написал выше OmegaBerkut. Только new XMLHttpRequest() не кроссбраузерно, я бы задействовал jquery и не парился.


То, что у вас PHP и JS в одном файле - не смертельно, просто неудобно. Делаете на ajax POST или GET запрос к вашему PHP-скрипту и получаете от него нужные данные.

Вот пример куска PHP кода, который при POST-запросе к index.php и отправке tic=30&id=3 будет перезаписывать значение в БД:
Код:
if (isset($_POST['tic'])) {			// Это прислан Аякс-запрос на перезапись значения ТИЦ
  $tic = (int)$_POST['tic'];
  $id =  (int)$_POST['id'];
  mysql_query("UPDATE `".DomainTBL."` SET `tic`='{$tic}' WHERE id='{$id}'");
  echo "$id:<b>$tic</b>";  // Послать ответ яваскрипту в браузер
  exit;  // Завершить работу скрипта
  }

// Дальше идет ваш остальной PHP-код, он исполнится, если не будет POST-запроса с параметрами tic=30&id=3
 . . .
Вот пример яваскрипта, который при клике на кнопку "отправить" не отправляет форму, а делает аякс-отправку данных. Страница не перезагружается, а на месте hrml-формы выводится ответ PHP-скрипта:
Код:
<script type='text/javascript'>
  $('.tic').on('submit', function(e) {
	e.preventDefault();						// Отменяем отправку формы
	//var data = $(e.delegateTarget).attr('data');		// Содержимое атрибута data кликнутой td
	var form = $(this);						// Форма, на которой возникло событие
	$.ajax({
	  url:		form.attr('action'),
	  type:		form.attr('method'),
	  data:		form.serialize(),
	  success:	function(result) {					// В ответ присылается 'ID:ТИЦ'
		if (result.match(/\d+:<b>\d+<\/b>/) == null)  alert('сбой: ' + result);
		else form.parent().html(result);	// Выводим ответ PHP-скрипта на месте html-формы
		},
	  dataType:	'html',
	  statusCode: {
		404:	function() { alert(form.attr('action') + ' - страница не найдена'); }
		},
	  fail:		function(XHR, err, errorThrown) { alert(err); }
	  });
	});
</script>
Можете разместить их в одном файле, у меня именно так и сделано.

PS: Прошу не кидать тапками, это просто пример. Конечно, разрешать кому попало писать в БД аяксом небезопасно. Это можно только если ты авторизован. Кстати, Аякс должен автоматически посылать куки, включая авторизационные.
Безопасность с Content Security Policy

Последний раз редактировалось Ottava; 10.10.2018 в 03:33.
Ottava вне форума Ответить с цитированием
Старый 10.10.2018, 03:33   #10
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

Цитата:
Сообщение от Ottava Посмотреть сообщение
Конечно, разрешать кому попало писать в БД аяксом небезопасно. Это можно только если ты авторизован.
У меня по этому поводу приколы не только на счёт авторизован или нет - возможна ситуация, при которой запрос будет выполняться с заменой идентификатора сессии. Так как сервер не в курсе что вообще происходит у клиента в данный момент - приходится при каждом подключении проверять с какого IP пришёл запрос, совпадает ли он с IP из последней сессии, и если совпадает - то сколько прошло времени с момента последнего запроса (я поставил лимит 30 минут).

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

И да, разве jQuery полностью кроссбраузерный ?
Если у меня одна вёрстка HTML+CSS в разных браузерах по разному рендерится, то что уж говорить об интерпретации исполняемого кода ...
Подпись ? Не, не слышал ...

Последний раз редактировалось OmegaBerkut; 10.10.2018 в 07:26.
OmegaBerkut вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Переменная PHP Dina_93 PHP 11 17.04.2015 01:52
php Переменная опустошается sir.andrey Помощь студентам 1 19.11.2012 16:06
переменная vefer Microsoft Office Word 5 14.11.2011 20:11
Переменная в C# bead C# (си шарп) 8 01.05.2011 12:32