2016-08-31 7 views
0

私はPHPページで特定の要件を持っています。私はmysql DBからシェルスクリプト名を取得する2つのクエリを実行しています。 1番目のクエリ:実行し、正常に動作しているドロップダウンリストで出力を提供します。 2番目のクエリ:ドロップダウンリストからオプションが選択されている場合、その値は入力引数として2番目のシェルスクリプトに渡されます。これは達成できません。 同じように私を親切に案内します。以下は変数にselectオプションonchangeを保存して、単一のPHPページで引数として渡す方法

は私のPHPページのコードです:

<?php 
include('db.php'); 

function connect_db(){ 
    mysql_connect('localhost', 'root', '') or die('Could not connect to database' . mysql_error()); 
    mysql_select_db('dashboard'); 
} 



function close(){ 
    mysql_close(); 
} 



function query1(){ 
    connect_db(); 
    $sql = mysql_query("SELECT * FROM webpage WHERE page = 'display_peer_info.php' "); 
    $record = mysql_fetch_assoc($sql); 
    $script = $record['arg1_script']; 

    $conn = ssh2_connect('$server_ip',$port); 
    ssh2_auth_password($conn, '$user', '$pass'); 
    //Executing 1st shell script on remote server and saving output in a variable 
    $script_output = ssh2_exec($conn, "/home/$user/bin/webscript/$script"); 

    stream_set_blocking($script_output, true); 
    while($line = fgets($script_output)) { 
     flush(); 
     echo '<option value='.$line.'>'. $line . '</option>'; 
    } 

} 

function query2(){ 
    connect_db(); 
    $sql1 = mysql_query("SELECT * FROM webpage WHERE page = 'display_peer_info.php' "); 
    $record1 = mysql_fetch_assoc($sql1); 
    $script1 = $record1['page_script']; 

    $conn = ssh2_connect('$server_ip',$port); 
    ssh2_auth_password($conn, '$user', '$pass'); 

    //Getting value from dropdown list 
    $dropdown_value = $_POST['arg1']; 
    // Executing 2nd shell script on same remote server with Argument selected from dropdown list 
    $script_output1 = ssh2_exec($conn, "/home/oaa/bin/webscript/$script1 \"$dropdown_value\" "); 
    echo $script_output1; 
} 
?> 


<!DOCTYPE> 
<html> 
<head> 
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" /> 
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script> 
</head> 
<body> 

<div class="webpage"> 
    <select id="arg1"> 
     <?php query1();?> 
    </select> 
    <?php close(); ?> 

</div><br /> 
<div id="output"> 
    <? php query2(); ?> 
</div> 
</body> 
</html> 

私の第二のクエリ関数からの出力を得るために、いくつかのロジック/回避策を提案してください。

+0

あなたはここで何が問題になったのか説明しませんでした。どのようなエラーがありましたか?実際に得られた出力と予想された出力は何でしたか?デバッグやトラブルシューティングにどのようなステップを取ったのですか? – Sherif

+0

上記のコードでは、Resource id#9を出力として取得します。実際に私は2番目のクエリでドロップダウンリスト選択オプションを渡す方法、ロジックを見つけることができません。 – Grudge001

答えて

0

真っ先に

あなたは絶対にもうmysql_queryまたは古いext/mysql機能のいずれかを使用することはできませ必要があります。これらの関数は何年も前から廃止されており、PHP 7から削除されました。

最後の〜4年間でこれらの関数のいずれかをただちに実行した場合、この大きな赤い警告が先頭に表示されますこのようなすべてのページ。この拡張警告

はPHP 5.5.0で廃止されました、そしてそれは、PHP 7.0.0で削除されました。代わりに、MySQLiまたはPDO_MySQL拡張子を使用する必要があります。詳細については、MySQL: choosing an APIガイドとrelated FAQも参照してください。この機能の代替は、次のとおりです。


上記のコードの問題は、非常に多数かつ広範です。あなたが解決しようとしている特定の問題を明確に記述していないので、私は目立つものに一般的に対処します。あなたのシェルで

  1. 引数(のような$dropdown_value)はエスケープする必要があり(see escapeshellarg
  2. ssh2_execはストリームリソースではなく、文字列を返します(read the manual on how to use it
  3. 関数は、値を返す出力
  4. に直接印刷べきではありません

最も重大な問題はおそらくshell2_execを使用していることです。実際にはストリームリソースを返すときに、文字列を返すと明示的に仮定しています。たとえば、freadのようなものを使用して、このストリームリソースから読み込む必要があります。

$stream = ssh2_exec($conn, "/home/oaa/bin/webscript/$script1 \"$dropdown_value\" "); 
$buffer = ""; 
while($data = fread($stream, 8192)) { 
    $buffer .= $data; 
} 
fclose($stream); 
echo $buffer; // this will be a string 

あなたのシェルスクリプトから期待される出力は、それはあなたのHTMLにその出力を処理するために、ここからさらにあなたを助けるためかは不明だがどうあるべきかのフォーマットを説明したことがないので。

+0

あなたの貴重な入力と素早い対応のためにSherifに感謝します。適切な引数を渡すと、2番目のクエリは適切な文字列を出力します。私の質問は例えば; ; 。ドロップダウンリストから2を選択した場合。この値を$ dropdown_value変数に格納します。この結果を達成するために私がどのようなロジックを使用できるかをお聞かせください。 – Grudge001

+0

これはあなたがここで求めている質問とは異なる質問であるようです。 StackOverflowコメントは、新しい質問に追加のスレッドフットプリントを提供することに対応するようには設計されていません。最終的に指定された答えに折りたたまれるべきであるだけのフォローアップの議論。新しい質問がある場合は、新しい質問を投稿することをお勧めします。 – Sherif

関連する問題