0

此表单的目的是更新我服务器上的文件,并在完成后将更新后的更改反映在表单本身上。这是我在一些用户的帮助下获得的当前代码:

<?php
    $file = "/var/www/html/colors/color.choices";
    $contents = file($file, FILE_SKIP_EMPTY_LINES);
    $color = explode("=", $contents[0]);
    $size = explode("=", $contents[1]);
    $shape = explode("=", $contents[2]);

    if(!empty($_REQUEST['color_choice'])){
        exec('sed -i '.escapeshellarg('s/color=.*/color='.$_REQUEST['color_choice'].'/g')." /var/www/html/colors/color.choices");
        echo 'File color choice has been updated';
    }
    if(!empty($_REQUEST['size_choice'])){
        exec('sed -i '.escapeshellarg('s/size=.*/size='.$_REQUEST['size_choice'].'/g')." /var/www/html/colors/color.choices");
        echo 'File size choice has been updated';
    }
    if(!empty($_REQUEST['shape_choice'])){
    exec('sed -i '.escapeshellarg('s/shape=.*/shape='.$_REQUEST['shape_choice'].'/g')." /var/www/html/colors/color.choices");
    echo 'File shape choice has been updated';
    }

?>

<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
    <select name="color_choice">;
        <option value="red" <?php if($color[1] == 'red'){?>selected="selected"<?php }?>>red</option>;
        <option value="black" <?php if($color[1] == 'black'){?>selected="selected"<?php }?>>black</option>;
    </select>
    <input type="submit" name="Submit" value="Submit" />
</form>

<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
    <select name="size_choice">;
        <option value="large" <?php if($size[1] == 'large'){?>selected="selected"<?php }?>>large</option>;
        <option value="small" <?php if($size[1] == 'small'){?>selected="selected"<?php }?>>small</option>;
    </select>
    <input type="submit" name="Submit" value="Submit" />
</form>

<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
    <select name="shape_choice">;
        <option value="round" <?php if($shape[1] == 'round'){?>selected="selected"<?php }?>>round</option>;
        <option value="square" <?php if($shape[1] == 'square'){?>selected="selected"<?php }?>>square</option>;
    </select>
    <input type="submit" name="Submit" value="Submit" />
</form>

更新:我已经调整了代码,似乎几乎可以正常工作。最后一个选项现在总是按预期工作。因此,在这种情况下,“形状”值现在可以在表单上完美运行。然而,“颜色”和“大小”选项确实会更新 color.choices 文件,但更新不会反映在表单本身上。为什么最后一个选项现在可以在表单上使用,而前两个选项却不行?

4

1 回答 1

0

你可以这样做。我给你两个选择。

第一种选择是使用file();

<?php
    $file = "/var/www/html/colors/color.choices";
    $contents = file($file, FILE_SKIP_EMPTY_LINES);
    $color = explode("=", $contents[0]);

    if(!empty($_REQUEST['color_choice'])){
        exec('sed -i '.escapeshellarg('s/color=.*/color='.$_REQUEST['color_choice'].'/g')." /var/www/html/colors/color.choices");
        echo 'File color choice has been updated';
    }
?>

<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
    <select name="color_choice">;
        <option value="red" <?php if($color[1] == 'red'){?>selected="selected"<?php }?>>red</option>;
        <option value="blue" <?php if($color[1] == 'blue'){?>selected="selected"<?php }?>>blue</option>;
        <option value="black" <?php if($color[1] == 'black'){?>selected="selected"<?php }?>>black</option>;
        <option value="orange" <?php if($color[1] == 'orange'){?>selected="selected"<?php }?>>orange</option>;
    </select>
    <input type="submit" name="Submit" value="Submit" />
</form>

因此,如果您的 color.choices 文件具有以下这些选项。然后你的数组将从 0,1,2 开始,就像我在上面用于你的颜色一样,例如$contents[0]颜色线。$content[1]将是形状线。等等,然后你仍然需要将它们分解成一个新的变量。

color=blue
shape=round
size=large

第二个选项推荐)你可以这样做。

我要做的就是把它变成一个ini文件。您已经在以 ini 的形式使用该文件,那么为什么不让使用这些值更容易呢?

重命名color.choicescolor_choices.ini

然后你的代码将是这样的。

<?php
    $attr = parse_ini_file("/var/www/html/colors/color_choices.ini");
    $color = $attr["color"];
    $size = $attr["size"];
    $shape = $attr["shape"];

    if(!empty($_REQUEST['color_choice'])){
        exec('sed -i '.escapeshellarg('s/color=.*/color='.$_REQUEST['color_choice'].'/g')." /var/www/html/colors/color_choices.ini");
        echo 'File color choice has been updated';
    }
?>

<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
    <select name="color_choice">;
        <option value="red" <?php if($color == 'red'){?>selected="selected"<?php }?>>red</option>;
        <option value="blue" <?php if($color == 'blue'){?>selected="selected"<?php }?>>blue</option>;
        <option value="black" <?php if($color == 'black'){?>selected="selected"<?php }?>>black</option>;
        <option value="orange" <?php if($color == 'orange'){?>selected="selected"<?php }?>>orange</option>;
    </select>
    <input type="submit" name="Submit" value="Submit" />
</form>

现在 color_choices.ini 内部看起来像这样。

[attributes]
color=blue
shape=round
size=large

使用 ini 文件会更好,因为这样您就可以使用key名称而不必知道它们在文件中的顺序。解析后,它已经是数组的形式,因此您可以调用$attr["color"]or$attr["shape"]等​​,它们在 color_choice.ini 文件中的顺序无关紧要。您可以根据需要添加任意数量的属性。还要注意 form 变量也发生了变化$color

例如

echo $attr["size"]; //value will be large
于 2013-06-22T13:48:47.583 回答