如何组织PHP代码

时间:2017-08-17 17:02:18

标签: php html

我是PHP的新手,我想知道如何组织代码的最佳方法。我一直在尝试使用客户端的表单(form.php)来使用PHP(testexec.php)与远程服务器通信。我已经解决了我的testexec.php需要从form.php文件访问变量的问题,所以现在我想知道我是否应该将所有代码放在form.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'的值,以便以下代码工作:

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

所以我想知道这是否适合分离这样的事情?

1 个答案:

答案 0 :(得分:0)

我认为组合脚本没有任何优势。 $ _POST没有魔力。它仅在脚本成为POST的TARGET时才存在,如果目标是最初呈现表单的脚本或不同的脚本,则无关紧要。

将表单代码组合到自我发布的一体化版本中的唯一好处是,当您进行迭代错误处理时。

在这种情况下,经常需要进行一些服务器端验证,如果表单没有验证,则需要发送带有错误的另一个表单的响应,并且通常已经填写了原始表单元素,并且通常会有一些视觉指示,指出哪些因素会导致问题。

将这一切集中在一个地方会更加清晰,因此您不会使用表格重新发明轮子。

然而,此外,当您将逻辑与表示分开时,任何脚本都更清晰,更易于阅读。

这是人们使用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()?