我想回应我的字符串,但我遇到了一些问题。 我得到的错误是:
解析错误:语法错误,意外T_ENCAPSED_AND_WHITESPACE,期待T_STRING或T_VARIABLE或T_NUM_STRING
代码:
for($i = 1; $i <= 31; $i++){
$Text="<option value='".$i."'<?php if(@$_POST['geb_tag'] == '".$i."') { ?> selected <?php ;}?>>".$i."</option>";
echo $Text;}
答案 0 :(得分:6)
您在尝试字符串连接时混入了PHP标记。如果声明出来,请把它带到自己的声明中。然后将该变量添加到您的字符串中:
$Text="<option value='".$i."'<?php if(@$_POST['geb_tag'] == '".$i."') { ?> selected <?php ;}?>>".$i."</option>"
变为:
$selected = (@$_POST['geb_tag'] == $i) ? ' selected' : '';
$Text="<option value='".$i."'" . $selected .">".$i."</option>";
有几件事:
你的字符串很杂乱。有更好的方法可以将PHP变量添加到字符串中,以使它们更具可读性。
不要使用@
。您应该检查是否设置了该变量。
$selected = (isset($_POST['geb_tag']) && $_POST['geb_tag'] == $i) ? ' selected' : '';
$Text= "<option value='{$i}'{$selected}>{$i}</option>";
答案 1 :(得分:1)
有很多方法可以做到这一点,所以还有一个方法:printf()
。它是一种旧式的重新组合字符串(将部分分开)的方法,可以提高可读性。
# a descriptive variable name can improve readability
$posted_value = "";
if( isset( $_POST['geb_tag'] ) ) $posted_value = $_POST['geb_tag'];
for( $i = 0; $i <= 31; $i++ ) {
printf(
"<option value='%s'%s>%s</option>",
$i,
($posted_value == $i) ? ' selected' : '',
$i
);
}
想法是标有%s
的字符串部分将被适当的参数替换。连接字符串没有错,但它可能会变得混乱。 printf()
有一个sprintf()
变体,它以字符串形式返回所有内容,以防您以后想要显示它。
最后,有许多程序员不喜欢(statement ? '' : '')
,但如果使用得当,它可以提供帮助。它基本上意味着如果语句部分为真,请使用它。如果它是假的,请使用另一部分。