Javascript 查询MySQL数据库,然后在表单提交后显示检索到的文本

Javascript 查询MySQL数据库,然后在表单提交后显示检索到的文本,javascript,php,jquery,mysql,Javascript,Php,Jquery,Mysql,我试图在从下拉菜单中选择后立即提交表单。提交表单后,我想根据下拉列表中的选择向MySQL数据库发送一个查询,并显示检索到的文本 目前,根据我下面的内容,没有显示任何内容,也没有抛出任何错误。JS submit事件处理程序可以工作,但在页面重新加载后,不会显示新文本 非常感谢您的帮助 提交表格的JS: $(".platformSelectDropDown").change(function() { $('.platformSelectForm').submit(); }); 提交表单后要运行

我试图在从下拉菜单中选择后立即提交表单。提交表单后,我想根据下拉列表中的选择向MySQL数据库发送一个查询,并显示检索到的文本

目前,根据我下面的内容,没有显示任何内容,也没有抛出任何错误。JS submit事件处理程序可以工作,但在页面重新加载后,不会显示新文本

非常感谢您的帮助

提交表格的JS:

$(".platformSelectDropDown").change(function() {
  $('.platformSelectForm').submit();
});
提交表单后要运行的PHP:

if($_SERVER['REQUEST_METHOD'] == 'POST') {
  $platform = $_POST['platformSelectDropDown'];
  $description = call_data($tableName, $platform)['Description'];
  $application = call_data($tableName, $platform)['Application'];
}
用于查询和返回数据的PHP函数:

function call_data($tableName, $col, $platformName) {
  include('connection.php');
  $sql = 'SELECT * FROM $tableName WHERE platform_name = $platformName';
  try {
    return $db->query($sql);
  }
  catch (Exception $e) {
    echo "Error! " . $e->getMessage() . "<br/>";
    return array();
  }
}
函数调用\u数据($tableName、$col、$platformName){
包括('connection.php');
$sql='从$tableName中选择*,其中平台名称=$platformName';
试一试{
返回$db->query($sql);
}
捕获(例外$e){
回显“错误!”。$e->getMessage()。“
”; 返回数组(); } }
表格:

<form class="platformSelectForm" method="post" action="index.php">
  <select name="platformSelectDropDown" class="platformSelectDropDown">
    ...
  </select>
  <ul class="indent">
    <li><?php echo($description); ?></li>
    <li><?php echo($application); ?></li>
  </ul>
</form>

...

我相信下面的代码可以满足您的需求,并在安全性和功能方面有所改进。但是,请注意,我不清楚您的代码在哪里设置了
$tableName
,所以我只是将其硬编码为我的测试表。我混合了php和html,因为这使我更容易解决这个问题,而且我认为这将使您更容易遵循我的解决方案。如果您愿意的话,您没有理由将其拆分回去并对php部分进行功能化,这与您最初的方法类似。请查看:

<html>
    <body>
        <form class="platformSelectForm" id="platformSelectForm" method="post">

                <?php

                    // Get which dropdown option is selected, if any, so can keep selected on page reload 
                    if(!isset($_POST['platformSelectDropDown'])) {

                        // Not postback, default to first option ("Select One")
                        $p0Select = ' selected';
                        $p1Select = '';
                        $p2Select = '';

                    } else {

                        // Is postback
                        // Set variables for query below
                        $tableName = 'tbl_platforms_1';
                        $platformName = $_POST['platformSelectDropDown'];

                        // set dropdown selection to whatever was select at form submission 
                        if($platformName == 'Platform_1') {
                            $p1Select = ' selected';
                        } elseif ($platformName == 'Platform_2') {
                            $p2Select = ' selected';
                        } else {
                            $p0select = ' selected';
                        }
                    }

                    ?>

                    <select name="platformSelectDropDown" class="platformSelectDropDown" onchange="document.getElementById('platformSelectForm').submit()">
                        <option value="Select_One"<?php echo $p0Select; ?>>Select One</option>
                        <option value="Platform_1"<?php echo $p1Select; ?>>Platform 1</option>
                        <option value="Platform_2"<?php echo $p2Select; ?>>Platform 2</option>
                    </select>


                    <?php

                        // If dropdown value is set and does not equal "Select_One"
                        if(isset($_POST['platformSelectDropDown'])&& $_POST['platformSelectDropDown'] != 'Select_One') {

                            ?>
                            <ul class="indent">
                            <?php

                                try {

                                    // Set database parameters 
                                    // Replace these values with appropriate values for your database
                                    // (okay to use an include like you did originally)
                                    $dbhost = 'your_database_host';
                                    $dbname = 'your_database_name';
                                    $dbuser = 'your_database_user';
                                    $dbpass = 'your_database_user_password';

                                    // Create PDO
                                    $conn = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbuser, $dbpass);
                                    $conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
                                    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

                                    // Prepare SQL statement and bind parameters
                                    $stmt = $conn->prepare("SELECT * FROM $tableName WHERE platform_name = :platformName");
                                    $stmt->bindValue(':platformName', $platformName, PDO::PARAM_STR);

                                    // Execute statement and return results in an associative array (e.g., field_name -> value)
                                    $stmt->execute();
                                    $results = $stmt->fetchAll(PDO::FETCH_ASSOC);

                                    // Close Connection
                                    $conn = null;

                                    // For each row that was returned, output results
                                    for ($i = 0; $i < count($results); $i++) {
                                        echo '<li>' .$results[$i]['Description'] .'</li>';
                                        echo '<li>' .$results[$i]['Application'] .'</li>';
                                    }

                                } catch (Exception $e) {
                                    echo '<li>Error! ' .$e->getMessage() . '</li>';
                                }
                            ?>
                            </ul>
                            <?php
                        };
                ?>
        </form>
    </body>
</html>

如果这解决了您的问题,请记住标记为已回答,这样每个人都会知道您不再需要帮助(因此我将获得奖励,因为我花了一个小时想出了这个解决方案:-)。如果这不能解决您的问题,请尽可能详细地说明当前结果与您期望的结果之间的差异,我将尝试对其进行修改,以满足您的需要。谢谢

警告:使用PDO时,应与占位符值一起使用,并将任何用户数据作为单独的参数提供。在这段代码中,您可能会遇到严重的问题。永远不要使用字符串插值或串联,而是直接在查询中使用并且永远不要放置
$\u POST
$\u GET
或任何用户数据。有关一般指导和建议,请参阅。非常低效的代码,请同时选择两列,而不是每个查询一列
$db->query
将返回true\false而不是数据retrieved@smith谢谢你指出效率低下的地方,我现在已经解决了。但是,$db query仅在失败时返回false,如果通过,则返回PDOStatement对象。@tadman此页上的所有内容都是从选择菜单中运行的。没有用户输入字段,这就是我对保护有点粗心的原因。没有显示任何db代码,因此这只是猜测,如果返回整个对象简化回显,它将不会给出所选的值。
DROP TABLE IF EXISTS tbl_platforms_1;
CREATE TABLE IF NOT EXISTS tbl_platforms_1 (
    id int AUTO_INCREMENT NOT NULL,
    platform_name varchar(20),
    Description varchar(20),
    Application varchar(20),
    PRIMARY KEY (id)
);

INSERT INTO 
    tbl_platforms_1
        (platform_name, Description, Application)
    VALUES 
        ('Platform_1', 'Description 1', 'Application 1'),
        ('Platform_2', 'Description 2', 'Application 2');