尝试创建一个sql查询,该查询接受一个标记数组(最多3个),然后显示与任何这些标记匹配的记录。
到目前为止,我有这个:
<?php
include "db_conx.php";
if
(!isset ($_POST['tag']))
{
$message = 'Please select valid tags';
}
try {
$db_conx = new PDO("mysql:host=$mysql_hostname;dbname=$mysql_dbname", $mysql_username, $mysql_password);
$db_conx->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$tag = $_POST['tag'];
$sql = $db_conx->prepare('SELECT DISTINCT p.proposal_id, p.proposal_title, p.description, c.course_title, pt.*, t.tag_title FROM proposal p
LEFT JOIN course_details c on c.course_code = p.course_code
LEFT JOIN proposal_tags pt on pt.proposal_id = p.proposal_id
LEFT JOIN tag_details t on t.tag_code = pt.tag_code
WHERE pt.tag_code IN ('.implode(',', '$tag').')');
$sql->bindParam(':tag', $course, PDO::PARAM_STR);
$sql->execute();
$count = $sql->rowCount();
//$user_record_id = $sql->fetchColumn();
$prop_tags = $sql->fetchAll(PDO::FETCH_ASSOC);
// $course_title = $sql->fetchColumn(3);
if( ! $proposals)
{
die('<h4><center><p class=text-danger>There are no proposals available for this course</p></center></h4>');
}
}
catch(Exception $e)
{
die ("Could not connect to the database $mysql_dbname :" . $e->getMessage());
}
?>
<?php
echo "<h2>Tags Chosen:</h2>";
var_dump($tag);
?>
这是要处理的表单的代码:
<?php
include "db_conx.php";
try
{
$db_conx = new PDO("mysql:host=$mysql_hostname;dbname=$mysql_dbname", $mysql_username, $mysql_password);
$db_conx->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $db_conx->prepare('SELECT * FROM tag_details ORDER BY tag_title ASC');
$stmt->execute();
//$count = $stmt>rowCount();
$tags = $stmt->fetchAll(PDO::FETCH_ASSOC);
}
catch(Exception $e)
{
/*** if we are here, something has gone wrong with the database ***/
$e->getMessage();
}
?>
<div id="adSearchModal" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="adSearchModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h4 class="modal-title">Advanced Search </h4>
<p class="text-danger"><small>(Select up to 3)</small></p>
</div>
<div class="modal-body">
<form id="adsearchForm" action="Student_AdSearch.php" method="post">
<div class="control-group">
<label class="control-label" for="tag_details">Select Tags:</label><p></p>
<div class="checkbox-new">
<?php foreach($tags as $tag): ?>
<input name='tag[]' class="checkbox" type="checkbox" value="<?php echo $tag['tag_code'] ?>"><?php echo $tag['tag_title'] ?></p>
<?php endforeach ?>
</div>
</div>
<input type="hidden" name="user_token" value="<?php echo $_SESSION['user_token']; ?>"/>
<div class="modal-footer">
<div class="btn-toolbar">
<button type="button" class="btn btn-default" class="pull-right" data-dismiss="modal">Close</button>
<input type="hidden" name="form_token" value="<?php echo $form_token; ?>" />
<input type="Submit" class= "btn btn-primary" value="Submit" />
</div>
</div>
</form>
</div>
</div>
</div>
</div>
你知道我怎样才能达到我的最终目标吗?
本质上,查询应该返回与这些标记匹配的所有提议。我已经通过手动为sql查询提供3个标记来测试它,这很有效。
提前感谢!
在代码中将$sql更改为:
$sql = $db_conx->prepare('SELECT DISTINCT p.proposal_id, p.proposal_title, p.description, c.course_title, pt.*, t.tag_title FROM proposal p
LEFT JOIN course_details c on c.course_code = p.course_code
LEFT JOIN proposal_tags pt on pt.proposal_id = p.proposal_id
LEFT JOIN tag_details t on t.tag_code = pt.tag_code
WHERE pt.tag_code IN (' . implode(',', $tag) .')';
$prop_tags = $sql->fetchAll(PDO::FETCH_ASSOC);
// $course_title = $sql->fetchColumn(3);
/*
add this lines
*/
foreach($prop_tags as $info) {
echo implode(' - ', $info) . "<br>";
}