基于 PHP 单选按钮的 MYSQL 查询语句

Posted

技术标签:

【中文标题】基于 PHP 单选按钮的 MYSQL 查询语句【英文标题】:MYSQL Query statements based on PHP radio buttons 【发布时间】:2017-10-01 10:08:51 【问题描述】:

我有一组单选按钮:

<div id="navbarval">
    <input type="radio" name="selectionval"  onchange="this.form.submit();" value="users" checked> CATEGORY USERS
    <input type="radio" name="selectionval"  onchange="this.form.submit();" value="avgspends"> AVERAGE SPENDS
    <input type="radio" name="selectionval"  onchange="this.form.submit();" value="totalspends" > TOTAL SPENDS
    <input type="radio" name="selectionval"  onchange="this.form.submit();" value="percapita" > PER CAPITA SPENDS
</div>

根据用户选择,我正在尝试获取 mysql 数据。到目前为止,我的 php 代码如下:

$query = if ($_POST['selectionval'] == "users")
            "SELECT users,sum(categ) as categ FROM cktable group by users";  
           

我收到以下错误:

解析错误:第 210 行 /Users/dynamo/Sites/newvan/accessories.php 中的解析错误

我想用 else if 扩展它,让所有其他单选按钮改变 mysql 选择查询,因此需要 if 条件。

我尝试直接传递 select 语句:

$query = "SELECT users,sum(categ) as categ FROM cktable group by users";  

这运行没有任何错误。

有什么想法吗?

【问题讨论】:

if内赋值,或者使用三进制。 if (isset($_POST['selectionval']) &amp;&amp; $_POST['selectionval'] == "users") // run the query $categ 分配/声明了什么以及在哪里? @RamRaider 是的;该语法不起作用as $categ;很奇怪。这个问题开始变得不清楚了。 牛仔等等…… &lt;div id="navbarval" method="POST"&gt;?? - div 没有方法,表单有。我认为您正在为此使用 ajax,如果有的话。 【参考方案1】:

您使用了错误的语法。如下更改您的代码。

if (isset($_POST['selectionval']) && $_POST['selectionval'] == "users")
    $query = "SELECT users,sum(categ) as $categ FROM cktable group by users";  

或者使用ternary operator:

$query = (isset($_POST['selectionval']) &amp;&amp; $_POST['selectionval'] == "users") ? "SELECT users,sum(categ) as $categ FROM cktable group by users" : '';

【讨论】:

第一个在初始页面加载时失败。最好使用isset()。此评论基于初始帖子***.com/revisions/43762506/1【参考方案2】:

尝试改变:

$query = if ($_POST['selectionval'] == "users")
            "SELECT users,sum(categ) as $categ FROM cktable group by users";  
          

if ($_POST['selectionval'] == "users")
            $query = "SELECT users,sum(categ) as $categ FROM cktable group by users";  
          

【讨论】:

第一个在初始页面加载时失败。最好使用isset()【参考方案3】:

要扩展解决方案,您可以使用基于单选值的查询映射。

例如:

$queries = array(
  'value1' => 'SELECT ...', 
  'value2' => 'SELECT ...',
  'valueN' => 'SELECT ...'
);

$radio_value = $_POST['radio_name'];

if (isset($queries[$radio_value])) 
  $query = $queries[$radio_value];

【讨论】:

【参考方案4】:

在我看来,switch 语句似乎比众多 if,elseif,else 语句更易于阅读。此外,通过检查 Request Method 是否设置,在提交表单之前不会执行 switch 语句。

<?php

    if( $_SERVER['REQUEST_METHOD']=='POST' && !empty( $_POST['selectionval'] ) )

        $sql=false;
        $categ='---what is $categ---';


        $selection=filter_input( INPUT_POST, 'selectionval', FILTER_SANITIZE_STRING );

        switch( strtolower( $selection ) )
            case 'users':
                $sql="select `users`, sum( `categ` ) as '$categ' from `cktable` group by `users`";
            break;
            case 'avgspends':
                $sql="select.....";
            break;
            case 'totalspends':
                $sql="select.....";
            break;
            case 'percapita':
                $sql="select.....";
            break;
        



        if( $sql )
            /* execute query */
            #$db->query( $sql );
        
    

?>

【讨论】:

最好再看看&lt;div id="navbarval" method="POST"&gt; ;-) as per my comment 我一开始都没有,后来又看了几眼就注意到了lol

以上是关于基于 PHP 单选按钮的 MYSQL 查询语句的主要内容,如果未能解决你的问题,请参考以下文章

基于PHP+mysql的考试系统自动组卷,自动批卷,自动评分,单选,多选,判断

从 php 中检索单选按钮的 mysql 值

如何控制单选按钮?从数据库、PHP、MYSQL 回显的数据

如何以在 php 中作为字符串回显的形式填充单选按钮?

Mysql 中的数据库不显示 html 和 php 中单选按钮的结果

使用MySQL / PHP生成单选按钮