簡體   English   中英

將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>

這一切都很好。 我想做的是使用選定選項的結果對同一數據庫進行另一個查詢,該查詢提取與選定活動和日志日期值關聯的所有記錄。 我知道如何編寫查詢,但不知道如何查找然后使用選定的值。

有人可以告訴我如何從

預先感謝您的考慮。

您需要先提交表格。

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

您需要在操作參數中提交到有效頁面。 因此,如果“ define_activity”不是有效的URL(即:未經htaccess處理),則需要A)使用您使用的相同腳本/文件,或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) );

我對您的代碼進行了一些更改,但未對其進行測試,但我認為這將為您提供幫助:

<?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>

基思

您必須記住,Web應用程序通過HTTP協議在客戶端服務器環境中工作。

第一次完成頁面加載后,基本上完成了php腳本的執行。 為了運行更多代碼,需要將另一個請求發送到服務器。 當您執行以下任一操作時,就會發生這種情況:

a)提交表單或單擊將新的http請求發送到頁面的鏈接

b)使一些javascript將新的HTTP請求發送到頁面。

由於您剛剛入門,因此假設您只希望該表單將新請求發送到頁面。

因此,在您的php腳本頂部,只需添加以下語句:

print_r($_REQUEST);

在您訪問運行腳本的頁面時,無論是否單擊“提交帖子”按鈕,您都可以看到基於表單帖子顯示的各種請求參數。 這些參數之一就是“活動” ..只需拋出一個if語句來檢查該參數是否存在,然后使用“ activity”的值在該if語句中運行查詢

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM