php - 此阵列的最佳解决方案

标签 php mysql arrays

我正在使用复选框来查询数据库,我正在努力解决这个问题,我是 MySQL 和 PHP 的新手,如果这很简单,我很抱歉!

这是我的代码...

<input type="checkbox" name="season2005" value="2005" <?php if(isset($_POST['season2005'])) echo "checked='checked'"; ?> > 2005-06
<input type="checkbox" name="season2006" value="2006" <?php if(isset($_POST['season2006'])) echo "checked='checked'"; ?> > 2006-07
<input type="checkbox" name="season2007" value="2007" <?php if(isset($_POST['season2007'])) echo "checked='checked'"; ?> > 2007-08
<input type="checkbox" name="season2008" value="2008" <?php if(isset($_POST['season2008'])) echo "checked='checked'"; ?> > 2008-09
<input type="checkbox" name="season2009" value="2009" <?php if(isset($_POST['season2009'])) echo "checked='checked'"; ?> > 2009-10
<input type="checkbox" name="season2010" value="2010" <?php if(isset($_POST['season2010'])) echo "checked='checked'"; ?> > 2010-11
<input type="checkbox" name="season2011" value="2011" <?php if(isset($_POST['season2011'])) echo "checked='checked'"; ?> > 2011-12
<input type="checkbox" name="season2012" value="2012" <?php if(isset($_POST['season2012'])) echo "checked='checked'"; ?> > 2012-13
<input type="checkbox" name="season2013" value="2013" <?php if(isset($_POST['season2013'])) echo "checked='checked'"; ?> > 2013-14

if (@$_POST['season2005'] == ""){ $season2005 = "0000"; } else { $season2005 = "2005"; }
if (@$_POST['season2006'] == ""){ $season2006 = "0000"; } else { $season2006 = "2006"; }
if (@$_POST['season2007'] == ""){ $season2007 = "0000"; } else { $season2007 = "2007"; }
if (@$_POST['season2008'] == ""){ $season2008 = "0000"; } else { $season2008 = "2008"; }
if (@$_POST['season2009'] == ""){ $season2009 = "0000"; } else { $season2009 = "2009"; }
if (@$_POST['season2010'] == ""){ $season2010 = "0000"; } else { $season2010 = "2010"; }
if (@$_POST['season2011'] == ""){ $season2011 = "0000"; } else { $season2011 = "2011"; }
if (@$_POST['season2012'] == ""){ $season2012 = "0000"; } else { $season2012 = "2012"; }
if (@$_POST['season2013'] == ""){ $season2013 = "0000"; } else { $season2013 = "2013"; }

$seasons = array($season2005,$season2006,$season2007,$season2008,$season2009,$season2010,$season2011,$season2012,$season2013);
$seasonpick = implode(",",$seasons);;

$matcharrays = array("AND season in ($seasonpick)");

目前所有的数据都被查询到数据库,所以如果没有选择它们,那么查询的一部分是“AND season in (0000,0000,0000,0000) etc

我将如何只将那些被选中的放入数组,如果没有被选中,那么数组将是空白的。

希望你明白我的意思!

最佳答案

这是一个带有一些复选框的工作表单,可以让您测试并获得您想要的 sql。

<?php

    $dateArr=array();
    if(isset($_POST['season']))
    {
        $dateArr=array_unique($_POST['season']);
        $dateSearch=implode(",", $dateArr);
        $sql=".... and season in (".$dateSearch.")";
        echo $sql;
    }


?>

<html>
<form action="?" method="post">
<?php
    for($i=0;$i<10;$i++)
    {
        echo "<input type=\"checkbox\" name=\"season[]\" value=\"".($i+2005)."\"> ".($i+2005);
    }
?>
<input type="submit">
</form>

选择2009、2010、2011时的输出:

.... and season in (2009,2010,2011)

好的,那么它是如何工作的:

当复选框的名称都以 [] 结尾时,最好使用复选框。这使它本身成为一个很好的数组。

如果设置了 post 数据,我们会快速在其上抛出一个唯一的数组(在这些类型的查询中大多数情况下是个好习惯),这样就没有重复值。

然后简单地将它内爆成一个字符串并将其弹出到 SQL 查询中。

编辑:添加了提交时重新选中复选框的功能。

<?php

    $dateArr=array();
    if(isset($_POST['season']))
    {
    $dateArr=array_unique($_POST['season']);
    $dateSearch=implode(",", $dateArr);
    $sql=".... and season in (".$dateSearch.")";
    echo $sql;
    }


?>

<html>
<form action="?" method="post">
<?php
    for($i=0;$i<10;$i++)
    {
    $chk="";
    if(!empty($_POST['season']))
    {
        if(in_array($i+2005, $_POST['season']))
        {
            $chk=" checked=\"checked\" ";
        }
    }
    echo "<input type=\"checkbox\" name=\"season[]\" ".$chk." value=\"".($i+2005)."\"> ".($i+2005);
    }
?>
<input type="submit">
</form>

编辑 2:只需在正确的位置添加引号 :)

<?php

    $dateArr=array();
    if(isset($_POST['season']))
    {
    $dateArr=array_unique($_POST['season']);
    $dateSearch=implode("', '", $dateArr);
    $sql=".... and season in ('".$dateSearch."')";
    echo $sql;
    }


?>

<html>
<form action="?" method="post">
<?php
    for($i=0;$i<10;$i++)
    {
    $chk="";
    if(!empty($_POST['season']))
    {
        if(in_array(($i+2005)."i", $_POST['season']))
        {
            $chk=" checked=\"checked\" ";
        }
    }
    echo "<input type=\"checkbox\" name=\"season[]\" ".$chk." value=\"".(($i+2005)."i")."\"> ".($i+2005)."i";
    }
?>
<input type="submit">
</form>

编辑 3:我觉得这开始真正回答了不止一个问题 :)

您可以简单地检查文本框以确保它不为空,然后附加到 SQL 字符串:

$sql="";
if(!empty($_POST['text1']))
{
    $sql.=" and ftgf>= ".$_POST['text1']." ";
}

话虽如此,我强烈建议您绝不允许用户输入您将运行的实际 SQL 的部分内容 - 除非它是一个封闭/安全的环境,这意味着不是一个 ope 网站。

关于php - 此阵列的最佳解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23826967/

相关文章:

php - Select 语句没有回显数据库中的所有行

php - 如何制作简单的动态幻灯片/游戏中时光倒流

javascript - 如何根据数组中的元素进行过滤?

mysql - 为什么这个简单的 MySQL 更新查询会花费这么长时间?

sql - 如何在列数据 Spark scala 上检查 isEmpty

c++ - 在字符数组中查找路径

php - 不要在 mysql 数据库中复制内容

php - Codeigniter $this->input->post 始终为 FALSE

mysql - 从现在开始扣除较旧的日期()

php - 将大型 CSV 文件导入 MySQL