回显字符串时出现PHP错误

时间:2014-03-25 19:23:51

标签: php echo

我想回应我的字符串,但我遇到了一些问题。 我得到的错误是:

  

解析错误:语法错误,意外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;}                                                        

2 个答案:

答案 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>";

有几件事:

  1. 你的字符串很杂乱。有更好的方法可以将PHP变量添加到字符串中,以使它们更具可读性。

  2. 不要使用@。您应该检查是否设置了该变量。

  3. $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 ? '' : ''),但如果使用得当,它可以提供帮助。它基本上意味着如果语句部分为真,请使用它。如果它是假的,请使用另一部分。