PHP字符串串联错误.有人能纠正吗


PHP string concatenation error. Can anyone correct it?

有人能告诉我我的代码出了什么问题吗?

        $c =  '<div class="desc">';
    if( $_POST['login_post'] == '1') { 
    $username = $_POST['user_login'];
    $password = $_POST['password'];
        $message = log_in_user($username, $password);
    }
    display_message($message); 
    $c .= '<form name="loginform" id="loginform" method="post" action="">
                            <label>Username:</label>
                            <div><input type="text" name="user_login" id="user_username"  value="" size="20"  maxlength="40" tabindex="10" /></div>
                            </div>
                            <div class="group">
                            <label>Password:</label>
                            <div><input type="password" name="password" id="user_password"  value="" size="20"  maxlength="40" tabindex="20" /></div>
                            </div>
                             <input type="hidden" name="login_post" value="1"/>
                            <div class="group">
                            <label></label>
                            <div><input type="submit" name="submit" id="submit" class="bluebutton" value="Log In Now" /><span class="forgotlink"><a href="/forgot-password/">Forgot your password?</a></span></div>
                            </div> 
                </form>
                    </div>';
    $c = str_replace('%value%',5,$c);
    return $c;

display_message($message);函数应该在desc分区内部显示消息。相反,它在desc分区的上方(外部)显示。

我是否错误地连接了PHP代码?如果是,有人能纠正我吗?谢谢

更新:

这是我的display_message函数:

function display_message( $message = false ) {
    if( is_wp_error( $message ) ) {
        echo '<div class="errorMessage"><p>' . $message->get_error_message() . '</p></div>';    
    }
    elseif ($message != '') {
        echo '<div class="successMessage"><p>' . $message . '</p></div>';   
    }
}

display_message()将打印出消息,而不是将其串联。尝试将display_message($message);更改为$c .= htmlspecialchars($message);,它应该会像预期的那样出现在div中。

编辑:由于display_message不仅仅显示消息,因此需要稍微重写;

function format_message( $message = false ) {
    if( is_wp_error( $message ) ) {
        return '<div class="errorMessage"><p>' . $message->get_error_message() . '</p></div>';    
    }
    elseif ($message != '') {
        return '<div class="successMessage"><p>' . $message . '</p></div>';   
    }
}

而串联应该是;

$c .= format_message($message);

尝试将登录结果加载到另一个变量中,然后显示,然后将其隐藏到$message中。

$c =  '<div class="desc">';
if( $_POST['login_post'] == '1') { 
$username = $_POST['user_login'];
$password = $_POST['password'];
    $login_message = log_in_user($username, $password);
}
display_message($login_message); 
$c .= $login_message . '<form name="loginform" id="loginform" method="post" action="">
                        <label>Username:</label>
                        <div><input type="text" name="user_login" id="user_username"  value="" size="20"  maxlength="40" tabindex="10" /></div>
                        </div>
                        <div class="group">
                        <label>Password:</label>
                        <div><input type="password" name="password" id="user_password"  value="" size="20"  maxlength="40" tabindex="20" /></div>
                        </div>
                         <input type="hidden" name="login_post" value="1"/>
                        <div class="group">
                        <label></label>
                        <div><input type="submit" name="submit" id="submit" class="bluebutton" value="Log In Now" /><span class="forgotlink"><a href="/forgot-password/">Forgot your password?</a></span></div>
                        </div> 
            </form>
                </div>';
$c = str_replace('%value%',5,$c);
return $c;

如果函数display_message()有回声,则需要使用输出缓冲来捕获结果并将其添加到$c变量中。否则,它会立即得到回应。

编辑:带输出缓冲:

ob_start();
display_message($message); 
$c .= ob_get_contents();            // adding output to the variable
ob_end_clean();

一个更好的选择可能是让display_message()返回一个字符串,并将该字符串添加到$c中。

根据您的编辑,我只需将功能更改为:

function display_message( $message = false ) {
    if( is_wp_error( $message ) ) {
        return '<div class="errorMessage"><p>' . $message->get_error_message() . '</p></div>';    
    }
    elseif ($message != '') {
        return '<div class="successMessage"><p>' . $message . '</p></div>';   
    }
    return NULL;
}

并执行:

$c .= display_message($message);