Как передать значение из js в php
Перейти к содержимому

Как передать значение из js в php

  • автор:

Как передать переменную js в php?

Файл php. С помощью функции вывожу визуал, в том числе ссылки, по клику на которые, выполняется функция say(this,1). Она передает значение тега value в переменную js text_value, и запускает alert этой переменной.
Однако, мне нужно эту переменную js передать в переменную php. (text_value -это значение нужно для создания ссылки на файл, откуда я подгружаю json данные и скармливаю их в armcharts — создание графиков ).
В конце кода есть такая строчка

$p1= "";

если вместо text_value подставить число или слово, то $p1 выводится. Соответственно, мне остается только, передать значение локальной переменной из функции say() наружу. Но я пытался по разному — не получилось. Не хватает опыта и знаний. Есть у кого то какие то идеи? Или может даже совершенно другой подход к решению этой задачи?

UPD. Пытался еще через параметры GET и POST, но не получилось. Через форму не хочу — мне нужно чтобы весь код выполнялся в одном файле.

addFile('/components/excel_loader/admin/tmp/ui.css'); $stat_data = $db->query('SELECT id, title, views, statistic, total_views FROM com_page where statistic =1'); $stat_data = $stat_data->fetchAll(); function a_com() < global $stat_data, $ourData; echo ' 

Статистика просмотра страниц

'; $change=""; foreach($stat_data as &$iter) < $title = str_replace($change,'',$iter['title']); echo '
' . $title . '. : '.$iter['total_views'].' просмотр'; echo $ourData = file_get_contents('stat/'.$iter['id'].'.json'); > > ?> "; echo $p1; ?>
  • Вопрос задан более двух лет назад
  • 449 просмотров

1 комментарий

Средний 1 комментарий

PHP и HTML

PHP и HTML тесно взаимодействуют: PHP может генерировать HTML, а HTML может передавать информацию PHP. Перед чтением вопросов в этом разделе важно чтобы вы понимали как получать переменные извне PHP. Страницы руководства по этой теме содержат много примеров.

  1. Какое кодирование/декодирование я должен выполнять при передаче значения через форму/URL?
  2. Я пытаюсь использовать , но переменные $foo.x и $foo.y недоступны. $_GET[‘foo.x’] тоже не существует. Где они?
  3. Как создать массивы в HTML ?
  4. Как получить все результаты из HTML-тега select с атрибутом multiple?
  5. Как я могу передать переменную из JavaScript в PHP?

Какое кодирование/декодирование я должен выполнять при передаче значения через форму/URL?

  • Интерпретация HTML. Для того, чтобы задать произвольную строку, вы должны заключить её в двойные кавычки и использовать htmlspecialchars() для кодирования.
  • URL: URL состоит из нескольких частей. Если вы хотите чтобы ваши данные были восприняты как один элемент, вы должны закодировать их с помощью urlencode() .

Пример #1 Скрытый элемент HTML-формы

echo ‘. htmlspecialchars ( $data ) . ‘» />’ . «\n» ;
?>

Замечание: Использовать urlencode() для $data неправильно, так как кодировать данные в urlencode() это обязанность браузера. Все популярные браузеры делают это правильно. Отметьте, что это происходит вне зависимости от метода (например, GET или POST). Вы заметите это только в случае GET-запроса, так как POST-запросы обычно скрыты.

Пример #2 Данные, редактируемые пользователем

echo «» ;
?>

Замечание: Данные показываются браузером как предполагается, потому что браузер будет интерпретировать экранированные HTML-символы. При отправке через GET или POST данные будут закодированы (urlencoded) браузером для передачи и декодированы (urldecoded) PHP. Поэтому вам не надо выполнять какое-либо кодирование/декодирование url самостоятельно, всё обрабатываются автоматически.

Пример #3 В URL

Замечание: На самом деле вы подделываете HTML GET-запросом, поэтому необходимо вручную закодировать ( urlencode() ) данные.

Замечание: Вам надо применить htmlspecialchars() ко всему URL, потому что URL появляется как значение HTML-атрибута. В этом случае, браузер сначала раскодирует всё значение (обратная операция htmlspecialchars() ) и затем передаст URL. PHP поймёт URL правильно, так как вы закодировали данные с urlencode() . Вы заметите, что & в URL заменяется на & . Хотя большинство браузеров это исправляют, если вы забудете об этом, но всё же это не всегда возможно. Поэтому, даже если ваш URL не динамический, вам надо закодировать его с помощью htmlspecialchars() .

Я пытаюсь использовать , но переменные $foo.x и $foo.y недоступны. $_GET[‘foo.x’] тоже не существует. Где они?

При отправке формы, вместо стандартной кнопки отправки возможно использовать изображение с тэгом как:

Когда пользователь кликает где-либо на картинке, серверу будет послана сопутствующая форма с двумя дополнительными переменными: foo.x и foo.y .

Так как имена foo.x и foo.y не разрешены в PHP, они автоматически преобразуются в foo_x и foo_y . То есть, точки заменяются на подчёркивания. Таким образом, вы обращаетесь к этим переменным так же, как и к любым другим, описанным в разделе о получении переменных извне PHP. Например, $_GET[‘foo_x’] .

Замечание:

Пробелы в именах переменных запроса преобразуются в подчёркивания.

Как создать массивы в HTML ?

Для того, чтобы результаты были переданы вашему PHP скрипту как массив, именуйте элементы , или следующим образом:

Заметьте квадратные скобки после имени переменной, это делает её массивом. Вы можете сгруппировать элементы в массив, присваивая одно и то же имя разным элементам:

Это создаст два массива, MyArray и MyOtherArray, которые будут переданы PHP-скрипту. Также возможно задать определённые ключи для ваших массивов:

Массив AnotherArray теперь будет содержать ключи 0, 1, email и phone.

Замечание:

Определять ключи массивов в HTML необязательно. Если вы не установите ключи, массив заполняется в порядке появления элементов в форме. Наш первый пример будет содержать ключи 0, 1, 2 и 3.

Как получить все результаты из HTML-тега select с атрибутом multiple?

HTML-тег select с указанным multiple позволяет пользователю выбрать несколько элементов из списка. Эти элементы затем передаются обработчику формы. Проблема в том, что они все переданы с одним и тем же именем. Например:

Каждая выбранная опция поступит обработчику формы как:

var=option1 var=option2 var=option3

Каждая опция будет перезаписывать содержимое предыдущей переменной $var . Решение — воспользоваться возможностью PHP — «массив из элемента формы». Следует использовать следующее:

Это укажет PHP обрабатывать $var как массив и каждое присваивание значения в var[] добавит элемент в массив. Первым элементом будет $var[0] , следующим — $var[1] и т.д. Функция count() может быть использована для определения, сколько элементов было выбрано, а функция sort() — для сортировки массива опций, если это необходимо.

Заметьте, что если вы используете JavaScript, то [] в имени элемента могут вызвать проблемы, если вы пытаетесь обращаться к элементу по имени. Вместо этого используйте числовой идентификатор элемента формы или заключите имя переменной в одинарные кавычки и используйте его как индекс массива элементов, например:

variable = document.forms[0].elements['var[]'];

Как я могу передать переменную из JavaScript в PHP?

Так как JavaScript является (обычно) клиентской технологией, а PHP, как правило, серверной, и поскольку HTML — протокол «без состояния», эти два языка не могут обмениваться переменными напрямую.

Однако, возможно передавать переменные между ними. Один из способов достичь этого — сгенерировать JavaScript-код из PHP и принудительно обновлять браузер, посылая определённые переменные обратно PHP-скрипту. Нижеприведённый пример показывает как это сделать — он позволяет PHP-коду получить высоту и ширину экрана, что, обычно, возможно только на стороне клиента.

Пример #4 Генерирование JavaScript из PHP

if (isset( $_GET [ ‘width’ ]) AND isset( $_GET [ ‘height’ ])) // выводим переменные с размерами
echo «Ширина экрана: » . $_GET [ ‘width’ ] . «
\n» ;
echo «Высота экрана: » . $_GET [ ‘height’ ] . «
\n» ;
> else // передаём переменные с размерами
// (сохраняем оригинальную строку запроса
// — post переменные нужно будет передавать другим способом)

User Contributed Notes

There are no user contributed notes for this page.

  • ЧАВО
    • Общая информация
    • Списки рассылки
    • Получение PHP
    • Вопросы по базам данных
    • Установка
    • Проблемы сборки
    • Использование PHP
    • Хеширование паролей
    • PHP и HTML
    • PHP и COM
    • Разные вопросы

    Как передать значение из js в php

    Когда происходит отправка данных формы PHP-скрипту, информация из этой формы автоматически становится доступной ему. Существует несколько способов получения этой информации, например:

    Пример #1 Простая HTML-форма

     
    Имя:
    Email:

    Есть только два способа получить доступ к данным из форм HTML. Доступные сейчас способы приведены ниже:

    Пример #2 Доступ к данным из простой HTML-формы, отправленной через POST

    echo $_POST [ ‘username’ ];
    echo $_REQUEST [ ‘username’ ];
    ?>

    GET-форма используется аналогично, за исключением того, что вместо POST, вам нужно будет использовать соответствующую предопределённую переменную GET. GET относится также к QUERY_STRING (информация в URL после ‘?’). Так, например, http://www.example.com/test.php?id=3 содержит GET-данные, доступные как $_GET[‘id’] . Смотрите также $_REQUEST .

    Замечание:

    Точки и пробелы в именах переменных преобразуется в знаки подчёркивания. Например, станет $_REQUEST[«a_b»] .

    PHP также понимает массивы в контексте переменных формы (смотрите соответствующие ЧАВО). К примеру, вы можете сгруппировать связанные переменные вместе или использовать эту возможность для получения значений списка множественного выбора select. Например, давайте отправим форму самой себе, а после отправки отобразим данные:

    Пример #3 Более сложные переменные формы

    if ( $_POST ) echo ‘

    ' ; 
    echo htmlspecialchars ( print_r ( $_POST , true ));
    echo '

    ‘ ;
    >
    ?>

    Имя:

    Email:

    Пиво:

    Замечание: Если внешнее имя переменной начинается с корректного синтаксиса массива, завершающие символы молча игнорируются. Например, станет $_REQUEST[‘foo’][‘bar’] .

    Имена переменных кнопки-изображения

    При отправке формы вместо стандартной кнопки можно использовать изображение с помощью тега такого вида:

    Когда пользователь щёлкнет где-нибудь на изображении, соответствующая форма будет передана на сервер с двумя дополнительными переменными — sub_x и sub_y . Они содержат координаты нажатия пользователя на изображение. Опытные программисты могут заметить, что на самом деле имена переменных, отправленных браузером, содержат точку, а не подчёркивание, но PHP автоматически преобразует точку в подчёркивание.

    HTTP Cookies

    PHP прозрачно поддерживает HTTP cookies как определено в » RFC 6265. Cookies — это механизм для хранения данных в удалённом браузере и, таким образом, отслеживания и идентификации вернувшихся пользователей. Вы можете установить cookies, используя функцию setcookie() . Cookies являются частью HTTP-заголовка, поэтому функция SetCookie должна вызываться до того, как браузеру будет отправлен какой бы то ни было вывод. Это то же ограничение, что и для функции header() . Данные, хранящиеся в cookie, доступны в соответствующих массивах данных cookie, таких как $_COOKIE и $_REQUEST . Подробности и примеры смотрите в справочной странице setcookie() .

    Замечание: Начиная с PHP 7.2.34, 7.3.23 и 7.4.11, соответственно, имена входящих cookie больше не декодируются из URL-закодированной строки из соображений безопасности.

    Если вы хотите присвоить множество значений одной переменной cookie, вы можете присвоить их как массив. Например:

    setcookie ( «MyCookie[foo]» , ‘Testing 1’ , time ()+ 3600 );
    setcookie ( «MyCookie[bar]» , ‘Testing 2’ , time ()+ 3600 );
    ?>

    Это создаст две разные cookie, хотя в вашем скрипте MyCookie будет теперь одним массивом. Если вы хотите установить именно одну cookie со множеством значений, сначала рассмотрите возможность использования к значениям такие функции, как serialize() или explode() .

    Обратите внимание, что cookie заменит предыдущую cookie с тем же именем в вашем браузере, если только путь или домен не отличаются. Так, для приложения корзины покупок вы, возможно, захотите сохранить счётчик. То есть:

    Пример #4 Пример использования setcookie()

    if (isset( $_COOKIE [ ‘count’ ])) $count = $_COOKIE [ ‘count’ ] + 1 ;
    > else $count = 1 ;
    >
    setcookie ( ‘count’ , $count , time ()+ 3600 );
    setcookie ( «Cart[ $count ]» , $item , time ()+ 3600 );
    ?>

    Точки в именах приходящих переменных

    Как правило, PHP не меняет передаваемых скрипту имён переменных. Однако следует отметить, что точка не является корректным символом в имени переменной PHP. Поэтому рассмотрим такую запись:

    $varname . ext ; /* неверное имя переменной */
    ?>

    В данном случае интерпретатор видит переменную $varname , после которой идёт оператор конкатенации, а затем голая строка (то есть, не заключённая в кавычки строка, не соответствующая ни одному из ключевых или зарезервированных слов) ‘ext’. Очевидно, что это не даст ожидаемого результата.

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

    Определение типов переменных

    Поскольку PHP определяет типы переменных и преобразует их (как правило) по мере необходимости, не всегда очевидно, какой тип имеет данная переменная в любой момент времени. PHP содержит несколько функций, позволяющих определить тип переменной, таких как: gettype() , is_array() , is_float() , is_int() , is_object() и is_string() . Смотрите также раздел Типы.

    HTTP является текстовым протоколом, и большинство, если не всё, содержимое, которое приходит в суперглобальные массивы, например, $_POST и $_GET , останется в виде строк. PHP не будет преобразовывать значения в определённый тип. В приведённом ниже примере $_GET[«var1»] будет содержать строку «null», а $_GET[«var2»] — строку «123».

    /index.php?var1=null&var2=123

    Список изменений

    Версия Описание
    7.2.34, 7.3.23, 7.4.11 имена входящих cookie больше не декодируются из URL-закодированной строки из соображений безопасности.

    User Contributed Notes 30 notes

    15 years ago

    The full list of field-name characters that PHP converts to _ (underscore) is the following (not just dot):
    chr(32) ( ) (space)
    chr(46) (.) (dot)
    chr(91) ([) (open square bracket)
    chr(128) — chr(159) (various)

    PHP irreversibly modifies field names containing these characters in an attempt to maintain compatibility with the deprecated register_globals feature.

    22 years ago

    Important: Pay attention to the following security concerns when handling user submitted data :

    18 years ago

    This post is with regards to handling forms that have more than one submit button.

    Suppose we have an HTML form with a submit button specified like this:

    Normally the ‘value’ attribute of the HTML ‘input’ tag (in this case «Delete») that creates the submit button can be accessed in PHP after post like this:

    $_POST [ ‘action_button’ ];
    ?>

    We of course use the ‘name’ of the button as an index into the $_POST array.

    This works fine, except when we want to pass more information with the click of this particular button.

    Imagine a scenario where you’re dealing with user management in some administrative interface. You are presented with a list of user names queried from a database and wish to add a «Delete» and «Modify» button next to each of the names in the list. Naturally the ‘value’ of our buttons in the HTML form that we want to display will be «Delete» and «Modify» since that’s what we want to appear on the buttons’ faceplates.

    Both buttons (Modify and Delete) will be named «action_button» since that’s what we want to index the $_POST array with. In other words, the ‘name’ of the buttons along cannot carry any uniquely identifying information if we want to process them systematically after submit. Since these buttons will exist for every user in the list, we need some further way to distinguish them, so that we know for which user one of the buttons has been pressed.

    Using arrays is the way to go. Assuming that we know the unique numerical identifier of each user, such as their primary key from the database, and we DON’T wish to protect that number from the public, we can make the ‘action_button’ into an array and use the user’s unique numerical identifier as a key in this array.

    Our HTML code to display the buttons will become:

    The 0000000002 is of course the unique numerical identifier for this particular user.

    Then when we handle this form in PHP we need to do the following to extract both the ‘value’ of the button («Delete» or «Modify») and the unique numerical identifier of the user we wish to affect (0000000002 in this case). The following will print either «Modify» or «Delete», as well as the unique number of the user:

    $submitted_array = array_keys ( $_POST [ ‘action_button’ ]);
    echo ( $_POST [ ‘action_button’ ][ $submitted_array [ 0 ]] . » » . $submitted_array [ 0 ]);
    ?>

    $submitted_array[0] carries the 0000000002.
    When we index that into the $_POST[‘action_button’], like we did above, we will extract the string that was used as ‘value’ in the HTML code ‘input’ tag that created this button.

    If we wish to protect the unique numerical identifier, we must use some other uniquely identifying attribute of each user. Possibly that attribute should be encrypted when output into the form for greater security.

    Передать данные из javascript PHP Ajax

    Передача данных от fronted на backend(от javascript в php в нашем случае) сейчас достаточно часто используемая процедура, естественно, когда известно, как это сделать.

    Что потребуется для работы:

    • Сервер, где можно запустить php-скрипты;
    • Текстовый редактор;
    • Базовые знания PHP;
    • Базовые знания Javascript;
    • Понимание как работают GET и POST — запросы, в данной статье в основном будут использоваться POST — запросы.

    Совсем простой пример

    Несколькими годами раньше, нужно было писать большие и сложные запросы, но с приходом Jquery, все стало гораздо проще, поэтому первым шагом подключаем библиотеку jquery:

    В первом примере, будем просто отправлять строку, при помощи функции $.post Jquery, где первым параметром передается название нашего php-скрипта, вторым — данные, если они есть, третьим функция обратного вызова(callback), в аргумент data, которой к нам придет ответ от сервера, если он будет. Пример кода js:

      

    В результате у Вас должен получиться файл index.php, примерно такого содержания:

          Test Ajax php      

    В php эти данные придут в $_POST[‘dataReq’]. Поэтому в самом простом примере, мы возьмем эту строку и отправим ее обратно, без всякой проверки. Пример кода script.php:

    Открываем консоль в браузере и проверяем результат. В данном примере произошла передача данных от javascript к php и обратно, но без проверок, это было сделано специально, чтобы не усложнять и настроить коннект. В некоторых случая, когда нужно просто подгрузить данные, в фоновом режиме, этого может оказаться достаточно. Ссылка, на скачивание архива с примером, описанного выше.

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

    Чуть сложнее

    В реальности, загрузка данных происходит при наступлении какого-то события, например нажатие на кнопку, или ввод символов с троку поиска. Усложним пример, добавив обработчик на кнопку и подгрузку в div данных с сервера.

    Модифицируем файл index.php, добавим кнопку,

    , куда будем выводить результат и немного перепишем js, отредактируйте Ваш index.php, чтобы он стал такого содержания:

          Test Ajax php       

    Также немного изменим файл script.php, его новый код:

    Теперь мы по клику передаем число 5, на сервере к пришедшему числу прибавляется 25 и выводится под кнопкой число 30. То есть, происходит отправка данных, модификация и отображение. По ссылке ниже, можно скачать новый пример:

    Передача и прием объектов

    Наиболее распространенным данными, при передачи Ajax являются объекты, например в формате JSON. В следующем примере разберем вариант, где будем передавать данные из поля input, на сервере будем обрабатывать приходящие данные и отправлять назад массив php преобразованный в JSON объект и наполнять из него тег select, в зависимости от отправленного числа. Для этого модифицируем файл index.php, его новый код будет таким:

          Test Ajax php    

    В js добавилась проверка приходящего результата, если он не равен 0, то в цикле наполняем тег select. Если же нам придет в ответе 0, это означает, что такого списка нет, так как нет такого ключа в массиве на сервере, (см. ниже описание под обновленным кодом script.php). В коде js добавил комментарии, за что отвечает та или иная строка.

    Также модифицируем файл script.php, его новый код будет таким:

     array( 1 => 'Автомобиль', 2 => 'Лодка', 3 => 'Дом', 4 => 'Коробка', 5 => 'Самокат', 6 => 'Мотоцикл', 7 => 'Автобус', 8 => 'Баржа', ), 2 => array( 1 => 'Роза', 2 => 'Фиалка', 3 => 'Тюльпан', 4 => 'Ромашка', 5 => 'Ирис', ), 3 => array( 1 => 'Ресторан', 2 => 'Магазин', 3 => 'Кафе', 4 => 'Бистро', 5 => 'Пекарня', 6 => 'Палатка с пирожками', ), 4 => array( 1 => 'Красный', 2 => 'Синий', 3 => 'Белый', 4 => 'Оранжевый', 5 => 'Зеленый', 6 => 'Фиолетовый', 7 => 'Черный', 8 => 'Желтый', 9 => 'Серый', 10 => 'Розовый', 11 => 'Голубой', ), 5 => array( 1 => 'Австралия', 2 => 'Индия', 3 => 'Китай', 4 => 'Япония', 5 => 'Испания', ), ); $param = $_POST['dataReq']; if(array_key_exists($param,$arrToSend))< echo json_encode($arrToSend[$param],JSON_UNESCAPED_UNICODE); >else < echo 0; >?>

    В нем добавился массив, с элементами, и обработка данных из запроса, в переменную $param сохраняем то, что пришло у нас от javascript, затем при помощи конструкции if else и встроенной функции array_key_exists проверяем есть ли такой ключ в массиве $arrToSend, если есть, то трансформируем вложенный массив, по этому ключу при помощи функции json_encode в формат JSON и отправляем, если же ключа в основном массиве нет, то просто отправляем 0, это нужно для проверки на стороне js.

    Результат этого примера должен быть такой, как на gif-ке ниже:

    Ссылка на оф. сайт Jquery, документация по функции $.post, которая используется в статье. https://api.jquery.com/jquery.post/

    Статья в ближайшее время будет дописана, с большим количеством примеров.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *