【问题标题】:Using POST to get select option value from HTML form使用 POST 从 HTML 表单中获取选择选项值
【发布时间】:2016-08-12 05:46:23
【问题描述】:

我有一个表格,我可以在其中获得一些不同的信息。但是后来我有一个带有多个选项的 Select,我希望能够以 1 或 0 / true 或 false 将其发送到数据库。但它不起作用。到目前为止,这是我的代码:

              <select name="multipleSelect[]" multiple>
                <option value="" disabled selected>Choose your option</option>
                <option name="esea" value="esea">ESEA</option>
                <option name="faceit" value="faceit">FaceIT</option>
                <option name="matchmaking" value="matchmaking">Matchmaking</option>
              </select>
              <label>What are you looking to play?</label>

这是我的 php:

$esea = 0;
$faceit = 0;
$matchmaking = 0;
foreach ( $_POST['multipleSelect'] as $value ) {
    if ( $value == 'esea' )        { $esea = 1;       }
    if ( $value == 'faceit' )      { $faceit= 1;      }
    if ( $value == 'matchmaking' ) { $matchmaking= 1; }
}   


  // Sätt in dataN
  $sql = "INSERT INTO users ( steamid, profilename, profileurl, avatar, region, age, ranks, esea, faceit, matchmaking, textarea1 ) VALUES ( 
    '{$mysqli->real_escape_string($_POST['steamid'])}', 
    '{$mysqli->real_escape_string($_POST['profilename'])}',
    '{$mysqli->real_escape_string($_POST['profileurl'])}',
    '{$mysqli->real_escape_string($_POST['avatar'])}',
    '{$mysqli->real_escape_string($_POST['region'])}',
    '{$mysqli->real_escape_string($_POST['age'])}',
    '{$mysqli->real_escape_string($_POST['ranks'])}',
    $esea,
    $faceit,
    $matchmaking',
    '{$mysqli->real_escape_string($_POST['textarea1'])}')";
  $insert = $mysqli->query($sql);

我知道这段代码不起作用,但我不知道该怎么做才能使它起作用。我不想发送 1 或 0,这取决于是否选择了替代方案。

【问题讨论】:

    标签: php html mysql select option


    【解决方案1】:

    用于多选下拉列表的&lt;select&gt; 必须是一个数组,由name="NameThatMakesSense[]" 定义

    <select name="NameThatMakesSense[]" multiple>
    

    然后,这将返回一个名为 $_POST['NameThatMakesSense'] 的字段,该字段本身是一个包含 1 个或多个值的数组,指示下拉列表中的哪些项目被选中。来自&lt;option&gt; 标签的value="" 属性

    然后您需要预处理 NameThatMakesSense 数组以从多选下拉列表中获取实际选择的值。

    $esea = 0;
    $esea = 0;
    $esea = 0;
    foreach ( $_POST['NameThatMakesSense'] as $value ) {
        if ( $value == 'esea' )        { $esea = 1;       }
        if ( $value == 'faceit' )      { $faceit= 1;      }
        if ( $value == 'matchmaking' ) { $matchmaking= 1; }
    }    
    
    $sql = "INSERT INTO users 
                 ( profilename, profileurl, avatar, region, 
                   age, esea, faceit, matchmaking, textarea1 ) 
            VALUES ( 
    
    '{$mysqli->real_escape_string($_POST['profilename'])}',
    '{$mysqli->real_escape_string($_POST['profileurl'])}',
    '{$mysqli->real_escape_string($_POST['avatar'])}',
    '{$mysqli->real_escape_string($_POST['region'])}',
    '{$mysqli->real_escape_string($_POST['age'])}',
    '{$mysqli->real_escape_string($_POST['ranks'])}',
    $esea,
    $faceit,
    $matchmaking,
    '{$mysqli->real_escape_string($_POST['textarea1'])}')";
    

    【讨论】:

    • 我如何收到这个帖子?我还用'{$mysqli->real_escape_string($_POST['esea'])}', '{$mysqli->real_escape_string($_POST['faceit'])}', '{$mysqli->real_escape_string( $_POST['matchmaking'])}',
    • 感谢您帮助 RiggsFolly! :)
    • 我应该在这里输入什么:'{$mysqli-&gt;real_escape_string($_POST[''])}', 以获取 $val?
    • @Tim 我已经修改了我的问题,包括如何处理从多选下拉列表中收到的数据
    • 我已经用你的答案更新了我的问题,但现在它根本不起作用。它没有将我的任何数据发送到数据库。
    【解决方案2】:

    您的select html 标记需要具有name 属性才能使表单 onSubmit 发送到“后端”。

    像这样:

    <select name="enterNameThatMakesSense" multiple>  // <----- HERE
      <option value="" disabled selected>Choose your option</option>
      <option name="esea" value="1">ESEA</option>
      <option name="faceit" value="1">FaceIT</option>
      <option name="matchmaking" value="1">Matchmaking</option>
    </select>
    <label>What are you looking to play?</label>
    

    【讨论】:

    • 如果你真的想要 $_POST 中的多个值,你需要一个数组:enterNameThatMakesSense[]
    • 但是&lt;option&gt;标签没有name属性
    • 感谢 Pedro 抽出宝贵时间提供帮助! :)
    猜你喜欢
    • 2021-11-26
    • 2013-06-12
    • 2022-07-16
    • 2017-01-05
    • 1970-01-01
    • 2011-03-29
    • 1970-01-01
    • 2016-07-28
    相关资源
    最近更新 更多