2010-08-27 51 views
0

好的 - 我有这段代码。PHP - 简单表单无法正确显示的问题

$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 ]网址。

回答

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] . '"> ...

+0

关于#2:它总是让我感到吃惊的是,即使经过了这么多事情畸形,HTML显示的东西很好。 – shamittomar 2010-08-27 19:00:31

+0

好的 - 如果我删除了整个字符串中的所有字符,那么所有内容都会完美显示。但是,当我提交表单时,它告诉我$ _SERVER [PHP_SELF] url无法找到。如果我将字符串更改为“和所有的”,就像我最初那样......表单提交正常,但状态不显示,只显示'.state_selection()'。 – Jason 2010-08-27 19:43:42

+1

@Jason我更新了我的答案....并且你已经完全改变了你的问题,直到我的答案不再适用。如果你有新的问题,你应该真的创建第二个问题。 – 2010-08-27 20:15:43

2

而不是在函数中使用echoreturn的值。

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

使用“的error_reporting(E_ALL)”在你的PHP脚本的顶部(PHP的标签后)将帮助你调试错误。

0

尝试改变'.state_selection().'".state_selection()."