#javascript #php #jquery #html
#javascript #php #jquery #HTML
Вопрос:
Эй, ребята, мне было интересно, возможно ли, чтобы ссылка была невидимой / скрытой в источнике веб-страницы, но активной при нажатии кнопки? Зачем мне это нужно? Поскольку я создаю игру, похожую на веб-страницу, но я не хочу, чтобы пользователь мог просто щелкнуть правой кнопкой мыши и увидеть исходный код (я не имею в виду отключение щелчка правой кнопкой мыши), чтобы они могли просто увидеть следующий URL и вручную ввести его в веб-браузере, чтобы перейти на следующую страницу / уровень, я хочу, чтобы он был предоставлен им, когда они завершат задание и нажмут кнопку отправки. Извините, если я не объяснил это легко, если вы не совсем поняли, просто скажите, и я попытаюсь перефразировать то, что я пытаюсь сказать 🙂
Кстати, желательно в Jquery, включая PHP
<script language="JavaScript">
function TheFunction(answer) {
if (answer == "theanswer") {
alert("Well done, time for level 2.");
location.href = "<?php echo "hi"; ?>.php"; // <-- or somthing like this
}
else {
alert("Wrong answer.");
}
}
</script>
Комментарии:
1. что вы подразумеваете под активной ссылкой?
2. Я имею в виду, чтобы ссылка отображалась в коде, чтобы страница знала, куда перенаправлять 🙂
3. Да, это так, сохраните URL-адрес на сервере и получите его при необходимости, все, что хранится на стороне клиента, доступно клиенту.
4. как сказал @adeneo, это возможно, сохранив в esrver то, что вам нужно. Просто небольшая идея: вместо проверки правильности ответа от клиента выполните AJAX-запрос к PHP-скрипту, передав ответ, проверьте его и ответьте или перенаправьте через PHP 🙂
5. Суть в том, что пользователь должен просмотреть src веб-сайта, чтобы найти ответ в JS (да, это странная игра XD), поэтому мне нужна эта часть видимой (JS), но я хочу перенаправить ссылку невидимой / скрытой
Ответ №1:
Вы можете использовать XMLHttpRequests (AJAX) для получения следующего URL-адреса из PHP-скрипта, например, следующим:
$urls = array(
1 => 'myGame1.php',
2 => 'thisIsPage2.php',
3 => 'iLikeJavaScript.html'
);
if (isset($_POST['nextPageUrl']), is_int($_POST['nextPageUrl'])) {
echo $urls[$_POST['nextPageUrl']];
}
В этом примере у вас есть массив со всеми URL-адресами внутри и echo только тот, который вам нужен. В качестве альтернативы вы можете загрузить следующую страницу из базы данных, сгенерировать новый случайный файл, все, что вам нужно.
На вашей стороне javascript вы используете что-то вроде этого (предполагая, что вы используете jQuery, «обычный» javascript также возможен, только немного сложнее):
function TheFunction(answer) {
if (answer == "theanswer") {
alert("Well done, time for level 2.");
$.ajax({
url: 'yourPage.php',
data: { nextPageUrl: 2 }
}).done(function (msg) {
location.href = msg;
});
}
else {
alert("Wrong answer.");
}
}
Это всего лишь подход к реальному решению. Каждую проверку на стороне клиента можно обойти, поэтому вы также можете проверить ответ в PHP-файле, просто чтобы убедиться, что кто-то не выполняет запрос AJAX вручную.
Это можно просто сделать, изменив PHP-файл и передав ответ скрипту через ajax (развернув data
-объект).
$urls = array(
1 => array('url' => 'myGame1.php', 'answer' => 'theanswer'),
2 => array('url' => 'thisIsPage2.php', 'answer' => 'theanswer2'),
3 => array('url' => 'iLikeJavaScript.html', 'answer' => 'theanswer3'),
);
if (isset($_POST['nextPageUrl']), is_int($_POST['nextPageUrl'])) {
if ($urls[$_POST['nextPageUrl']]['answer'] == $_POST['thisAnswer'])
echo $urls[$_POST['nextPageUrl']]['url'];
}
Комментарии:
1. Пока что это выглядит наилучшим образом, но все еще не на 100% идеально, поскольку пользователь может просто выполнить запрос post сам, чтобы вернуть URL веб-страницы, Знаете ли вы, что может помешать пользователю отправлять сообщение со своего веб-сайта на мой, чтобы вернуть URL?, но спасибо вам за этот ответ 🙂
2. Я отредактировал ее и добавил к ней дополнительную проверку на стороне сервера. Таким образом, они все еще могут получить доступ к странице самостоятельно, но не получат URL-адрес, если ответ не правильный.
Ответ №2:
Вы можете попробовать начать с веб-страницы, которая просто не содержит следующую кнопку / ссылку, а затем сделать так, чтобы по завершении «вызова» веб-страница менялась на версию, в которой есть ссылка на следующий вызов.
Комментарии:
1. Да, это то, что я хочу сделать (в некотором смысле), но как?
2. Когда он завершит игру, переместите его на аналогичный URL, который точно такой же, как предыдущий, но к нему добавлена только ссылка. Я знаю, что пользователь все еще может перейти по этой промежуточной ссылке, а затем к следующему уровню, но трудно поверить, что кто-то подумает, что точно такая же ссылка переместит их на следующий уровень.
3. Другой способ — использовать переменную, которая увеличивает себя (или изменяется) по завершении уровня, и вы просто проверяете, увеличилась ли переменная, и если это произошло, это означает, что уровень завершен, поэтому вы можете дать ему следующий уровень 🙂
Ответ №3:
Для этого вы можете использовать javascript (jQuery:http://www.w3schools.com/jquery/jquery_hide_show.asp)
Но это не защитит вашу веб-страницу, потому что люди всегда могут видеть javascript. Вы должны были защитить свою следующую страницу / уровень в php.
Комментарии:
1. Это не сработает, потому что пользователи по-прежнему смогут видеть этот источник и извлекать ссылку
2. У вас может быть просто 2 страницы для каждой веб-страницы, одна страница для уровня, а другая для проверки, хороший ли это ответ, и используйте сеанс (или базу данных, если вы хотите сохранить уровень для следующего подключения), чтобы убедиться, что он прошел уровень. Тогда вам просто нужно проверить на каждой странице, соответствует ли сессия (или база данных) уровню.
Ответ №4:
Да, это возможно … допустим, у вас есть база данных mysql, например…
Вы должны поместить в нее свою ссылку … например, посмотрите на этот код, который я написал для вас:
$query = "select * from lnkstabl";
$res = mysql_query($query);
$row = mysql_fetch_array($res);
echo '<a href="http://' . $row['link'] . '">go to link</a>';
Надеюсь, что я смогу решить вашу проблему…
Комментарии:
1. И это отображается в разметке HTML, поэтому это не то, что он хочет.
2. Да, но не будет ли эта ссылка видна в источнике при создании веб-страницы?
Ответ №5:
Возможно, вы думаете о чем-то подобном:
На стороне сервера создайте файл JS.php
, содержащий ваш код javascript, подобный этому:
echo '
function Try(answer) {
if (answer == "theanswer") {
alert("Well done, time for level 2.");
location.href = "<?php echo "hi"; ?>.php"; // <-- or somthing like this
}
else {
alert("Wrong answer.");
}
}';
header('Content-Type: text/javascript');
На стороне клиента
<script src="path/to/JS.php"></script>
Комментарии:
1. И пользователь может просмотреть исходный код, щелкнуть ссылку на файл и снова просмотреть URL.
2. Опять же, пользователи смогут просто перейти по ссылке и в источнике «src =»path/to/JS.php «» чтобы затем открыть JS.php и просмотрите ссылку, которая только что повторилась в JS.php ?