0

vps のファイルの値を変更するための php フォームを作成しようとしています。これが私が試しているコードです:

<?php
echo "<form ";  
    $type = (int)$_POST['animal_type'];                  
    echo exec("sed -i 's/animal=*/animal=$type/g' /home/user1234/animals/file.props");
    echo "method='post'>";
    echo '<select name="animal_type" onChange="this.form.submit()">';
    echo '<option value="bat">bat</option>';
    echo '<option value="fish">fish</option>';
    echo '<option value="cat">cat</option>';
    echo '<option value="dog">dog</option>';
    echo '</select>';
 echo '</form>';
?>

コードを再度更新しました。現在、フォームで選択された値で現在の値を上書きする代わりに、file.props の animal= 値に 00 を追加するだけです。

PHPページのフォームの値も変わらず、常にバットのままです。

また、ページを更新しようとするたびに、次のメッセージが表示されます。

sed と exec 以外にこれらの値を変更するためのより良い方法はありますか? または、コードでまだ何か間違ったことをしていますか?

4

1 に答える 1

1

フォームのaction属性は、URIが指定されていることを想定しています。代わりに、文字列を返すexec関数があります。この文字列は有効なURIではないと思います。したがって、htmlのソースでは、次のようになります。

<form action=some string returned by exec>

何が起こっているのかは次のとおりです。

  1. ページが読み込まれます
  2. exec('sed ....')が処理され、結果がhtmlに格納されます
  3. ユーザーが[送信]をクリックすると、アクションで指定されたURIに移動します。この場合、これはexec('sed ....')の結果の最後の行です。

<form action="changeFile.php">別のページに投稿するようにフォームを変更してから、changeFile.phpにロジックを追加してVPSファイルを変更することにより、これを単純化することをお勧めします。

たとえば、changeFile.phpに、次のようなコンテンツを変更するロジックを追加します。

<?php    
exec("sed -i 's/animal=*/animal=$_REQUEST['type']/g' /home/user1234/animals/file.props");
echo 'file modified'
?>

これは、次のようなものを使用してページをそれ自体に投稿することによっても達成できます。

<?php
ini_set('display_errors', 1);
ini_set('error_reporting', E_ALL);

if(!empty($_REQUEST['animal_type'])){
    exec('sed -i '.escapeshellarg('s/animal=*/animal='.$_REQUEST['animal_type'].'/g')." /home/user1234/animals/file.props");
    echo 'File has been updated';
}
?>

<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
    <select name="animal_type">;
        <option value="true">bat</option>;
        <option value="false">fish</option>;
        <option value="cat">cat</option>;
        <option value="dog">dog</option>;
    </select>
    <input type="submit" name="Submit" value="Submit" />
</form>
于 2013-03-06T21:32:09.273 に答える