将 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>
我有一个包含 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>