PHP - проблемы с простой формой не отображаются правильно - PullRequest
0 голосов
/ 27 августа 2010

Хорошо, у меня есть этот код.

    $formBlock = "<form method=\"post\" action=\"$_SERVER[PHP_SELF]\">
    <p>First Name: <input name=\"first\" type=\"text\"  size=13 maxlength=25 /></p>
   <p>Last name: <input name=\"last\" type=\"text\" size=13 maxlength=25 /></p>
    <p>City:<input name=\"city\" type=\"text\" size=25 maxlength=50 /></p>
    <p>State: '.state_selection().' </p>
    <p>Email:<input name=\"email\" type=\"text\" size=50 maxlength=75 /></p>
    <p>Birthday:<input name=\"bday\" type=\"text\" size=10 maxlength=10 />(ex 1982-06-26)</p>
    <p><input type=\"hidden\" name=\"op\" value=\"ds\" /></p>
    <p><input type=\"submit\" name=\"submit\" value=\"Add Contact\" /></p>
    </form>";

Однако - .state_selection (). ' часть просто приходит с текстом '.state_selection ().' Если я изменю строку на одинарные кавычки, а затем уберу \ перед внутренними двойными кавычками ... все отображается правильно - но когда я пытаюсь отправить форму, он говорит мне, что не может найти URL $ _SERVER [PHP_SELF]

Ответы [ 4 ]

2 голосов
/ 27 августа 2010
  1. echo выводит, как только он встречается, что означает, что в вашем случае, даже если вы вызываете свою функцию как часть построения строки, вывод echo под его уже будет вывод. Вместо этого вы должны построить строку в своей функции и вернуть ее.

  2. Вы не должны избегать двойных кавычек (\") внутри одной строки в кавычках, так как она будет выглядеть как буквальная косая черта и двойная кавычка. В настоящее время браузер обнаруживает \"text" или \"hidden" в качестве атрибута типа и не знает, как его интерпретировать, поэтому возвращается к типу по умолчанию - тексту.

    Другими словами,

    <p><input type=\"hidden\" name=\"op\" value=\"ds\" /></p>
    должно быть

    <p><input type="hidden" name="op" value="ds" /></p>
  3. Строки в одинарных кавычках не оценивают переменные, поэтому $_SERVER[PHP_SELF] будет восприниматься буквально. Вместо этого вам нужно объединить его вне вашей строки, чтобы его можно было оценить:

    $formBlock = '<form method="post" action="' . $_SERVER[PHP_SELF] . '"> ...
2 голосов
/ 27 августа 2010

Вместо использования echo в функции, return значения.

function state_selection()
{
    $str = '<select name="state">';
    $states = array(
            'Alabama', 'Alaska', 'Arizona', 'Arkansas', 'California', 'Colorado', 'Connecticut', 'Delaware', 'District of Columbia', 'Florida', 'Georgia', 'Hawaii', 'Idaho', 'Illinois', 'Indiana', 'Iowa', 'Kansas', 'Kentucky', 'Louisiana', 'Maine', 'Maryland', 'Massachusetts', 'Michigan', 'Minnesota', 'Mississippi', 'Missouri', 'Montana', 'Nebraska', 'Nevada', 'New Hampshire', 'New Jersey', 'New Mexico', 'New York', 'North Carolina', 'North Dakota', 'Ohio', 'Oklahoma', 'Oregon', 'Pennsylvania', 'Rhode Island', 'South Carolina', 'South Dakota', 'Tennessee', 'Texas', 'Utah', 'Vermont', 'Virginia', 'Washington', 'West Virginia', 'Wisconsin', 'Wyoming'
        );
    foreach ($states as $state_name)
    {
        $str .= '<option value="'.$state_name.'">'.$state_name.'</option>';
    }
    $str .= '</select>';

    return $str;
}
0 голосов
/ 28 августа 2010

Попробуйте изменить '.state_selection().' на ".state_selection()."

0 голосов
/ 27 августа 2010

Использование «error_reporting (E_ALL)» вверху вашего php-скрипта (после тегов php) поможет вам отладить ошибки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...