2016-07-08 3 views
-2

У меня есть HTML-страница с некоторыми кнопками, одна из моих кнопок выглядят следующим образом:Переменная urlencoded PHP не определена?

<input class="contentLink" type="button" value="Questionnaire" onclick="validate(<?php urlencode('/my-site/Tools/Learning_Strategies/Questionnaire.php'); ?>)"/> 

По существу, когда эта кнопка нажата, она проходит urlencoded-строковый литерал «/ мой сайт/Инструменты/Learning_Strategies/Questionnaire.php»в яваскрипта метод проверки:

function validate(url){ 
    alert(url); 
    location.href="/my-site/Session/redirectMe.php?loc="+url; 
} 

То, что я пытаюсь сделать, это получить„/my-site/Session/Questionnaire.php“из HTML-страницы, доступной из redirectMe.php. Это является установка в

location.href="/my-site/Session/redirectMe.php?loc="+url; 

, который ведет к моему redirectMe.php файла:

<?php 
require "SessionAuthenticator.php"; 
Session_start(); 
if(validateSession()===true){//validateSession() is defined inside SessionAuthenticator.php 
    echo $_GET["loc"]; 
    //header("Location: ".$_GET["loc"]); 
}else{ 
    header("Location: /my-site/LoginPage/index.php"); 
} 
?> 

Проблема заключается во обоих чеку и эхо, кодированный строковый литерал вышел как «неопределенные» , что означает следующую строку:

header("Location: ".$_GET["loc"]); 

будет действительно выглядеть следующим образом:

header("Location: undefined"); 

И поэтому ищите «неопределенный» в текущем каталоге и разбивайте веб-сайт.

Это все работает отлично, если нет кодирования следующим образом:

<input class="contentLink" type="button" value="Questionnaire" onclick="validate('/my-site/Tools/Learning_Strategies/Questionnaire.php')"/> 

Но ... Нет кодирования не плохо да?

Если вы задаетесь вопросом, почему вы не видите метод декодирования используется ...

Веб-сервер организует $ _GET были urldecoded раз уже к тому времени он достигает вас! - Мэтт Джонсон ¶ @http://php.net/manual/en/function.urldecode.php#48481

Требовать и включают в себя не будет работать, так как redirectMe.php будет выполняться до того, как пользователь видит даже на этой странице. Это должно произойти только тогда, когда пользователь нажимает кнопку. Вот почему я использую функцию javascript для запуска redirectMe.php.

Я пробовал ajax, однако это не сработало. Поговорив с опытным программистом, которого я знаю лично, мне сказали, что аякс не может мне помочь. Это связано с тем, что Ajax будет перенаправлен на «/my-site/Tools/Learning_Strategies/Questionnaire.php», но не на клиента (пользователя).


Чтобы четко на мой вопрос:

Почему urlencoded придумать, как «не определено», когда эхо-эд/начеку-е изд? Как это исправить?


Что касается программ/веб-серверов/и т.д. Я использую ...

Sublime 3 (текстовый редактор)

Wamp (64bit) (все-в-одном пакете) @http://www.wampserver.com/en/

Apache 2.4.17

PHP 7

MySQL 5.7.9


Я открыт для других способов получить то, что я пытаюсь сделать сделать.

Однако я не открыт для изменения веб-серверов/программ и т. Д. (За исключением возвышенного 3, поскольку это просто текстовый редактор ... но зачем это нужно требовать?).

Кроме того, любые способы достижения этого должны поддерживать браузеры/платформы, как указано ниже.


Сайт должен поддерживать:

(браузеры)

IE 8 и выше, и последние версии Microsoft Edge, Firefox, Chrome и Safari.

Cross-Platform:

для Windows 7 и выше, а также последние версии Mac OS, IOS и Android

ответ

2

Почему urlencoded придумывают как 'не определено', когда эхо-эд/оповещения -ed?

Поскольку PHP ничего не выводит.

<input class="contentLink" type="button" value="Questionnaire" onclick="validate(<?php urlencode('/my-site/Tools/Learning_Strategies/Questionnaire.php'); ?>)"/> 

дает вам:

<input class="contentLink" type="button" value="Questionnaire" onclick="validate()"/> 

... как только вы запустите его через PHP парсер.

Вам нужно:

  • echo результат, так что-то появляется там
  • завернуть его в кавычки (с json_encode так что любой побег необходимо также позаботиться о) так, что она будет рассматриваться как строка а не имя переменной.
+0

Вы можете представить пример с помощью json_encode? Я получаю «Неожиданный токен» в инструменте разработчика Chrome с помощью onclick = «validate ()" – Tyler

+0

@Tyler - Правильный PHP. Я не вижу никаких '' 'в нем, и я не вижу нигде' '' в любом из кода в вопросе, который бы выбрал эту ошибку. Инструменты разработчика дадут вам номер строки, в которой произошла ошибка. Нажмите здесь. – Quentin

+0

Разработчик указывает на тег ввода с кодом onclick. Это также кажется мне странным, поскольку в файле php (html-страница) и с большим количеством эхо-тестирования не существует никаких} в URL-адресе, до и после кодирования ... Ну откладывая это; после разговора с другими людьми в другом месте, я узнал, что мне не нужно кодировать URL-адрес, потому что я полностью контролирую URL-адрес. На него не влияет пользовательский ввод или что-то еще. Упрощение кнопки - вы нажимаете на нее, и вы переходите на другую страницу. – Tyler

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