Как вставить php в js?
форму обрабатывает google captcha, всё работает корректно, определяет бот или человек.
Код снизу обрабатывает форму(нижняя часть файла index.php) и связывается с google api:
так же есть файл send.php(если нужен)
$secretkey = '6LfjGsMZAAAAAAt9_XdcVXP-sfL8y1'; $url = 'https://www.google.com/recaptcha/api/siteverify?secret='.$secretkey.'&response='.$_POST['token']; $response = file_get_contents($url); $responsekeys = json_decode($response, true); header('Content-type: application/json'); if($responsekeys["success"] && $responsekeys["score"] >= 0.5) < echo json_encode(array('success' =>'true', 'om_score' => $responsekeys["score"], 'token' => $_POST['token'])); >else < echo json_encode(array('success' =>'false', 'om_score' => $responsekeys["score"], 'token' => $_POST['token'])); > ?>
в index.php, если внимательно посмотрите, есть строки:
else < header('Location: fail-page.html'); >?>
после того, как скрипт определяет, что пишет человек, он должен выполнить эти строки на php, однако страничку с успехом или фейлом он не выводит, в браузере никаких ошибок абсолютно нет, я так думаю, что код не видится браузером, как это исправить?
- Вопрос задан более трёх лет назад
- 697 просмотров
1 комментарий
Простой 1 комментарий
Решения вопроса 2
Stalker_RED @Stalker_RED
Никак не вставить, это совсем по другому работает.
Ваш js выполняется в браузере у пользователя, когда он заходит на страницу. А php код выполняется у вас на сервере, еще ДО отправки страницы.
Если вы хотите чтобы действия пользователя как-то повлияли на сервер, то нужно отправить запрос на сервер, при помощи xhr или fectch, например.
Ответ написан более трёх лет назад
Комментировать
Нравится 3 Комментировать

Программист, философ
Браузер не может видеть PHP-код. В общем случае механизм работает так: браузер отправляет запрос серверу, сервер передает PHP на обработку интерпретатору языка (могут быть и иные ситуации, языки, платформы и способы общения сервера с обработчиком), интерпретатор в свою очередь возвращает в поток вывода сервера результат в том или ином формате (HTML, text, JSON, двоичные файлы, не важно), результат отправляется в двух «порциях»: заголовки и тело. JavaScript выполняется непосредственно в браузере, и может обращаться к серверу, например, вызывая PHP-сценарии. Браузер ничего не знает о PHP коде, JavaScript ничего не знает о PHP коде, и наоборот, сервер ничего не знает о работе страницы в браузере. Обмен идет запросами браузера к серверу.
Таким образом, Вам нужно убрать PHP код из JavaScript тела, вывести этот код в отдельный сценарий, и обратиться к нему с помощью Ajax. У вас уже есть обращение к серверу с fetch(‘send.php’) вот тут Вы передаете на сервер данные формы. Код, который Вы хотите выполнить в index.php, Вам нужно выполнять в send.php , этот код должен вернуть JSON, который получится в этот блок: .then(result =>
Как вернуть JSON из send.php — отдельная задача, у вас же PHP код возвращает переадресацию, и будет ли она принята и выполнена Вашим движком запросов к серверу — библиотекой fetch. Возможно, Вам нужно вручную выполнить переадресацию, получив заголовок в response.headers.get(‘Location’) или найдя другое решение;
Как правильно прописать код PHP в javascript-файл
Подскажите, пожалуйста, как правильно прописать код PHP в файл javascript. Вот честь кода javascript:
var tickerContainer = $(document.createElement('div')).addClass('ticker-wrapper') .append($(document.createElement('div')).addClass('quantityTicker') .append('') .append(' ') .append(' ') );
Нужно в value=»1″ вместо «1» добавить этот код PHP:
<$quantityBackup|intval>minimal_quantity > 1>minimal_quantity>1
Подскажите как правильно это сделать. Спасибо! вот весь файл скрипта (модуля prestahop):
$(document).ready(function() < var collection = $(tickerSelector); if (collection.length >0 && typeof(window.ajaxCart) == 'object') < ajaxCart.overrideButtonsInThePage = function()< $(document).off('click', '.ajax_add_to_cart_button').on('click', '.ajax_add_to_cart_button', function(e)< e.preventDefault(); var idProduct = parseInt($(this).data('id-product')); var minimalQuantity = parseInt($(this).data('minimal_quantity')); if (!minimalQuantity) minimalQuantity = 1; if ($(this).prop('disabled') != 'disabled') ajaxCart.add(idProduct, null, false, this, minimalQuantity); >); //for product page 'add' button. $(document).off('click', '#add_to_cart button').on('click', '#add_to_cart button', function(e)< e.preventDefault(); ajaxCart.add($('#product_page_product_id').val(), $('#idCombination').val(), true, null, $('#quantity_wanted').attr('value'), null); >); $('#cart_block_list .ajax_cart_block_remove_link').unbind('click').click(function() < var customizationId = 0; var productId = 0; var productAttributeId = 0; if ($($(this).parent().parent()).attr('name') == 'customization') < var customizableProductDiv = $($(this).parent().parent()).find("div[id^=deleteCustomizableProduct_]"); >else < var customizableProductDiv = $($(this).parent()).find("div[id^=deleteCustomizableProduct_]"); >if (customizableProductDiv && $(customizableProductDiv).length) < $(customizableProductDiv).each(function()< var ids = $(this).attr('id').split('_'); if (typeof(ids[1]) != 'undefined') < customizationId = parseInt(ids[1]); productId = parseInt(ids[2]); if (typeof(ids[3]) != 'undefined') < productAttributeId = parseInt(ids[3]); >return false; > >); > if ( ! customizationId) < var firstCut = $(this).parent().parent().attr('id').replace('cart_block_product_', ''); firstCut = firstCut.replace('deleteCustomizableProduct_', ''); ids = firstCut.split('_'); productId = parseInt(ids[0]); if (typeof(ids[1]) != 'undefined') < productAttributeId = parseInt(ids[1]); >> ajaxCart.remove(productId, productAttributeId, customizationId); return false; >); >; $(document).off('click', '.ajax_add_to_cart_button').on('click', '.ajax_add_to_cart_button', function(e)< var idProduct = $(this).data('id-product'); ajaxCart.add(idProduct, null, false, this, parseInt($('#quantity_wanted_' + idProduct).attr('value'))); return false; >); $(document).on('click', '.ticker-button', function(e) < e.preventDefault(); var parentDiv = $(this).parents('div.quantityTicker:first'); if (parentDiv.length) < var thisInput = parentDiv.find('input.ticker-input'), thisVal = parseInt(thisInput.attr('value')); if (isNaN(thisVal)) < thisVal = 1; >if ($(this).is('.ticker-up')) < thisVal++; >else if (thisVal > 1) < thisVal--; >thisInput.attr('value', thisVal); > >); collection.each(function()< var idProduct = $(this).data('id-product'); var tickerContainer = $(document.createElement('div')).addClass('ticker-wrapper') .append($(document.createElement('div')).addClass('quantityTicker') .append('') .append(' ') .append(' ') ); tickerContainer.insertBefore($(this)); var currentInput = tickerContainer.find('div.ticker-input-wrapper'), currentInputHeight = currentInput.outerHeight(); //tickerContainer.find('div.ticker-button').css(); >); > >);
Yii Framework
Я много видел такого кода, когда JS скрипты помещали внутри php-файлов и формировали подобный «вариантивный js код» с подставленными значениями из PHP.
На мой взгляд это смешивание языков программирования, зон ответственности и ужасная читаемость.
ТС, вы ведь можете поместить нужные вам даннные в hiddenInput, откуда уже можете их забрать на JS или использовать ajax для получения актуальных данных со стороны сервера. Зачем вам смесь PHP и JS?
Йож Сообщения: 574 Зарегистрирован: 2015.08.26, 03:05
Re: JS должен ставить PHP код
Сообщение Йож » 2017.02.06, 18:50
Restlin, тут наоборот — человек хочет с помощью Javascript вставить php код.
Это ужас — php — серверный язык, его никак не вставить с помощью Яваскрипта.
Nerf Сообщения: 780 Зарегистрирован: 2015.01.29, 00:37
Re: JS должен ставить PHP код
Сообщение Nerf » 2017.02.06, 18:52
Чито? Вы понимаете что php на сервере, js на клиенте, понимаете как это все работает? Это в принципе не реализовать.
Если нужно, чтобы js был динамическим, то сам js должен собираться через php.
Restlin Сообщения: 139 Зарегистрирован: 2011.09.09, 18:12
Re: JS должен ставить PHP код
Сообщение Restlin » 2017.02.06, 19:01
Йож писал(а): ↑ 2017.02.06, 18:50 Restlin, тут наоборот — человек хочет с помощью Javascript вставить php код.
Это ужас — php — серверный язык, его никак не вставить с помощью Яваскрипта.
Да, теперь я понял всю глубину проблемы
Zik_UA Сообщения: 22 Зарегистрирован: 2017.02.03, 00:19
Re: JS должен ставить PHP код
Сообщение Zik_UA » 2017.02.06, 22:26
Хорошо. Пойдем другим путем. Возможно можно через пхп вывести скрипт
$params = [ 'prompt' => 'Виберіть тип оголошення. ', 'onchange' => '$.post( "index.php?r=post/categories&id='.'"+$(this).val(), function(data) < var zik = data; >);' ]; $items = [ '1' => '1', '2' => '2', '3'=>'3', '4'=>'4', ]; $form->field($model, 'type_id')->dropDownList($items,$params);
Как в $sub_cat вывести переменную var zik .
ElisDN Сообщения: 5835 Зарегистрирован: 2012.10.07, 10:24 Контактная информация:
Re: JS должен ставить PHP код
Сообщение ElisDN » 2017.02.06, 22:37
Zik_UA Сообщения: 22 Зарегистрирован: 2017.02.03, 00:19
Re: JS должен ставить PHP код
Сообщение Zik_UA » 2017.02.06, 22:51
Не могу понять как использовать данный плагин
Zik_UA Сообщения: 22 Зарегистрирован: 2017.02.03, 00:19
Re: JS должен ставить PHP код
Сообщение Zik_UA » 2017.02.06, 22:52
ElisDN писал(а): ↑ 2017.02.06, 22:37 Поставьте http://demos.krajee.com/widget-details/depdrop
Не могу понять как использовать данный плагин
rak Сообщения: 2181 Зарегистрирован: 2010.11.02, 23:40 Контактная информация:
Re: JS должен ставить PHP код
Сообщение rak » 2017.02.06, 23:48
Zik_UA писал(а): ↑ 2017.02.06, 22:52
ElisDN писал(а): ↑ 2017.02.06, 22:37 Поставьте http://demos.krajee.com/widget-details/depdrop
Не могу понять как использовать данный плагин
там же есть примеры, что именно не понятно?
Zik_UA Сообщения: 22 Зарегистрирован: 2017.02.03, 00:19
Re: JS должен ставить PHP код
Сообщение Zik_UA » 2017.02.07, 11:20
rak писал(а): ↑ 2017.02.06, 23:48
Zik_UA писал(а): ↑ 2017.02.06, 22:52
ElisDN писал(а): ↑ 2017.02.06, 22:37 Поставьте http://demos.krajee.com/widget-details/depdrop
Не могу понять как использовать данный плагин
там же есть примеры, что именно не понятно?
Там пример как при выборе элемента из одного списка подтягивает список для второго а мне нужно чтобы подтягивало конкретный контент.
Делаю форму заказа товара и при выборе способа доставки должно меняться еементы меню
Medic84 Сообщения: 61 Зарегистрирован: 2017.01.28, 17:48
Re: JS должен ставить PHP код
Сообщение Medic84 » 2017.02.07, 11:29
Zik_UA писал(а): ↑ 2017.02.07, 11:20 Делаю форму заказа товара и при выборе способа доставки должно меняться еементы меню
Так в чем проблема? Вам достаточно чтобы при выборе radioButton срабатывало событие OnChange и при помощи Ajax подгружался нужный контент.
К примеру во вьюхе пишем:
$radio_js = "$(\"input[name=radio]\").on('change', function() < $.ajax(< url: '/controller/getdata', type: \"POST\", data: '?radio=' + this.value, success: function (data) < // парсим переменную data (лучше конечно чтобы ответы генерировал отдельный контроллер) и меняем через jQuery значения элементов необходимого поля. Профит. >>); >);"; $this->registerJs($radio_js);
А в контроллере можно писать что то типа:
public function behaviors() < return [ [ 'class' =>'yii\filters\ContentNegotiator', 'formats' => [ 'application/json' => yii\web\Response::FORMAT_JSON, ], ], 'access' => [ 'class' => 'yii\filters\AccessControl', 'rules' => [ [ 'allow' => false, 'verbs' => ['GET'], 'denyCallback' => function ($rule, $action) < throw new \yii\web\HttpException(405, 'Доступ запрещен. Данный метод не поддерживается.'); >], [ 'allow' => true, 'verbs' => ['POST'], ], ], ], ]; > public function beforeAction($action) < if (!parent::beforeAction($action)) < return false; >if (!Yii::$app->request->isAJAX) < throw new \yii\web\HttpException(403, 'Доступ запрещен. Обратитесь к администратору.'); return false; >return true; > public function actionGetdata() < return array('data' =>array('1','2','и т.д.')); >
Как вставить код PHP в JS
Но вариант вполне рабочий, хотя статику я бы не советовал отдавать с помощью PHP.
Но если очень надо, то можно.
Например, в форме сделать инпут, с value
grebovich
Гуру форума
Регистрация 19 Мар 2012 Сообщения 358 Реакции 81
Например, в форме сделать инпут, с value
Так я этой цели и добиваюсь но, сам инпут создается этим JS файлом.
grebovich
Гуру форума
Регистрация 19 Мар 2012 Сообщения 358 Реакции 81
Ну почему же. Как вариант, если у тебя Nginx, ты можешь создать что-то вроде:
location = /smartbasket/js/smartbasket.min.js < fastcgi_pass unix:/run/php-fpm/example.com.sock; include fastcgi.conf; >
Т.о. ты указываешь веб-серверу, что данный файл будет обработан с помощью PHP.
И уже средствами своего движка выдаёшь содержимое этого файла с необходимыми вставками PHP кода.
Но опять же, я не знаю, что у тебя за веб-сервер и что за сайт.
На сколько легко там реализовать данный вариант и т.д.
Но вариант вполне рабочий, хотя статику я бы не советовал отдавать с помощью PHP.
Но если очень надо, то можно.
