PHP字符串连接错误。任何人都可以纠正吗?

时间:2012-03-24 21:50:23

标签: php string-concatenation

有人可以告诉我我的代码有什么问题吗?

        $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 div中显示消息。相反,它显示在desc div的上方(外部)。

我是否错误地连接了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>';   
    }
}

3 个答案:

答案 0 :(得分:2)

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);

答案 1 :(得分:1)

如果您的函数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); 

答案 2 :(得分:1)

尝试将登录结果加载到另一个变量中,然后显示它,然后将其集中到$ 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;