2015-10-06 64 views
0

我嘗試執行php代碼,具體取決於確認複選框的值如何,就像在此代碼段中一樣。只有當javascript語句爲真時,才執行php代碼

<script> 
    var check = confirm ('Are you sure ?'); 

    if (check == true) 
    { 
     <?php shell_exec('sudo shutdown -r now'); ?> 
    } else { 
     <?php 
      header("Location: index.php"); 
      exit(); 
     ?> 
    } 

</script> 

但是確認對話框沒有顯示出來,並且執行了shutdown命令?這甚至有可能嗎?

+0

使用window.location

,這將是不可能的相反。當JS執行時,PHP已經完成了它的工作。看看「服務器端」與「客戶端」語言 –

+0

「php」是作爲用戶對服務器的網頁請求執行的,因此它是**預處理的超文本**無論你在這裏嘗試過什麼都是不可能的。 – Rayon

+0

你可以做的最好的事情是做一個Ajax調用,並執行PHP代碼,如果你的JavaScript變量爲true .. – Naruto

回答

1

PHP是一種服務器端語言,所以你可以從不是執行它從你的客戶端JavaScript。期。對話框沒有顯示,因爲你有一些JS錯誤,執行該命令是因爲HTML在服務器上呈現,並且在將整個HTML發送到瀏覽器之前執行PHP。

順便說一句,你不應該做一個shell_exec基於這樣的確認對話框。

這可能是一個辦法:

你的HTML的部分:

<script> 
    function shutDown() { 
     if (confirm ('Are you sure ?')) 
     { 
      var xhReq = new XMLHttpRequest(); 

      xhReq.open("POST", "ajax.php", false); 
      xhReq.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
      xhReq.send("cmd=shutdown"); 

      var serverResponse = xhReq.responseText; 
      alert(serverResponse); // Shows the return from the PHP script 
     } else { 
      window.location.href = "index.php"; 
     } 
    } 
</script> 
<a href="javascript:void(0)" onclick="javascript:shutDown()"/>shutdown</a> 

你的PHP文件(ajax.php),用於處理AJAX請求(S)的部分:

if(isset($_POST["cmd"]) && $_POST["cmd"] == "shutdown") { 
    // your shutdown code 
    // I'm not sure if "sudo" really works in this context, because you have to verify with a password, except your php process is already running with sudo rights 
    shell_exec('sudo shutdown -r now'); 
} 

// you can return something here, 
// but it only makes sense if you don't shutdown the server 
// you are running the website to shutdown ;) 
+0

爲什麼我不應該在確認對話框上執行'shell_exec'?你能告訴我代碼有什麼問題嗎?我找不到錯誤。 – Black

+1

那麼,首先它不會工作,你需要確認對話框後的AJAX。你可以這樣做,但你必須確保唯一可以調用它的用戶擁有正確的權限,服務器必須被保存爲地獄,因爲在shel_exec允許的情況下,你可能會遇到真正的大問題。如果它只是在你自己的網絡上運行,並且沒有任何外部任何人的訪問,那麼確定沒有問題,否則你應該谷歌類似shell_exec的安全性,即使你正在做所有的事情來保存它,例如問題可能是一些上傳目錄,在那裏可以創建一個shellscrip .. – swidmann

+0

Thx這些有用的信息!我只在本地主機上運行它,所以沒問題。每一個命令都必須得到我的允許。 – Black

3

JavaScript在發送給他之後由瀏覽器執行。 PHP在分析答案之前由服務器執行。 使用XMLHttpRequest在檢查爲真時通知您。

+0

是否有任何實際的例子。鏈接? – Black

-7

這應該只要頁面另存爲工作* .PHP

<script> 

    if (confirm ('Are you sure ?')) 
    { 
     <?php shell_exec('sudo shutdown -r now'); ?> 
    } else { 
     <?php 
      header("Location: index.php"); 
      exit(); 
     ?> 
    } 

</script> 
+1

不,也不管用。確認框未顯示。 – Black

+0

這應該如何工作? – swidmann

2

您可以嘗試AJAX發送到PHP用於執行了shell_exec一部分,重定向的部分要求能的jQuery內進行管理,你不需要PHP爲。但再次shell_exec是非常非常敏感,使用它與預防措施。

代替header("Location: index.php");代替<?php shell_exec('sudo shutdown -r now'); ?>使用$.ajax({ code here });

當然
+0

正確答案。 -1沒有提到這需要jQuery。由於OP不理解服務器/客戶端之間的差異,他可能不會理解這一點。 – Christian

+0

我試過'$ .ajax({sudo shutdown -r now});'沒有工作。 – Black

+1

嗨愛德華 '$阿賈克斯({須藤執行shutdown -r now});'這是錯誤的正確的方法是 '$阿賈克斯({ 網址: 「sample.php」, 成功:函數(響應){ console.log(response); }); });' – akashBhardwaj

相關問題