【问题标题】:Get the last checked checkboxes获取最后选中的复选框
【发布时间】:2011-06-09 20:57:54
【问题描述】:

我不确定如何解决这个困扰我几天的问题。我有一个表单可以在选中复选框时更新 MySQL 中的用户记录。现在,我的表单就是这样做的:

if (isset($_POST['Update'])) {  
        $paymentr = $_POST['paymentr']; //put checkboxes array into variable
        $paymentr2 = implode(', ', $paymentr); //implode array for mysql
        $query = "UPDATE transactions SET paymentreceived=NULL";
        $result = mysql_query($query);
        $query = "UPDATE transactions SET paymentdate='0000-00-00'";
        $result = mysql_query($query);
        $query = "UPDATE transactions SET paymentreceived='Yes' WHERE id IN ($paymentr2)";
        $result = mysql_query($query);
        $query = "UPDATE transactions SET paymentdate=NOW() WHERE id IN ($paymentr2)"; 
        $result = mysql_query($query);

        foreach ($paymentr as $v) { //should collect last updated records and put them into variable for emailing. 

            $query = "SELECT id, refid, affid FROM transactions WHERE id = '$v'";

            $result = mysql_query($query) or die("Query Failed: ".mysql_errno()." - ".mysql_error()."<BR>\n$query<BR>\n");
            $trans = mysql_fetch_array($result, MYSQL_ASSOC);

            $transactions .= '<br>User ID:'.$trans['id'].' -- '.$trans['refid'].' -- '.$trans['affid'].'<br>'; 


        }


    }   

不幸的是,它会使用最新日期更新所有用户记录,这不是我想要的。我想到的另一种选择是,通过 Javascript,为复选框提供一个值,该值将在用户选择它时动态更新。然后,只有那些复选框会被放入数组中。这可能吗?有更好的解决方案吗?我什至不确定我是否可以用 Javascript 来解决这个问题。答案或许在于我的mysql代码是怎么写的?

--

编辑:好的,只是更多信息。我正在进行的 SQL 查询 - 前两个是清除所有内容(以防复选框未选中),然后他们根据发布时选中的复选框更新 SQL 查询。

但是,我认为这是一种不好的方法。为什么要强制数据库首先清除 paymetreceived、paymetdate 的所有数据?这样做的问题还在于,*所有后续的复选框,无论多久之前被选中,都会像现在一样在 SQL 查询中更新。*必须有一种方法更新它更好。我只是不知道该怎么做。有什么想法吗?

【问题讨论】:

    标签: php javascript mysql forms checkbox


    【解决方案1】:

    您在此查询中没有按 id 过滤:

     $query = "UPDATE transactions SET paymentreceived=NULL";
     $query = "UPDATE transactions SET paymentdate='0000-00-00'";
    

    尝试添加:WHERE id IN ($paymentr2)";

    【讨论】:

      【解决方案2】:

      问题出在您的前 2 个 sql UPDATE 语句中。您没有提供 WHERE 子句,因此这将更新您的所有记录。您可以添加:

       WHERE id IN ($paymentr2)
      

      到您的前两个 UPDATE 语句

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-20
        • 2018-08-02
        • 1970-01-01
        相关资源
        最近更新 更多