【问题标题】:$_POST not working with <select>$_POST 不适用于 <select>
【发布时间】:2014-03-14 20:30:47
【问题描述】:

由于某种原因,我可以使 $_POST 与输入完美配合,但不能与 select 语句配合使用。这是我的代码:


registration.php

<form class="form-horizontal" action="results.php" method="post">

     <div class="form-group">
         <label class="col-md-4 control-label" for="user_type">Type</label>
         <div class="col-md-4">
            <select id="user_type" name='user_type' class="form-control">
                <option selected="" value="<?php if (isset($user_type)) { echo 'admin'; } ?>">Faculty</option>
                <option value="<?php if (isset($user_type)) { echo 'registeredUser'; } ?>">Student</option>
            </select>
         </div>
     </div>

     <!-- Submit Button -->
     <div class="form-group">
       <div class="col-md-12">
         <button id="submit" name="submit" class="btn btn-primary center-block"> <span class="k-icon k-si-plus"></span>Submit</button>
       </div>
     </div>

</form>

结果.php

    if ($_SERVER["REQUEST_METHOD"] == "POST") 
    {
        // Setting the form inputs to variables
        $first_name = trim($_POST["first_name"]);
        $last_name = trim($_POST["last_name"]);
        $email_address = trim($_POST["email_address"]);

        if (isset($_POST["submit"])) {
            $user_type = $_POST['user_type'];
            echo $user_type . '<br><br>';
        }
        echo $first_name . '<br><br>';
        echo $last_name . '<br><br>';
        echo $email_address . '<br><br>';
    }

输出:

亚历克斯

科里

alex@mydomain.com


关于为什么这个 $_POST['user_type']; 的任何想法不工作?

【问题讨论】:

  • 你的 HTML 中有 吗?我建议你做 var_dump($_POST);查看 $_POST 实际包含的内容。
  • 确定 user_type 在 html 中有任何值吗?
  • 好吧,我确实尝试过没有值中的 php,又名: 但仍然没有输出。
  • 我猜我会说在您的注册脚本中没有设置变量 $user_type 。由于未设置,因此您的两个选项的值设置为空字符串,这可以解释为什么该变量在 results.php 中为空。尝试使用浏览器检查器检查您的选项是否实际包含一个值。
  • 这是一个显示检查器结果的屏幕截图。 imageshack.us/a/img546/631/ujpu.png 我觉得 $user_type 变量不起作用的奇怪之处在于,为什么它们不能在 语句中起作用?

标签: php html forms select post


【解决方案1】:

假设您发布的是registration.php 的完整内容,那么问题是您的每个user_name 选项的值都包含一个空字符串。

您的脚本生成的实际 HTML 是:

<select id="user_type" name='user_type' class="form-control">
    <option selected="" value="">Faculty</option>
    <option value="">Student</option>
</select>

发生这种情况是因为您的registration.php 脚本在将adminregisteredUser 的值添加到&lt;option&gt; 标记之前检查是否设置了PHP 变量$user_data

如果我们扩展您的代码,您会发现if 条件永远不会触发:

<option selected="" value="<?php 
    if (isset($user_type)) {
        // This will never be fired because the PHP variable $user_data is not set.
        echo 'admin'; 
    } 
    // The result is that nothing is echoed so the HTML reads value=""
 ?>">Faculty</option>

要修复,然后删除条件检查:

<select id="user_type" name='user_type' class="form-control">
    <option selected="selected" value="admin">Faculty</option>
    <option value="registeredUser">Student</option>
</select>

或者在脚本开头设置$user_data

<?php $user_data = true; ?>
<form class="form-horizontal" action="results.php" method="post">

   <div class="form-group">
   ...

但我认为您真正想要实现的是确定在您的表单中选择的这些选项中的哪一个。如果是这种情况,您应该检查 $user_type 是否已设置,如果它的值与选项值匹配,则将该选项标记为选中。

<select id="user_type" name='user_type' class="form-control">
    <option <?php 
                if (isset($user_type) && $user_type === 'admin') {
                    echo 'selected="selected" '; 
                } 
            ?>value="admin">Faculty</option>
    <option <?php 
                if (isset($user_type) && $user_type === 'registeredUser') { 
                    echo 'selected="selected" '; 
                } 
             ?>value="registeredUser">Student</option>
</select>

【讨论】:

    【解决方案2】:

    我在你的代码中看不到提交按钮,它上面有 name='submit' 吗? 此外,如果您使用 chrome,请检查网络中的帖子(开发人员工具)以查看是否发布了“提交”

    【讨论】:

      【解决方案3】:

      发生这种情况是因为在执行 registration.php 时,select id="user_type" 下的两个选项都没有值。

      <option value="<?php if (isset($user_type)) { echo 'registeredUser'; } ?>">Student</option>
      

      如果$user_type 未定义,则两个选项的值都将为""(空字符串)- 我认为会发生这种情况。

      【讨论】:

      • 所以你是在暗示...?
      • 这取决于您要达到的目标。您可以在registration.php 中定义$user_type(以便isset($user_type) 将评估为true)或更改代码为这些选项设置一些备用值,例如:&lt;option value="&lt;?php echo isset($user_type) ? 'registeredUser' : 'default-value-goes-here' ; ?&gt;"&gt;
      • 很好地将我的评论翻译成答案 ;-)
      【解决方案4】:

      这是答案

      这个问题与 PHP 有一点关系,也与 HTML 有一点关系。 PassKit 很好地解释了我最终在我的代码中使用的 PHP 以使其正常工作。看看他关于 PHP 的回答和我关于 HTML 的回答。

      开头的

      标签需要一个“id”属性来匹配

      【讨论】:

      • Urmm...如果您在没有我建议的 PHP 更改的情况下尝试您的解决方案(也包含在您的答案中),您会发现该解决方案与表单 ID 的省略无关.如果您需要说服力,请尝试运行此处发布的代码ideone.com/hgaJeI
      • 嘿伙计,我根本没有记下你的答案。我所知道的是,当我使用您的代码时,没有 HTML 表单 ID,它继续不输出到 results.php 页面。我不知道你为什么要否决我的答案......它仍然是正确的。就 PHP 而言,您的也是如此。谢谢您的帮助。如果您喜欢,我可以按照我在这里回答的方式更改一些技术细节。我不是说你错了。我只是说什么对我有用。很抱歉!
      • 我并不是说你'放下'我的回答。该站点的存在是为了帮助人们解决编码问题。您的答案的编写方式暗示只需添加表单 ID 即可解决问题。这是不正确的,因此投反对票和评论是为了让可能偶然发现这个问题的其他用户知道接受的答案不会解决问题。尝试从您的问题中获取您的原始代码,并仅在表单中添加一个 ID - 您会发现它完全没有区别,因为您的 PHP 仍会将一个空字符串写入您的 value 标签的 value 属性
      【解决方案5】:

      在您的表单中使用submit 按钮或使用if($_POST)查看帖子

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-12-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-29
        • 2015-04-05
        • 2018-07-05
        • 1970-01-01
        相关资源
        最近更新 更多