2017-08-17 89 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