php
  • echo
  • 2014-03-25 40 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 ? '' : ''),但是如果使用得當,它可以提供幫助。它基本上意味着如果陳述部分是真實的,使用這個。如果它是錯誤的,請使用其他部分。

    相關問題