2013-02-13 82 views
2

因爲我知道很多人考慮使用Javascript代碼裏面的PHP代碼壞習慣,我不知道如何執行一個javascript函數,前提是某個PHP變量具有一定的價值。使用Javascript代碼裏面的PHP代碼

這是我目前正在寫代碼的方式:

<script type="text/javascript"> 
function execute_this() { 
some code; 
} 
<?php 
if(!empty($_SESSION['authorized'])) : 
?> 
execute_this(); 
<?php 
endif; 
?> 
</script> 

任何想法如何避免在這個特殊的例子使用Javascript中PHP?

+0

你能展現完整的文件?因爲目前我無法完全理解我們的問題。 – 2013-02-13 09:11:57

+0

不是一個真正的答案。但你可以嘗試Ajax。如果您通過ajax發佈到PHP頁面,然後返回「授權」狀態。 – CharliePrynn 2013-02-13 09:11:57

+5

從PHP設置javascript變量沒有任何問題。 – 2013-02-13 09:12:07

回答

2

如果您不想在JavaScript代碼中包含任何PHP代碼,但想知道php變量的值,則必須在服務器端(PHP)和客戶端(JS)之間集成一個通信

例如,您可以使用ajax請求來調用一個小的php代碼段,該代碼段在其答覆中提供了值。有了這個值,你可以繼續在你的Java腳本代碼。

在我看來,你應該決定它是否值得努力。

編輯:

在關於編輯的問題:如果是重要的JS函數永遠叫如果PHP會話值不存在我會留在PHP代碼,但會做這種方法:

<?php 
if(!empty($_SESSION['authorized'])) : 
?> 
<script type="text/javascript"> 
function execute_this() { 
some code; 
} 

execute_this(); 
</script> 
<?php 
endif; 
?> 

如果評估在JavaScript中的會話變量的值,你必須確保沒有不好的事情發生在你的代碼,如果所提供的價值被操縱。

+0

這並沒有回答這個問題 - 儘管這個問題有點嚴重。 – Clyde 2013-02-13 09:15:16

+0

它確實回答了這個問題。 – itachi 2013-02-13 09:19:23

+0

@jmadsen該函數使用AJAX輸出文件管理器 – 2013-02-13 10:00:40

1

您必須將PHP變量存儲在html代碼的某處,然後進行訪問。 例如:

<input type="hidden" id="hidval" value=<?php echo $_SESSION['authorized'] ?>/> 

然後在您的JS:

var somevar=document.getElementById(hidval).value; 
if(somevar==what you want){ 
    execute_this(); 
} 
+1

如果您閱讀(編輯)的問題,您會發現這不是OP所要做的。 – Clyde 2013-02-13 09:16:01

+0

OP問是否可以讓php決定是否應該在'

1

我認爲你有一些基本的設計問題,我們只看到冰山一角,並不能完全幫助你。

沒有什麼內在的錯誤調用PHP函數這種方式,但你有幾個問題:

1)你不能單獨的js文件&允許緩存或CDN

2),而MVC是當然不是「強制」,這絕對是一個好主意,嘗試這種類型的邏輯從「視圖」分離 - 您的渲染輸出

3)我懷疑其他地方你有一個巨大的安全漏洞 - 如果你是根據wh設置某些參數以太或不是他們是「授權」在他們的會話中,這意味着你最有可能發回信息的基礎上的權利決定在你的PHP代碼的地方。切勿從頁面上執行此操作 - 所有數據都應該在頁面本身上保持「中性」,因爲您無法控制它。

這給,如果你不明白爲什麼我說讀:http://www.codebyjeff.com/blog/2012/12/web-form-security-avoiding-common-mistakes

+0

OP不斷編輯:-)所以我現在看到的功能是一個JavaScript的。我對他的安全設置仍然有點緊張,#1肯定是真的 – jmadsen 2013-02-13 09:35:06

+0

非常感謝所有。似乎我需要重寫我的代碼:) – 2013-02-13 10:04:50