我正在使用复选框来查询数据库,我正在努力解决这个问题,我是 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/