PHP - 简单表单无法正确显示的问题

时间:2010-08-27 18:51:56

标签: php html forms

好的 - 我有这段代码。

    $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()。' 如果我将字符串更改为单引号,然后在内部双引号之前删除\ ... 一切都正确显示 - 但是当我尝试提交表单时,它告诉我它找不到$ _SERVER [PHP_SELF]网址。

4 个答案:

答案 0 :(得分:2)

不是在函数中使用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;
}

答案 1 :(得分:2)

    一旦遇到
  1. echo输出,这意味着在您的情况下,即使您将函数作为构建字符串的一部分进行调用,输出echo由它已经输出了。相反,您应该在函数中构建一个字符串并将其返回。

  2. 您不应该在单引号字符串中转义双引号(\"),因为它会以字面斜杠和双引号形式出现。目前,浏览器遇到\"text"\"hidden"作为type属性,并且不知道如何解释它,因此将恢复为默认类型,即文本。

    在换句话说,

    <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 :(得分:0)

在php脚本的顶部使用“error_reporting(E_ALL)”(在php标记之后)将帮助您调试错误。

答案 3 :(得分:0)

尝试将'.state_selection().'更改为".state_selection()."