3

在大量帮助下,我创建了一个脚本,可以在我的 VPS 上编辑文件。它一直工作得很好,但我有一个问题让我完全难过。当我需要将文件中的值调整为 0 时,它将不起作用。value="3"除了 0 ( ) 之外,几乎任何其他值都可以使用(即value="0")。我很困惑。我需要让脚本将 color= 值更改为color=0我不知道为什么 0 不起作用,但任何其他数字或字母都可以。这是我的代码:

<?php
//Color
    $color = explode("=", trim($contents[1]));

    if(isset($_REQUEST['difficulty_choice'])){
        exec('sed -i '.escapeshellarg('s/color=.*/color='.$_REQUEST['color_choice'].'/g')." /home/user/color.props");
        echo 'Color choice has been updated';
    }

?>


<?php echo $contents[1]; //Color ?>
<form method="get" action="update.php">
    <select name="color_choice">;
        <option value="0" <?php if($color[1] == '0'){?>selected="selected"<?php }?>>Red</option>;
        <option value="1" <?php if($color[1] == '1'){?>selected="selected"<?php }?>>Blue</option>;
        <option value="2" <?php if($color[1] == '2'){?>selected="selected"<?php }?>>Black</option>;
        <option value="3" <?php if($color[1] == '3'){?>selected="selected"<?php }?>>Yellow</option>;
    </select>
    <input type="submit" name="Submit" value="Submit" />
</form>

文件内容:

# The color file
color=1

更新:我用 isset 切换了 !empty 并且它有效!

4

2 回答 2

4

在 php 中,当$val = "0",empty($val)计算为true. 这是出乎意料的,但这就是 php 的方式。php 文档在“返回值”部分为empty()提供了一个被视为空的值列表。这是一个小测试脚本来证明它:

<?php
$val = "0";
if (empty($val)) {
        echo $val . " is empty!\n";
} else {
        echo $val . " is not empty.\n";
}

$val = "1";
if (empty($val)) {
        echo $val . " is empty!\n";
} else {
        echo $val . " is not empty.\n";
}
?>

输出是:

0 is empty!
1 is not empty.

考虑使用另一种检查,例如===运算符而不是empty().

于 2013-08-03T20:50:03.643 回答
0

如果要检查整数,则在比较整数时不应使用引号。而是做这样的事情。

<?php
$cmpColor = intval($color[1]); //Make sure to compare with an integer. This way you can use === to compare (because $cmpColor and 0,1,2 or 3 are of the same type as well)
?>

<select name="color_choice">;
    <option value="0" <?php if($cmpColor === 0){?>selected="selected"<?php }?>>Red</option>;
    <option value="1" <?php if($cmpColor === 1){?>selected="selected"<?php }?>>Blue</option>;
    <option value="2" <?php if($cmpColor === 2){?>selected="selected"<?php }?>>Black</option>;
    <option value="3" <?php if($cmpColor === 3){?>selected="selected"<?php }?>>Yellow</option>;
</select>
于 2013-08-03T21:11:02.683 回答