将 select 子句的结果用于 MySQL 的 where 子句

Using the result of a select clause for a where clause to MySQL

我有一个包含 12 列的 MySQL 数据库。我使用名为 'activity' 的列和名为 'logdate' 的列的不同值从中创建了一个下拉列表,这是一个日期时间。 像这样..

<form action="define_activity" id="activityform" method="post">   <!-- Form to select an activity -->
        <select name="activities" id="select1">      <!-- List of activities -->
            <option value="" selected="">Select One</option>
            <option value="NewActivity" id="newactivity"       onclick="newactivity();">New Activity</option>
<?php
foreach($db_found->query("SELECT DISTINCT activity, logdate FROM NetLog ORDER BY activity") as $act) {
echo ("<option value='$act[activity]'>$act[activity] of $act[logdate]</option>");
}
?>
</select>
<input type="submit" name = "Submit" />
</form>

这一切都很好。我想要做的是使用所选选项的结果对同一个数据库执行另一个查询,该数据库提取与所选 activity 和 logdate 值关联的所有记录。我知道如何编写查询,但我不知道如何查找并使用选定的值。

谁能告诉我如何从

提前感谢您的考虑。

您需要先提交表格。

<form action="define_activity" id="activityform" method="post">

您需要提交到操作参数中的有效页面。因此,如果 'define_activity' 不是有效的 URL(即:不由 htaccess 处理),那么您需要 A) 使用相同的 script/file 您的使用或 B) 创建另一个页面来处理数据.

我会这样做:

<form action="process.php" id="activityform" method="post">

process.php

<?php
if ( isset($_POST['activities']) ) {
    // do something with the submitted data
    $selectedValue = $_POST['activities'];
}

现在您有了选定的值。您还有以 $_POST['othervalue'].

形式提交的任何其他值

为了清楚地查看发送的内容,转储它。

die('<pre>' . print_r($_POST, true) . '</pre>');

或者您可以使用 var_dump:die( var_dump($_POST) );

基思,

您必须记住,Web 应用程序通过 HTTP 协议在客户端服务器环境中工作。

在您的页面完成第一次加载后,php 脚本基本上完成执行。为了让更多代码运行,需要向服务器发送另一个请求。当您执行以下任一操作时,就会发生这种情况:

a) 提交表单或单击 link 向页面发送新的 http 请求

b) 让一些 javascript 向页面发送新的 HTTP 请求。

由于您刚刚开始,我们假设您只希望该表单将新请求发送到页面。

所以在 php 脚本的顶部,只需添加以下语句:

print_r($_REQUEST);

当您访问包含和未单击提交 post 按钮的脚本的页面时,您将能够看到根据您的表单显示的各种请求参数post。其中一个参数将是 'activity' .. 只需抛出一个 if 语句检查该参数是否存在,然后 运行 您在该 if 语句中的查询,使用 'activity'[ 的值=12=]

if(isset($_REQUEST['activities'])) {
//do your query here..
}

我对你的代码做了一些修改,我没有测试它,但我认为这会对你有所帮助:

<?php 

//Returns an associative array with the query result:
    function select($yourSQLQuery){
        //Array with result:
        $result = array();

        //Database conection
        $db = new PDO($dsn,$username,$password);

        $stmt = $db->query($yourSQLQuery);

        //This going to save an array with your data:
        $result = $stmt->fetchAll(PDO::FETCH_NUM);

        $db = null;

        return $result;
    }

    //*********************************************************************************************
    //Do here your query:
    $result = select("SELECT DISTINCT activity, logdate FROM NetLog ORDER BY activity");
    //*********************************************************************************************


    //Form handler: 
    if($_SERVER[REQUEST_METHOD] == "POST"){
        //If the form was submited:

        //Get   selected activity
        if ( isset($_POST['activities']) ) {

    /*Instead of sending your activity you can send the number of the submitted record in $records, then extract activity and logdate and make your query:*/
            $rowNumber = $_POST['activities'];

            //Get your log date:
            $act = $result[$rowNumber]; //if doesn't work try '$rowNumber'
            $activity = $act['activity'];
            $logdate = $act['logdate'];

            //Pull records asocciated with submitted activity:          
            $sql = "SELECT * FROM putHereYourTable WHERE activity = '$activity' AND logdate='$logdate'";
            $records = select($sql);

            //Pulled activities are now in $records 

            //do something with the records that you want. e.g.:
            print_r($records);


        }
    }   
?>

<!-- Your HTML: -->
<form action="define_activity" id="activityform" method="post">   <!-- Form to select an activity -->
        <select name="activities" id="select1">      <!-- List of activities -->
            <option value="" selected="">Select One</option>
            <option value="NewActivity" id="newactivity"       onclick="newactivity();">New Activity</option>
                <?php                   
                    foreach($result as $key => $act) {
                        //Send the number of register instead of $act[activity]:
                        echo ("<option value='$key'>$act[activity] of $act[logdate]</option>");
                    }
                ?>
            </select>
            <input type="submit" name = "Submit" />
</form>