使用form method =“ post”动态分配php变量

时间:2019-04-05 15:38:01

标签: php html mysql

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

我当前的代码如下:

main-search.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;
?>

search.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的新手,感谢您的任何帮助。

1 个答案:

答案 0 :(得分:0)

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

根据我的推论,您试图在用户更改<select>选项时动态更改此PHP变量。由于PHP是服务器端脚本,因此无法使用,如果您需要更改某些内容而不重新加载页面,则需要使用客户端脚本(例如Javascript / jQuery)。例如(在jQuery中):

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

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

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");
}

?>