表单传递选择到下一页

Posted

技术标签:

【中文标题】表单传递选择到下一页【英文标题】:form pass selected to next page 【发布时间】:2015-07-24 15:23:16 【问题描述】:

我有一个从我的数据库中获取数据的选择器。

当我选择一项并按下Add to list时,它会生成一个表格:

这一切的代码是:

    <!--Selector-->
    <?php

// Get name and id data from the db. In an assoc array

$results = $database->Selector();
echo "<form name='form' method='POST' id='selector'>";
echo "<select name='train_name' id='train_name' multiple='multiple'>";

// Loop trough the results and make an option of every train_name

foreach($results as $res) 
    echo "<option value=" . $res['train_name'] . ">" . $res['train_name'] . "</option>";


echo "</select>";
echo "<br />" . "<td>" . "<input type='submit' name='Add' value='Add to list'/>" . "</td>";
echo "</form>";

if (isset($_POST["train_name"])) 

    // Get all data from database, in an assoc array

    $results = $database->getAllAssoc();

    // Make table headers

?>
            <div id="train_select_table">
            <form name="selector" method="post" action="customer_list.php?user_id=<?php
    echo $_SESSION['user_id'] ?>">
                <table>
                    <tr>
                        <th>Train name</th>
                        <th>Number of bogies</th>
                        <th>Number of axles</th>
                        <th>Delete</th>
                        <th>More info</th>
                        <th>Check</th>
                    <!--Only for admins (later!)-->
                    <!--<th>XML</th>
                        <th>SQL</th>    -->
                    </tr>
                <div id="looprow">
                    <?php
    foreach($results as $res) 

        // Loop trough results, generate a tablerow every time

?>
                    <tr>     
                        <td name="train_name"><?php
        echo $res['train_name'] ?></td>
                        <td><?php
        echo $res['number_of_bogies'] ?></td>
                        <td><?php
        echo $res['number_of_axles'] ?></td>
                        <td><a href="remove_from_table.php?train_id=<?php
        echo $res['train_id'] ?>">Delete</a></td>
                        <td><a href="expand_info.php?train_id=<?php
        echo $res['train_id'] ?>">More Information</a></td> 
                        <td><input type="checkbox" name="checkbox" value="<?php
        echo $res['train_id'] ?>"></td>
                                                    <!--Only for admins (later!)--> 
                        <!--<td><a href="convert_to_xml.php?train_id=<?php
        echo $res['train_id'] ?>">XML</a></td>
                        <td><a href="convert_to_sql.php?train_id=<?php
        echo $res['train_id'] ?>">SQL</a></td>-->
                    </tr>
                <?php
    

?>
                </div>
            </table><br />
            <input name="Add to list" type="submit" id="add_to_list" value="add_to_list">
        </form>
        </div>
        <?php


?>

Functions:

    function getAllAssoc() 
            $sql = "SELECT * FROM train_information WHERE train_name = :train_name";
            $sth = $this->pdo->prepare($sql);
            $sth->bindParam(":train_name", $_POST["train_name"]);
            $sth->execute();
            return $sth->fetchAll();
        
    
    function selector() 
            $sql = "SELECT train_name, train_id FROM train_information";
            $sth = $this->pdo->prepare($sql);   
            $sth->execute();
            return $sth->fetchAll();
        

当我检查检查按钮时,然后按 Add to list 。你会去customer_list.php。在此页面上,我想显示所选项目的信息。我现在拥有的是:

<?php
    echo $_POST["checkbox"];
?>

这向我显示了一个数字(当我选择了一个项目时),它是火车/项目的 ID。

但是如何显示选中复选框的所有信息呢? 此外,如果我在表中有多列火车,例如 10 列。我只选择 7 列并按下按钮。我希望下一页 customer_list.php 显示这 7 个特定结果。

【问题讨论】:

使用你的逻辑。处理你在 customer_list.php 中得到的值。 但是怎么做呢?因为我得到了正确的选择值。这是一个ID。但是当我喜欢时: 并将其发布在下一页上,就像选择一样。它不会发布任何内容 【参考方案1】:

两件事:

1.改变

echo "<select name='train_name' id='train_name' multiple='multiple'>";

echo "<select name='train_name[]' id='train_name' multiple='multiple'>";

2.改变

function getAllAssoc() 
        $sql = "SELECT * FROM train_information WHERE train_name = :train_name";
        $sth = $this->pdo->prepare($sql);
        $sth->bindParam(":train_name", $_POST["train_name"]);
        $sth->execute();
        return $sth->fetchAll();
    

function getAllAssoc() 
        $sql = "SELECT * FROM train_information WHERE train_name IN(:train_name)";
        $sth = $this->pdo->prepare($sql);
        $sth->bindParam(":train_name", implode(",",$_POST["train_name"]));
        $sth->execute();
        return $sth->fetchAll();
    

只是调整查询中的引号,因为我没有测试过这段代码,感觉单引号会有问题。

上面所做的是,我们已经在一个数组中获取输入,并根据这个数组输入相应地获取结果。

希望你能明白!

【讨论】:

【参考方案2】:

您需要将复选框代码编辑为:

<td><input type="checkbox" name="checkbox[]" value="<?php echo $res['train_id']?>"></td>

customer_list.php 代码:

<?php

function getAllAssoc_id($id) 
        $sql = "SELECT * FROM train_information WHERE id = :id";
        $sth = $this->pdo->prepare($sql);
        $sth->bindParam(":id", $id);
        $sth->execute();
        return $sth->fetchAll();
    

    //echo $_POST["checkbox"];

    echo"<table><tr><td>Train Name</td><td>Train Id</td></tr>";
    foreach($_POST["checkbox"] as $key=>$val)
    $data=getAllAssoc_id($val);
    echo"<tr><td>".$data['train_name']."</td><td>".$data['id']."</td></tr>";

    
    echo"</table";
?>

【讨论】:

我收到此错误:致命错误:不在对象上下文中使用 $this 并注意:数组到字符串的转换。但我可能会弄清楚 您需要在表单/其他页面中包含数据库连接文件 您需要删除 echo $_POST["checkbox"] 才能收到通知。 删除它,只得到致命错误:致命错误:不在对象上下文中使用 $this。连接等也是必需的(已经是) 将整个函数函数getAllAssoc_id写在其他函数函数getAllAssoc()存在的类中【参考方案3】:

您必须将您的复选框名称作为一个数组,即name="checkbox[]",因此在操作页面上您将获得一个ID 数组。现在您只需使用 mysql "IN" 子句查询选定的 train_id。

我可以告诉你一个查询

Select * from table where train_id IN(array you got from check boxes)

【讨论】:

以上是关于表单传递选择到下一页的主要内容,如果未能解决你的问题,请参考以下文章

提交表单时将语言参数传递到下一页(url)

vue选择数据到下一页浏览器崩溃

将数据从按钮传输到下一页的帖子表单。 Django的

在WPS文字中的表格中打字,表格就自动跳到下一页

如何解决我的提交按钮问题,我无法移动到下一页[重复]

如果不满足条件,则停止前进到下一页