首页 > 解决方案 > 使用 form method="post" 动态分配 php 变量

问题描述

我正在尝试根据在选择下拉列表中选择的值运行特定的数据库查询。我当前的代码没有运行查询。

我当前的代码如下所示:

主要搜索.php

<form action="" method="post">
   <div class="search-container">
       <input type="text" id="search_input" placeholder="">
       <select name="search-by">
           <option value="symptom">Symptom</option>
           <option value="language">Language</option>
       </select>
   </div>
</form>

<?php   
    session_start();
    $searchBy = $_POST['search-by'];
    $_SESSION['search_type'] = $searchBy;
?>

搜索.php

<?php
session_start();

$queryType = $_SESSION['search_type'];

if ($queryType == "symptom") {
        $searchQuery = $db->query("SELECT * FROM Symptoms WHERE symptom_name ORDER BY symptom_name ASC");
    }
    else if ($queryType == "language") {
        $searchQuery = $db->query("SELECT * FROM `Language` WHERE language_name ORDER BY language_name ASC");
    }

?>

我尝试将 main-search.php 中的代码更改为...

<?php   
    session_start();
    $searchBy = $_POST['search-by'];
    $_SESSION['search_type'] = "symptom";
?>

并且它按预期工作,运行第一个查询,所以这就是为什么我假设我在帖子表单上做错了什么并分配了 $searchBy 值。

我是php新手,所以任何帮助将不胜感激,谢谢。

标签: phphtmlmysql

解决方案


出于此目的,最好避免使用 Session 变量,因为 Session 变量用于在 PHP 中在页面之间存储/传递信息(例如登录状态)。

根据我的推论,您正试图在用户更改<select>选项时动态更改此 PHP 变量。由于 PHP 是一个服务器端脚本,这将不起作用,如果您需要在不重新加载页面的情况下进行更改,您将需要使用客户端脚本(例如 Javascript/jQuery)。例如(在 jQuery 中):

$('select[id="search-type"]').on("change", function(){
    //Do work
});

但是,如果我对您的理解正确,您最好的选择是只使用 HTTP POST 变量($_POST在 PHP 中访问),例如:

main-search.php

<form action="search.php" method="post">
    <div class="search-container">
       <input type="text" id="search_input" placeholder="">
       <select name="search_type" id="search-type">
           <option value="symptom">Symptom</option>
           <option value="language">Language</option>
       </select>
       <button type="submit">Submit</button>
    </div>
</form>

search.php

<?php

$queryType = $_POST['search_type'];

if ($queryType == "symptom") {
    $searchQuery = $db->query("SELECT * FROM Symptoms WHERE symptom_name ORDER BY symptom_name ASC");
}
else if ($queryType == "language") {
    $searchQuery = $db->query("SELECT * FROM `Language` WHERE language_name ORDER BY language_name ASC");
}

?>

推荐阅读