2017-08-17 10 views
-1

私はPHPを初めて使いました。あなたのコードを整理する最良の方法はなんですか?私はPHP(testexec.php)を使ってリモートサーバと話すためにクライアント側でフォーム(form.php)で何かをしようとしています。私は私のtestexec.phpがform.phpファイルから変数にアクセスする必要があるので、form.phpにすべてのコードを入れて変数を呼び出す必要はないのだろうかと疑問に思っています別の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)); 
      }   
    } 
} 
?> 

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

私はこれがこのようなものを分離するために実用的であるかどうか疑問に思っていましたか?

+1

MVCを参照してください。 MVCはソフトウェアのアーキテクチャパターンです。 MVCの原則を遵守すると、PHPフレームワークの多くが自然にコードを整理しています。調べるべき他のアーキテクチャーパターンがありますが、1つを採用すると、すべてのコードが多かれ少なかれ、どこに行くのかがわかります。 –

答えて

0

私はスクリプトを組み合わせても利点がありません。 $ _POSTには魔法はありません。これは、スクリプトがPOSTのTARGETであった場合にのみ存在し、ターゲットが最初にフォームをレンダリングしたのと同じスクリプトか、別のスクリプトかどうかは関係ありません。

フォームコードを自己投稿型オールインワンバージョンに結合する唯一の利点は、反復エラー処理がある場合です。

このような状況では、いくつかのサーバー側の検証を頻繁に行う必要があります。フォームが検証されない場合は、エラーのある別のフォームと通常は元のフォーム要素が埋め込まれたレスポンスを送信する必要があります典型的には、どの要素が問題を引き起こしたかを視覚的に示すものである。

これを1か所にまとめるのははるかにクリーンです。そのため、フォームを使用してホイールを再改造しているわけではありません。

しかし、ロジックをプレゼンテーションから分離すると、スクリプトはよりクリーンで読みやすくなります。

これは、人々がスマートなものや小枝のようなテンプレートライブラリを使用する大きな理由です。なぜなら、すべてのMVCフレームワークには何らかのテンプレートシステムが付属しているからです。でも、あなたのケースで

、あなたはそれ自身の別々のスクリプトにフォームデータを移動してのようなもので、それを含めることができますあなたの場合は

require_once('form_frm.php'); 

、form.phpは一切現在、ロジックを持っていないので、私は見ます現時点でこれを行うことに大きな利点はありません。

ただし、使用している各機能を考慮し、なぜそれを使用しているかを検討することをお勧めします。

たとえば、このスクリプトでは、ストライプスラッシュ()は価値がないように見えます。実際には、magic_quotes_gpc()は古くから使用されていたため、現在では長年使用されていました。

エスケープは、SQLデータベースの文字列処理の機能であり、異なる文字セットとローカライゼーションの問題により、エスケープ文字を追加する必要がある場合は、mysql_real_escape_string()などのデータベース固有のメソッドが優れていますクライアントデータとデータベースのセット。

現時点では、文字列データをSQLクエリに追加するためにバインド変数を使用する必要があることはほとんどの人が知っています。したがって、引用符をエスケープする必要は実質的にないため、スラッシュやmysql_real_escape_string )とにかく、そして世界はそれにとってより良いです。

addslashes()を呼び出さない場合、なぜstripslashes()を呼び出していますか?

+0

こんにちは、詳細な説明、簡単な質問、あなたが別のスクリプトにフォーム変数を移動すると言う、ありがとう、私に例を与えることができますありがとう。 – kkmoslehpour

+0

あなたの場合、form.phpにはロジックがないため、本質的にすでにそれを行っています。ロジックを1つのスクリプトにまとめるには、別のスクリプトでrequire_once()という別のスクリプトとしてform.phpを本質的にそのままにしておきます。あなたは同じスクリプトにhtmlとjavascriptの束を持っていません。 – gview

+0

したがって、私はtestexec.phpからform.phpの 'gateway'にアクセスできますか? – kkmoslehpour

関連する問題