【问题标题】:PHP form option fields will not display current value from filePHP 表单选项字段不会显示文件中的当前值
【发布时间】:2013-08-20 13:18:15
【问题描述】:

我一直在研究一个 PHP 表单,它可以更改我服务器上文件中的值。表单正确更改了值,但我需要表单的 <option value="round" <?php if($shape == 'round'){?>selected="selected"<?php }?>>Round</option> 部分始终显示为文件中设置的当前值,目前没有。

#file contents (the lines the values are on changed on a regular basis)
size=large
color-name=red
shape=round
height=short
weight=heavy

<?php

$file = "/home/user/color.props";
$contents = file($file, FILE_SKIP_EMPTY_LINES);

foreach($contents as $line) {
    list($option, $value) = explode('=', $line);
    if ($option == 'color-name') {
        $color_name = $value;
    } elseif ($option == 'shape') {
        $shape = $value;
    }
}

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

?>

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

【问题讨论】:

  • 您也可以粘贴文件的内容吗?
  • 完成。我正在使用: $color_name = explode("=", trim($contents[2]));但是文件中的值所在的行总是在变化,所以它工作得不是很好。
  • 您像访问数组一样访问$color_name,但根据您的代码,我认为它不会包含多个值,因此,$color_name[1] 将始终为空...

标签: php forms sed exec


【解决方案1】:

我仍然不清楚你到底想要完成什么。您当前的代码仅保存从文件中读取的最后一个 'color-name''shape' 对象。然后它可以通过进行此更改来配置selected 选项:

<option value="red" <?php if($color_name == 'red'){?>selected="selected"<?php }?>>Red</option>;
<option value="blue" <?php if($color_name == 'blue'){?>selected="selected"<?php }?>>Blue</option>;
<option value="green" <?php if($color_name == 'green'){?>selected="selected"<?php }?>>Green</option>;
<option value="purple" <?php if($color_name == 'purple'){?>selected="selected"<?php }?>>Purple</option>;

注意:您在文件中读取的方式会在变量末尾附加回车符/换行符...例如,我的 $color_name 在字符串末尾包含两个额外的十六进制值: x0dx0a

编辑 #2:尝试像这样制作表单:

<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
    <select id="color_choice">
        <option id="round">Round</option>
        <option id="square">Square</option>
    </select>
    <input type="submit" name="Submit" value="Submit" />
</form>
<script>
    var option = document.getElementById("color_choice");
    option.options['<?php echo $shape ?>'].selected = true;
</script>

我很确定这会起作用,我所做的更改是:
1) 使用 javascript 而不是 php 来更改所选
2) 使用id 属性而不是valuename
3) 在表单末尾添加&lt;script&gt;标签(如果之前可能不起作用)

您必须根据从文件中提取的值类型来更改表单和脚本...但您应该能够弄清楚如何处理。

【讨论】:

  • 我将尝试澄清我要完成的工作:表单编辑 color.props 值中的值,这非常有效。我希望选项值字段始终反映 color.props 文件中的实际(当前)值。如果我将其更改为“蓝色”,表单上的选项值字段应显示“蓝色”。目前,无论 color.props 文件中的值是什么,表单字段选项都会重置为第一个值“red”。
  • @jcrane 尝试在文件更改后再次运行此行:$contents = file($file, FILE_SKIP_EMPTY_LINES);
  • 为安全起见,请将其放在对文件进行更改的任何代码行之后。
  • 我试了一下,表单字段仍然没有反映文件中的值。
  • @jcrane 请在我的帖子中查看我的注释。 $color_name 在值的末尾包含回车符。请使用substr 删除$color_name 的最后两个字符,看看是否有帮助。如果您想仔细检查变量中包含的确切值,请致电echo bin2hex($color_name)。它将打印字符的十六进制值,您可以与 this chart 进行交叉引用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-20
  • 1970-01-01
  • 2012-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多