【问题标题】:Select Option's value Can't send to action page in foreach loop - php在 foreach 循环中选择选项的值无法发送到操作页面 - php
【发布时间】:2014-09-13 00:03:06
【问题描述】:

我在 foreach 循环中有一个选择选项。在每个循环中,我都在创建一个 div 并在 div 内部创建一个选择选项。但问题是当我使用 post 方法发送选择的值时,我无法获得选项的正确发布值。对于 foreach 前 2,3 项按钮正在工作并提交表单,但是当我尝试提交其他项目的表单按钮不起作用时,我无法为选择创建唯一名称,因为我必须将 post 变量分配给操作页面中的变量。

我认为问题在于唯一的选择名称 =“”,我无法给出唯一的名称来选择,因为我需要它在操作页面中的名称,如您所知。我该如何解决这个愚蠢的事情。?

<?php
foreach($a as keywords_arr){
?>

<form name="<?= $keywords_arr["keyword_id"]?>" method="post" action="actions/myaction.php">
    <div class="modal-body">
        <label for="tagler">Bla bla</label>

        <select  name="tagler" style="width: 100%;" class="form-control">
            <?php
            $all_tags = $db->query("SELECT *****");
            $all_tags->setFetchMode(PDO::FETCH_ASSOC);
            $all_tags_arr = $all_tags->fetchAll();

            foreach ($all_tags_arr as $tag) {?>
                <option value="<?= $tag["tag_id"] ?>"><?= $tag["tag_name"] ?></option>
            <?php } ?>
        </select>

        <input type="hidden" name="kw_id_label" value="<?= $keywords_arr["keyword_id"] ?>"/>
        <br><br>
        <span id="result_lbl_"></span>
    </div>
    <div class="modal-footer">
        <button id ="btn_<?= $keywords_arr["keyword_id"] ?>" type="submit">Save</button>
    </div>
</form>

<?php}?>

myaction.php 页面

<?php 

$tag = $_POST["tagler"];
$keyword_id = $_POST["kw_id_label"];


?>

小提琴示例:See example

【问题讨论】:

    标签: php html forms select options


    【解决方案1】:

    您应该将 select 声明为数组,例如 tagler[]

    <select name="tagler[]" style="width: 100%;" class="form-control">
    

    现在在您的 php 文件中使用 print_r($_POST),您将在数组中获得选定的选项。

    【讨论】:

    • 不,不是。我没有向操作页面发送多个值。所以我不需要数组。不要忘记我有 foreach 循环,在这个循环中我有很多选项可供选择。
    • 是的,这就是为什么我建议您声明为数组,因为仅使用名称无法确定您提交的表单。
    【解决方案2】:

    您可以在循环中创建动态选择名称,但除此之外,还可以将隐藏字段创建为数组,这将保存所有生成的选择值的名称。因此在 POST 中,您将读取隐藏值以识别选择框。

    <?php
    foreach($a as keywords_arr){
    ?>
    
    <form name="<?= $keywords_arr["keyword_id"]?>" method="post" action="actions/myaction.php">
      <select  name="tagler<?php echo $keywords_arr["keyword_id"]?>" style="width: 100%;" class="form-control">
      ---
      ---
      <input type = "hidden" name="select_boxes_name[]" value="<?php echo tagler<?php echo $keywords_arr["keyword_id"]?>">
    

    在表单发布后读取 select_boxes_name[] 数组以识别发布的选择框。

    【讨论】:

    • 我尝试了您的答案,但对于页面按钮中较低的项目,请不要提交表单。页面中的表单创建有限制吗?
    • $x = $_POST["select_boxes_name"][0]; $tag = $_POST["$x"]; $keyword_id = $_POST["kw_id_label"];回声 $x; var_dump($tag); var_dump 返回 null
    • 没有这个限制
    • 您的选择框名称可能重复
    【解决方案3】:

    select name="" 的唯一 ID 不是您的问题。我发现的唯一问题是你的最后一个 php 标签太靠近右括号,解释器无法识别它。请尝试在右括号之间创建空格。

    改变这个:

    <?php}?>
    

    到这里:

    <?php } ?>
    

    (更新) 对 myaction.php 使用以下代码:

    <?php
    $post_name = "uniquename";
    $post_len = strlen($post_name);
    
    foreach ($_POST as $key => $value)
    {
        //if the name of the current post begins with "uniquename"
        if (substr($key, 0, $post_len) == "uniquename") 
        {
          $index = $post_len;
    
          $post_id = (int)substr($key, $index);
    
          echo "post_id = " . $post_id . "<br/>key = " . $key;
    
          // do your stuff here...
    
    
          break;
        }
    }
    ?>
    

    在这里,我们过滤 POST 变量,当我们找到正确的变量时,我们从中提取 ID(在我们的例子中,ID 是“唯一名称”之后的数字部分。例如,来自唯一名称5)ID(post_id)将是 5。

    【讨论】:

    • 我试过了,但问题是,最后一个表单的提交按钮。他们没有发送表格
    • 我的测试示例使用转储数据工作。也许您的 SQL 查询没有返回某些选项的唯一 ID。从浏览器中检查您的源代码,以查看“
    • 我检查了一下,我的 ids 唯一的自动增量值。所以它们都有独特的价值。
    • 当你说“当我尝试提交其他项目的表单按钮时”是指从上面的代码或其他代码动态生成的项目?
    • 我在上面问题的末尾添加了小提琴示例
    猜你喜欢
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 2017-07-02
    • 2012-06-19
    • 1970-01-01
    • 2016-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多