[英]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.