php
  • echo
  • 2014-03-25 90 views 1 likes 
    1

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

    Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or 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

    你不能在php标签中有php标签。 – Daedalus

    +0

    您缺少分号,我不知道您的目标是否实际上是“打印”一些PHP代码......但我不这么认为。 – gd1

    回答

    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. 请勿使用@。您应该检查是否设置了该变量。

    $selected = (isset($_POST['geb_tag']) && $_POST['geb_tag'] == $i) ? ' selected' : ''; 
    $Text= "<option value='{$i}'{$selected}>{$i}</option>"; 
    
    +0

    非常感谢!我真的爱Stackoverfolw!它工作顺便。 – user3461336

    +0

    使用三元运算符更清洁(更清晰)。 +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 ? '' : ''),但是如果使用得当,它可以提供帮助。它基本上意味着如果陈述部分是真实的,使用这个。如果它是错误的,请使用其他部分。

    相关问题