我不知道如何解决这个困扰我几天的问题。我有一个表单,在选中复选框时更新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,给复选框一个值,当用户选择它时,该值将动态更新。然后,只有THOSE复选框将被放入数组中。这可能吗?有更好的解决方案吗?我甚至不确定我是否可以用Javascript来解决如何做到这一点。答案可能在于我的mysql代码是如何编写的?
-
编辑:好的,更多信息。我正在进行的SQL查询 - 前两个是擦除所有内容(如果复选框是UNCHECKED),然后接下来他们根据发布时检查的复选框更新SQL查询。
然而,我认为这是一个不好的方法。为什么强制数据库首先清除paymetreceived,paymetdate的所有数据?此问题的另一个问题是* 所有后续复选框,无论多长时间检查它们,都会像现在一样在SQL查询中进行更新。 *必须有办法更新它。我只是不确定如何做到这一点。任何想法?
答案 0 :(得分:2)
您未在此查询中按ID过滤:
$query = "UPDATE transactions SET paymentreceived=NULL";
$query = "UPDATE transactions SET paymentdate='0000-00-00'";
尝试添加:WHERE id IN ($paymentr2)";
答案 1 :(得分:0)
问题在于您的前2个sql UPDATE语句。您没有提供WHERE子句,因此将更新所有记录。你可以添加:
WHERE id IN ($paymentr2)
到你的前两个UPDATE语句