2017-08-17 46 views
-1

我是新來的PHP,我想知道如何組織您的代碼的最佳方式。我一直試圖在客戶端使用form(form.php)做一些事情,使用PHP(testexec.php)與遠程服務器交談。我已經回到了我的testexec.php需要從form.php文件訪問變量的問題,所以現在我想知道如果我應該把所有的代碼放在form.php中,所以我不必調用變量從一個不同的PHP文件。在這種情況下你們如何組織你的代碼?如何組織您的代碼PHP

form.php的

<div class="box1"> 
    <form method="post"> 
    <label class="col">Up/Dowb</label> 
    <span class="col"> 
    <input type="radio" name="option" id="r1" value="1" /> 
    <label for="r1">Up</label> 
    <input type="radio" name="option" id="r2" value="2" /> 
    <label for="r2">Down</label> 
</span> 
<span class="col"> 
    <input type="submit" class="button"/> 
</span> 
    </form> 
</div> 
<script src ="../../../jqueryDir/jquery-3.2.1.min.js"></script> 
<script type="text/javascript"> 

    $(".button").click(function(event){ 
     if ((document.getElementsByName("gateway")[0].value == '')) { 
       alert('Gateway Required!'); 
     return false; 
    } 
     else if (document.querySelectorAll('input[type="radio"]:checked').length < 1) {     
       alert('Please Choose Up/Down Value!'); 
       return false; 
     } 
     else { 
       //alert('Sucess!'); 
      event.preventDefault(); 
      $.ajax({ 
      url:"testexec.php", 
      type: "POST", 
        data: {option: $('input[type=radio]:checked').val()}, 
      dataType: "text", 
      success:function(result){ 
         $('#div1').html(result) 
      } 
      }); 
      return true; 
     } 
    }); 
</script> 
<div id="div1"></div> 
</body> 
</html> 

testexec.php

$gateway = ''; 
    $user = 'user'; 
    $pwd = 'pass'; 

    function cleanInput($data) { 
     $data = trim($data); 
     $data = stripslashes($data); 
     $data = htmlspecialchars($data); 
     return $data; 
    } 

    if ($_SERVER['REQUEST_METHOD'] == 'POST'){ 
    $gateway = cleanInput($_POST['gateway']); //need to get the value of gateway from form.php 

     //create the ssh connection 
    if ($connection = @ssh2_connect($gateway, 22)) { 
      ssh2_auth_password($connection, $user, $pwd); 
      if(isset($_POST['option']) && $_POST['option'] == 1) { 
       $stream = ssh2_exec($connection, "/tmp/user/testscripts/up.sh"); 
       stream_set_blocking($stream, true); 
       $stream_out = ssh2_fetch_stream($stream, SSH2_STREAM_STDIO); 
       echo '<pre>' . stream_get_contents($stream_out) . '</pre>'; 

      } 

      if(isset($_POST['option']) && $_POST['option'] == 2) { 
       $stream = ssh2_exec($connection, "/tmp/user/testscripts/down.sh"); 
       stream_set_blocking($stream, true); 
       $stream_out = ssh2_fetch_stream($stream, SSH2_STREAM_STDIO); 
       echo nl2br(stream_get_contents($stream_out)); 
      }   
    } 
} 
?> 

所以現在我必須從我的form.php的某種方式得到 '門戶' 的價值,爲下面的代碼工作:

$gateway = cleanInput($_POST['gateway']); 

所以我想知道這是不是很好,這樣分開的東西?

+1

查找MVC。 MVC是一種軟件架構模式。當您堅持使用MVC原則時,許多PHP框架都會自然地組織您的代碼。還有其他架構模式需要關注,但是當您採用其中一種架構模式時,您會看到所有代碼或多或少地走向應該走的地方。 –

回答

0

我認爲在組合腳本方面沒有任何優勢。對$ _POST沒有任何魔力。它僅在腳本是POST的目標時才存在,並且目標是最初呈現該表單的腳本還是不同的腳本並不重要。

將表單代碼組合成一個自我發佈的全在一個版本的唯一好處是您有迭代錯誤處理時。

在這種情況下,您經常需要進行一些服務器端驗證,如果表單未驗證,則需要發送帶有錯誤的另一表單的響應,並且通常使用已填寫的原始表單元素並且通常用一些視覺指示來指出哪些元素導致問題。

把所有這一切放在一個地方更清潔,所以你不會用形式重新發明輪子。

但是,當您將邏輯從演示文稿中分離出來時,任何腳本都更乾淨,更易於閱讀。

這是人們爲什麼使用像smarty或twig這樣的模板庫的原因,也是爲什麼每個MVC框架都帶有某種模板系統的原因。

即使在你的情況,你可以在表單數據移動到它自己的獨立的腳本,包括它的東西,如:

require_once('form_frm.php'); 

在你的情況,form.php的沒有任何的邏輯目前,讓我看到目前沒有這樣做的主要優勢。

然而,我會推薦你​​考慮你正在使用的每個功能,以及你爲什麼使用它。

例如,在這個腳本中Stripslashes()對你來說看起來沒有任何價值,事實上,反覆使用stripslashes很多年了,因爲magic_quotes_gpc()很久以前就被棄用了。

轉義是SQL數據庫字符串處理的一個功能,並且由於不同字符集和本地化的問題,如果您需要添加轉義字符,有更好的數據庫特定方法,如mysql_real_escape_string()設置客戶端數據和數據庫。

在這個時候,大多數人都知道你應該使用綁定變量來向SQL查詢添加字符串數據,這基本上消除了對引號的任何轉義的需要,因此不需要添加斜槓或mysql_real_escape_string( )無論如何,世界對它更好。

如果你沒有調用addslashes(),你爲什麼要調用stripslashes()?

+0

嗨,感謝您的詳細解釋,快速的問題,當你說移動窗體變量到另一個腳本,你能給我一個例子。 – kkmoslehpour

+0

在你的情況下,你基本上已經這樣做了,因爲你的form.php沒有邏輯。如果你想將邏輯合併成一個腳本,保持form.php基本上就是現在的樣子,作爲另一個腳本中的require_once()的單獨腳本仍然是有意義的。這樣你就不會在同一個腳本中擁有一堆html和javascript。 – gview

+0

那麼我如何能夠從testexec.php – kkmoslehpour