从表单中检索信息以进行 PDO 查询的问题
Posted
技术标签:
【中文标题】从表单中检索信息以进行 PDO 查询的问题【英文标题】:issues with retrieving information from form for PDO query 【发布时间】:2015-05-23 15:53:52 【问题描述】:我正在尝试创建一个表单,用户从下拉列表中选择一个选项,结果显示在单独的 php 页面中。但是,我在从表单中获取信息时遇到了问题,并且不确定 php 是否正在获取值。我使用 jQuery 对信息进行序列化(只有一个变量),并尝试使用 var_dump
和 print_r
查看是否正在存储某些内容,但没有返回任何内容。
有什么帮助吗?
形式:
<div class="modal fade" id="searchCModal" tabindex="-1" role="dialog" aria-labelledby="searchCModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
<h4 class="modal-title">Search By Course: </h4>
</div>
<div class="modal-body">
<form id="searchCForm" class="searchCForm">
<?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);
$stmt3 = $db_conx->prepare('SELECT * FROM course_details ORDER BY course_title');
$stmt3->execute();
$courses = $stmt3->fetchAll(PDO::FETCH_ASSOC);
catch(Exception $e)
die ("Could not connect to the database $mysql_dbname :" . $e->getMessage());
?>
<div class="control-group">
<label class="control-label" for="course_details">Select Course:</label><p></p>
<select name="course">
<option value=''>Select One</option>";
<?php foreach($courses as $course): ?>
<option value="<?php echo $course['course_code'] ?>"><?php echo $course['course_title'] ?></option>
<?php endforeach ?>
</select>
</div>
</form>
</div>
<div class="modal-footer">
<div class="btn-toolbar">
<button type="button" class="btn btn-default" class="pull-right" data-dismiss="modal">Close</button>
<button type="button" class="btn btn-success" class="pull-right" onclick="searchCCall();">Submit <span class="glyphicon glyphicon-saved"></button>
</div>
</div>
jQuery:
function searchCCall()
var data = $('#searchCForm').serialize();
$.post('Student_SearchCourse.php', data, function(response)
$("#searchCForm").html(response);
window.location.href = ('Student_SearchCourse.php');
).fail(function(jqXHR, textStatus)
alert( "Request failed: " + textStatus );
);
php:
<?php
include "db_conx.php";
if
(!isset ($_POST['course']))
$message = 'Please select a valid course';
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);
$course = $_POST['course'];
$sql = $db_conx->prepare("SELECT DISTINCT p.proposal_id, p.proposal_title, p.description, c.course_title FROM proposal p
LEFT JOIN course_details c on c.course_code = p.course_code
WHERE p.course_code = :course");
$sql->bindParam(':course', $course, PDO::PARAM_STR);
$sql->execute();
//$user_record_id = $sql->fetchColumn();
print_r($course);
$proposals = $sql->fetchAll(PDO::FETCH_ASSOC);
catch(Exception $e)
die ("Could not connect to the database $mysql_dbname :" . $e->getMessage());
?>
关于如何克服这个问题的任何想法?提前致谢!
【问题讨论】:
你正在做POST
并试图以$course = $_GET['course'];
获取数据?
我冒昧地在表单中正确关闭了您的 div。我不知道您是没有复制整个代码还是它们没有正确关闭。
@Andrei P. 谢谢,在实际文件中,关闭 div 在那里。我只是将表单部分复制到它:)
【参考方案1】:
改变
$course = $_GET['course'];
到
$course = $_POST['course'];
因为您使用 post 方法提交数据。
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="basicModal" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<form class="form-horizontal" role="form" id="frmlogin" action="Student_SearchCourse.php">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h4 class="modal-title" id="myModalLabel">Login</h4>
</div>
<div class="modal-body" >
<!-- your form element -->
</div>
<div class="modal-footer">
<div class="btn-toolbar">
<button type="button" class="btn btn-default" class="pull-right" data-dismiss="modal">Close</button>
<button type="submit" class="btn btn-success" class="pull-right" >Submit <span class="glyphicon glyphicon-saved"></button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
您可以将表单标签包裹在<div class="modal content"></div>
中。
不用js。
【讨论】:
我也尝试过 POST 但没有收到任何回复:/ 谢谢。所以它现在返回 course_code 值,但 sql 查询仍然没有收到我给它的代码。我已将 sql 查询更改为 WHERE course_code = :course;但我得到一个完整性约束 哦,您需要在 where 子句中使用 course_code 指定表名,这似乎您在多个表中有 course_code 列。我的意思是 c.course_code 或 p.course_code。 感谢您的帮助。我已经设法让表格使用我需要的所选课程返回信息,但是 jQuery 把它搞砸了。当我注释掉行'window.location.href =('Student_SearchCourse.php');'它在模态中显示结果,但是当我取消注释该行时,它找不到课程代码值:/有什么想法可以纠正它吗? 首先告诉我你想在哪里显示你返回的数据。在 Modal 或 Student_SearchCourse.php 文件中。我对你的要求有点困惑。【参考方案2】:检查 php 是否将课程代码输出到选项值,您可以通过查看页面源代码或检查 $.post 是否通过 Web 浏览器的控制台发送序列化数据来做到这一点
【讨论】:
以上是关于从表单中检索信息以进行 PDO 查询的问题的主要内容,如果未能解决你的问题,请参考以下文章
使用 PDO 准备语句从搜索字段中使用多个关键字进行 LIKE 查询