【问题标题】:Insert value to Database base on Month?根据月份将值插入数据库?
【发布时间】:2014-09-12 04:11:11
【问题描述】:

我无法将值插入月份。我每个月有 12 列。我的代码只存储一月份的值。如果我使用switch可以吗?

if ($_GET['do'] == 'insert')
    {   
        $p_aid          = $_GET['id'];
        $t_no           = $_POST['t_no'];       
        $t_month        = $_POST['t_month']; //dropdown
        $t_value        = $_POST['t_value']; //value based on month selected
        $t_year         = $_POST['t_year']; 


        $sql = "INSERT INTO tbl_detail (p_aid,t_not_year) ";
        $sql .= "VALUES ($p_aid,'$t_no''$t_year')";
        mysql_query($sql);

        switch ($t_month) {

        case $t_month = "Jan";
            $sql = "UPDATE tbl_detail SET t_jan = '$t_value'";      
            $sql .= "WHERE p_aid = $p_aid AND t_no = $t_no";
        break;

        case $t_month = "Feb";
            $sql = "UPDATE tbl_detail SET t_feb = '$t_value'";      
            $sql .= "WHERE p_aid = $p_aid AND t_no = $t_no";
        break;

            mysql_query($sql);
        }

        redirect("basicview.php?id=$p_aid&type=success&msg=new+row+added");
    }

【问题讨论】:

  • 你的mysql_query($sql);在开关block里面放出来
  • 为什么要更新表格?您可以在第一次直接在查询中插入月份。
  • 为什么你有 12 个不同的列并且只使用其中一个?您当然可以做一些更简单的事情,但 case 语句比将月份名称注入插入字符串更安全。
  • @GarrGodfrey 完全同意。我更新了我的帖子以使用访问两次的数组来清理只要服务器不需要设置 var 就可以保存的数组。

标签: php mysql database insert sql-update


【解决方案1】:

首先,您的案例陈述不正确。

case $t_month = "Jan";

应该是

case "Jan":

case 0:

(无论$t_month 的值可以是什么)。

如果下拉列表中包含您想要的文本作为值,则不需要 switch

如果它有月份的数字,那么一个数组也可以工作,没有那么多的评估。

编辑:这是对 Tome 评论的补充。 编辑#2:如果下拉列表确实有文本,那么您肯定想要检查它是否有效,这样您就不会添加更多 SQL 注入选项。

而且,继续编辑......这样的事情将解决很多问题:

if ($_GET['do'] == 'insert')
{   
    $p_aid          = (int)$_GET['id'];
    $t_no           = (int)$_POST['t_no'];

    $months = array(''=>'Jan', 'Jan'=>'Jan', 'Feb'=>'Feb', 'Mar'=>'Mar', 'Apr'=>'Apr', 'Mar'=>'Mar', 'Apr'=>'Apr', 'May'=>'May', 'Jun'=>'Jun', 'Jul'=>'Jul', 'Aug'=>'Aug', 'Sep'=>'Sep', 'Oct'=>'Oct', 'Nov'=>'Nov', 'Dec'=>'Dec');

    $t_month        = $months[$months[$_POST['t_month']]]; //dropdown
    $t_value        = $_POST['t_value']; //value based on month selected
    $t_year         = (int)$_POST['t_year']; 

    $sql = "INSERT INTO tbl_detail (p_aid,t_not_year,t_" . strtolower($t_month) . ") ";
    $sql .= "VALUES ($p_aid,'$t_no''$t_year', '" . $t_month . "')";
    mysql_query($sql);

    redirect("basicview.php?id=$p_aid&type=success&msg=new+row+added");
}

不过,我不确定你想用 '$t_no''$t_year' 做什么,但我敢打赌这是不对的。

【讨论】:

  • 和逻辑运算符==
  • @TomeӾsanS 我在更新中错过了吗(在您发表评论时正在写作)。
  • @JeremyMiller 谢谢你。有用。我对 PHP 真的很陌生。我什至不知道如何写一个数组。再次感谢!
【解决方案2】:

您无需使用开关盒。使用以下代码存储相关月份及其值。试试这个……

if ($_GET['do'] == 'insert')
{   
    $p_aid          = $_GET['id'];
    $t_no           = $_POST['t_no'];       
    $t_month        = $_POST['t_month']; //dropdown
    $t_value        = $_POST['t_value']; //value based on month selected
    $t_year         = $_POST['t_year']; 


    $sql = "INSERT INTO tbl_detail (p_aid,t_no, t_year, $t_month) ";
    $sql .= "VALUES ($p_aid,'$t_no','$t_year','$t_value')";
    mysql_query($sql);

}

【讨论】:

  • 如果你在 $t_month 有相同的列名,那么你就用这个。
【解决方案3】:

你可以试试这个

if ($_GET['do'] == 'insert')
    {   
        $p_aid          = $_GET['id'];
        $t_no           = $_POST['t_no'];       
        $t_month        = $_POST['t_month']; //dropdown
        $t_value        = $_POST['t_value']; //value based on month selected
        $t_year         = $_POST['t_year']; 


        $sql = "INSERT INTO tbl_detail (p_aid,t_not_year) ";
        $sql .= "VALUES ($p_aid,'$t_no''$t_year')";
        mysql_query($sql);

        $col="t_".strtolower($t_month);
        $sql = "UPDATE tbl_detail SET $col = '$t_value'";      
        $sql .= "WHERE p_aid = $p_aid AND t_no = $t_no";
        mysql_query($sql);

        redirect("basicview.php?id=$p_aid&type=success&msg=new+row+added");
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-31
    • 2015-09-07
    • 2012-09-10
    • 2021-11-25
    • 2015-11-06
    相关资源
    最近更新 更多