【问题标题】:MYSQL Query statements based on PHP radio buttons基于 PHP 单选按钮的 MYSQL 查询语句
【发布时间】: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,如果有的话。

标签: php mysql if-statement conditional-statements radio


【解决方案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" : '';

【讨论】:

【解决方案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
    猜你喜欢
    • 2015-06-12
    • 2018-04-13
    • 1970-01-01
    • 1970-01-01
    • 2019-06-29
    • 2012-02-08
    • 2017-03-07
    • 2015-01-18
    • 1970-01-01
    相关资源
    最近更新 更多