【问题标题】:Access value of selected option in <select> element with PHP使用 PHP 访问 <select> 元素中选定选项的值
【发布时间】:2015-03-25 13:04:18
【问题描述】:

我正在尝试创建一个简单的表单,该表单将在提交表单时将数据发送到 PHP 脚本。我能够访问所有的文本框值,并且已经成功地为它们中的每一个实现了变量。但是,当我尝试访问表单上组合框的值时,我在 PHP 中收到此错误:

注意:未定义索引:第 15 行 C:\inetpub\wwwroot\krAssignment4\scripts\index.php 中的 cmbProvince

HTML

<form id="orderForm" action="scripts/index.php" method="post" onsubmit="return validateForm()">
        <fieldset id="customerInfo">
            <legend>Customer Information</legend>

            <label for="txtFirstName">Name:</label><br>
            <input type="text" id="txtFirstName" name="txtFirstName"
                   placeholder="First Name" autofocus="true"
                   oninput="formatFirstName()">
            <input type="text" id="txtLastName" name="txtLastName"
                   placeholder="Last Name" oninput="formatLastName()"><br><br>

            <label for="txtAddress">Address:</label><br>
            <input type="text" id="txtAddress" name="txtAddress" placeholder="Address"
                   oninput="formatAddress()"><br>
            <input type="text" id="txtCity" name="txtCity" placeholder="City"
                   oninput="formatCity()">
            <select id="cmbProvince" name="cmbProvince">
                <option value="on">ON</option>
                <option value="qc">QC</option>
                <option value="mb">MB</option>
                <option value="sk">SK</option>
                <option value="ab">AB</option>
                <option value="bc">BC</option>
                <option value="nb">NB</option>
                <option value="nl">NL</option>
                <option value="ns">NS</option>
                <option value="nu">NU</option>
                <option value="pe">PE</option>
                <option value="nt">NT</option>
                <option value="yt">YT</option>
            </select><br>
            <input type="text" id="txtPostalCode" name="txtPostalCode"
                   placeholder="Postal Code" oninput="displayPostalCode()">
            <br><br>
            <!-- Button that will display the order form -->
            <input type="button" id="btnOrder" value="Order"
                   onclick="showOrderInformation()">
        </fieldset><br>

        <fieldset id="orderInfo">
            <legend>Order Information</legend>

            <label for="cmbProduct">Product:</label><br>
            <select id="cmbProduct">
                <option> -- Select -- </option>
                <option>Blackberries</option>
            </select>
            &ensp;@&ensp;
            <input type="number" id="txtQuantity" name="txtQuantity" value="1"
                   step="1" min="1" max="50" oninput="displayTotalTax()"><br><br>
        </fieldset>
        <br><br>

        <!-- Button to submit the form to PHP after validation -->
        <input type="submit" id="btnSubmit" value="Submit">
    </form>

PHP(第 10 - 19 行)

/* Capture the user input from the HTML form */
$strFirstName = $_POST['txtFirstName'];
$strLastName = $_POST['txtLastName'];
$strAddress = $_POST['txtAddress'];
$strCity = $_POST['txtCity'];
$strProvince = $_POST['cmbProvince'];
$strPostalCode = $_POST['txtPostalCode'];

我输入错了吗?还是错过了什么?所有除了组合框都在工作。

如果我需要添加任何其他内容,请告诉我。谢谢!


编辑

当我尝试var_dump($_POST); 时会发生以下情况:

Notice: Undefined index: cmbProvince in C:\inetpub\wwwroot\krAssignment4\scripts\index.php on line 15 
Notice: Undefined index: cmbProduct in C:\inetpub\wwwroot\krAssignment4\scripts\index.php on line 18 
array(6) { ["txtFirstName"]=> string(7) "Kendall" 
["txtLastName"]=> string(4) "Roth" 
["txtAddress"]=> string(19) "22 Resolution Drive" 
["txtCity"]=> string(8) "Millbank" 
["txtPostalCode"]=> string(7) "K2K 2K2" 
["txtQuantity"]=> string(1) "2" }

【问题讨论】:

  • 您是否要在scripts/index.php 文件中获取comobox 值??
  • 这不是完整的表单代码。是否可以显示完整的代码?其中可能有一些东西阻止选择进入服务器
  • 不选择任何选项时是否会发生错误?如果是这样,您必须在您的选择中包含一个预先选择的选项,&lt;option value="" selected="selected"&gt;Choose one&lt;/option&gt;
  • 确保使用 isset($_POST) 验证 $_POST。
  • 尝试使用浏览器控制台中的网络选项卡检查从浏览器发送的内容

标签: php html combobox


【解决方案1】:

您的代码只需稍作改动即可为我工作,试试这个:

    <form id="orderForm" action="scripts/index.php" method="post" onsubmit="return validateForm()">
            <fieldset id="customerInfo">
                <legend>Customer Information</legend>

                <label for="txtFirstName">Name:</label><br>
                <input type="text" id="txtFirstName" name="txtFirstName"
                       placeholder="First Name" autofocus="true"
                       oninput="formatFirstName()">
                <input type="text" id="txtLastName" name="txtLastName"
                       placeholder="Last Name" oninput="formatLastName()"><br><br>

                <label for="txtAddress">Address:</label><br>
                <input type="text" id="txtAddress" name="txtAddress" placeholder="Address"
                       oninput="formatAddress()"><br>
                <input type="text" id="txtCity" name="txtCity" placeholder="City"
                       oninput="formatCity()">
                <select id="cmbProvince" name="cmbProvince">
                    <option value="on">ON</option>
                    <option value="qc">QC</option>
                    <option value="mb">MB</option>
                    <option value="sk">SK</option>
                    <option value="ab">AB</option>
                    <option value="bc">BC</option>
                    <option value="nb">NB</option>
                    <option value="nl">NL</option>
                    <option value="ns">NS</option>
                    <option value="nu">NU</option>
                    <option value="pe">PE</option>
                    <option value="nt">NT</option>
                    <option value="yt">YT</option>
                </select><br>
                <input type="text" id="txtPostalCode" name="txtPostalCode"
                       placeholder="Postal Code" oninput="displayPostalCode()">
                <br><br>
                <!-- Button that will display the order form -->
                <input type="button" id="btnOrder" value="Order"
                       onclick="showOrderInformation()">
            </fieldset><br>

            <fieldset id="orderInfo">
                <legend>Order Information</legend>

                <label for="cmbProduct">Product:</label><br>
             <select id="cmbProduct" name="cmbProduct"> //changes is in this code   
                    <option> -- Select -- </option>
                    <option value="Blackberries">Blackberries</option>
                </select>
                &ensp;@&ensp;
                <input type="number" id="txtQuantity" name="txtQuantity" value="1"
                       step="1" min="1" max="50" oninput="displayTotalTax()"><br><br>
            </fieldset>
            <br><br>

            <!-- Button to submit the form to PHP after validation -->
            <input type="submit" id="btnSubmit" value="Submit">
        </form>

在你的 index.php 中写:

<?php
if(isset($_POST) && !empty($_POST)){
    echo "<pre/>";print_r($_POST);die;
}
?>

输出:-

Array
(
    [txtFirstName] => a
    [txtLastName] => b
    [txtAddress] => c
    [txtCity] => d
    [cmbProvince] => qc
    [txtPostalCode] => e
    [cmbProduct] => Blackberries
    [txtQuantity] => 1
)

【讨论】:

  • 如果您不指定所做的更改,这并不是一个真正有用的答案
  • 我提到过 //changes is in this code. 请在我的代码中查看
  • 谢谢!从您的代码中,我意识到我忘记为产品组合框添加value!另外,PHP 是否需要元素的 name 属性而不是 id
  • 但是,我不确定第一个组合框发生了什么变化,因为我完全没有做任何事情来影响它,但它仍然有效。还是谢谢!
  • @KendallRoth 你是对的。采用 name 属性而不是 id。如果这个答案有帮助,请标记它。它可以帮助其他人找到解决方案。谢谢:)
【解决方案2】:

肯德尔,你是:

  • 您的&lt;select id="cmbProduct"&gt; 缺少名称,并且
  • cmbProduct 选项也缺少值

输入“禁用选择”是一种很好的做法,因为人们将无法选择“选择”选项:)

你的代码

<select id="cmbProduct">
   <option> -- Select -- </option>
   <option>Blackberries</option>
</select>

正确的代码

<select id="cmbProduct" name="cmbProduct>
  <option value="select" disabled selected> -- Select -- </option>
  <option value="blackberries">Blackberries</option>
</select>

【讨论】:

  • 默认选项不需要值。
  • 感谢 schlickenschleider 的评论(尽管 5 年后;))!我在标记答案的 cmets 中问了类似的问题,但这确实更简洁地说明了。
猜你喜欢
  • 2011-11-14
  • 2013-06-24
  • 2021-04-10
  • 2017-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-23
  • 1970-01-01
相关资源
最近更新 更多