Ошибка конкатенации строк PHP. Кто-нибудь может это исправить? - PullRequest
0 голосов
/ 25 марта 2012

Может кто-нибудь сказать мне, что не так с моим кодом?

        $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 ]

2 голосов
/ 25 марта 2012

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 голос
/ 25 марта 2012

попробуйте загрузить результат входа в другую переменную, затем отобразить его, после чего сконцентрировать его в $ 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;
1 голос
/ 25 марта 2012

Если ваша функция 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); 
...