2014-07-01 61 views
0

嘿,我想知道,是否有可能有一個鏈接隱藏/隱藏在網頁源代碼,但點擊按鈕時激活? 爲什麼我要這個?因爲我創建了一個網頁類遊戲,但我不希望用戶能夠右鍵單擊並查看源代碼(我不是說禁用右鍵單擊),以便他們只能看到下一個URL並手動將其輸入到Web瀏覽器以進入下一頁/級別,我希望在完成挑戰後將其提供給他們,然後單擊提交按鈕。 很抱歉,如果我沒有解釋這很容易,如果你不明白,只是說我會盡量重複我剛纔想說:)是否有可能在網頁源代碼中隱藏/隱藏鏈接,但點擊按鈕時有效?

BTW最好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> 
+0

你所說的鏈接是活躍的意思嗎? –

+0

我的意思是有鏈接出現在代碼,這樣的頁面知道在哪裏可以重定向到:) – jLynx

+2

的確是這樣,存儲在服務器上的URL,並在需要的時候得到它,存儲在客戶方任何事情都是給客戶端訪問。作爲@ adeneo說, – adeneo

回答

1

可以使用的XMLHttpRequest(AJAX)從PHP腳本獲取下一個URL,如下所示:

$urls = array(
    1 => 'myGame1.php', 
    2 => 'thisIsPage2.php', 
    3 => 'iLikeJavaScript.html' 
); 

if (isset($_POST['nextPageUrl']), is_int($_POST['nextPageUrl'])) { 
    echo $urls[$_POST['nextPageUrl']]; 
} 

在這個例子中,你有一個包含所有URL的數組,並且只回顯你需要的一個。或者,您可以從數據庫加載下一頁,生成一個新的隨機文件,無論您需要什麼。

對事物的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 -object)。

$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']; 
} 
+0

到目前爲止,這種接縫像最好的方式,但仍然不是100%理想的,因爲用戶可以只是做一個帖子請求自己返回網頁的網址,無論如何,你知道這可以阻止用戶做他/她的帖子我的網站返回URL?,但感謝您的答案:) – jLynx

+0

我編輯它,並添加了一個額外的服務器端驗證。這樣他們仍然能夠自己訪問頁面,但除非答案是正確的,否則不會得到URL。 – Padarom

0

您可以嘗試從一個簡單不包含下一個按鈕/鏈接的網頁開始,然後將其設置爲在完成「挑戰」時將網頁更改爲具有「下一個挑戰」鏈接的版本。

+0

沒錯,這就是想什麼即時通訊做(在某種程度上),但如何? – jLynx

+0

當他完成遊戲時,將他移至與之前完全相同的類似網址,但只添加鏈接。我知道用戶仍然可以轉到這個中介鏈接,然後轉到下一個lvl,但很難相信任何人都會認爲鏈接完全相同會將他們轉移到下一個lvl。 –

+0

另一種方法是使用遞增本身(或變更)時的水平是完整的一個變量,你只需驗證,如果變量遞增,如果沒有這意味着拉特完成,這樣你就可以給他下一個LVL則: ) –

0

爲了做到這一點,你可以可以使用JavaScript(jQuery的:http://www.w3schools.com/jquery/jquery_hide_show.asp

但是這不會保護您的網頁,因爲人們總能看到的JavaScript。你必須在php中保護你的下一頁/級別。

+0

這不會工作,因爲用戶仍然可以看到這一來源,並能夠提取路段 – jLynx

+0

您可以只擁有2頁每個網頁一個網頁的級別和一個其他的檢查,如果它是很好的答案,並使用Session(或者一個dataBase是你想要保存下一個連接的級別),以確保他完成了關卡。然後,如果會話(或batabase)與該級別對應,則只需檢查每個頁面。 – Kvasir

0

呀這是可能的......讓我們說你有,例如一個MySQL數據庫...
你必須把你的鏈接在它...例如看看這段代碼,我已經爲亞寫着:

$query = "select * from lnkstabl"; 
$res = mysql_query($query); 
$row = mysql_fetch_array($res); 
echo '<a href="http://' . $row['link'] . '">go to link</a>'; 

希望我能解決你的問題......

+2

它顯示在HTML標記中,因此這不是他想要的。 – Padarom

+0

是的,但不會在網頁生成時在源代碼中顯示此鏈接? – jLynx

0

像這樣的東西可能是你在想什麼:

在服務器端,創建一個包含javascr文件JS.php IPT這樣的代碼:

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> 
+0

用戶可以查看源代碼,單擊文件鏈接並再次查看URL。 – Padarom

+0

同樣,用戶只需要按照鏈接和源代碼「src =」path/to/JS.php「」來打開JS.php並查看剛剛在JS中回顯的鏈接。 PHP的? – jLynx

相關問題