从表单中检索信息以进行 PDO 查询的问题

Posted

技术标签:

【中文标题】从表单中检索信息以进行 PDO 查询的问题【英文标题】:issues with retrieving information from form for PDO query 【发布时间】:2015-05-23 15:53:52 【问题描述】:

我正在尝试创建一个表单,用户从下拉列表中选择一个选项,结果显示在单独的 php 页面中。但是,我在从表单中获取信息时遇到了问题,并且不确定 php 是否正在获取值。我使用 jQuery 对信息进行序列化(只有一个变量),并尝试使用 var_dumpprint_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">&times;</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">&times;</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>

您可以将表单标签包裹在&lt;div class="modal content"&gt;&lt;/div&gt; 中。 不用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 查询的问题的主要内容,如果未能解决你的问题,请参考以下文章

带有“WHERE ... IN”查询的 PDO [重复]

使用 PDO 准备语句从搜索字段中使用多个关键字进行 LIKE 查询

从表单上的多个组合框控制 Access SQL 查询

通过 WPF 应用程序从 Access (.accdb) 中检索查询、表单和报表属性

从 PDO 准备好的语句中获取查询 [重复]

如何从由 SQL 查询填充的列表框中获取信息?