我正在尝试创建一个php表单来更改我的vps文件中的值。这是我正在尝试的代码:
<?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>';
?>
我再次更新了我的代码。目前它只是将00添加到file.props中的animal = value,而不是使用表单中选择的值覆盖当前值。
php页面上的表单中的值也永远不会改变,并始终保持为bat。
每当我尝试刷新页面时,我也会收到此消息:“要显示此页面,Firefox必须发送重复之前执行的任何操作(例如搜索或订单确认)的信息。”
除了sed和exec之外,还有更好的方法来更改这些值吗?或者我在代码中仍然做错了什么?
答案 0 :(得分:1)
表单的action attribute需要指定URI。相反,有一个exec函数返回一个字符串。我假设这个字符串不是有效的URI。所以在html的源代码中它看起来像这样:
<form action=some string returned by exec>
发生的事情如下:
我建议您通过将表单更改为发布到另一页<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>