我是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']);
所以我想知道这是否适合分离这样的事情?
答案 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()?