嘿,我有一个名为STATUS的字段,显示为1或隐藏0。我的代码如下。我正在使用jQuery编辑就地编辑器。每次更新它都会创建一个我想要的新ROW,但是我只希望新的一个有STATUS = 1而其他的都是0.我有什么想法会怎么做?
<?php
include "../../inc/config.inc.php";
$temp = explode("_", $_REQUEST['element_id'] );
$field = $temp[0];
$id = $temp[1];
$textboxval = stripslashes(mysql_real_escape_string(preg_replace('/[\$]/',"",$_REQUEST["update_value"])));
$query = "INSERT INTO notes ($field,status,date,c_id) VALUES ('$textboxval','1',NOW(),'$id')";
mysql_query($query);
echo($_REQUEST['update_value']);
?>
答案 0 :(得分:2)
我不确定你究竟是什么意思 - 你想要除了新的条目以外的所有条目都是status = 0吗?如果是这样,只需在插入之前发布更新:
UPDATE notes SET status = 0
但是,我还应该注意到你有一个潜在的SQL注入需要担心。通过在应用“mysql真实转义字符串”之后删除斜杠,您可能允许某人在您的SQL语句中放置将执行任意SQL语句的文本。
答案 1 :(得分:0)
这样的事情,对不起以前的帖子,我第一次读错了然后回去了:
<?php
include "../../inc/config.inc.php";
$temp = explode("_", $_REQUEST['element_id'] );
$field = $temp[0];
$id = $temp[1];
$textboxval = mysql_real_escape_stringstripslashes((preg_replace('/[\$]/',"",$_REQUEST["update_value"])));
// set older entries to 0 - to not show but show in history
$hide_notes = "UPDATE notes SET status = 0";
mysql_query($hide_notes);
// add new entry with status of 1 to show only latest note
$query = "INSERT INTO notes ($field,status,date,c_id) VALUES ('$textboxval','1',NOW(),'$id')";
mysql_query($query);
echo($_REQUEST['update_value']);
?>
我刚刚遇到一个问题,我没有设置我的桌子不允许我一次显示多个客户端,我将拥有众多客户,我的计划哈哈
答案 2 :(得分:0)
您真的想要获取新生成的行的ID,然后触发UPDATE,其中ID为的所有行不是新行,例如
UPDATE notes SET status = 0 WHERE id != $newly_generated_id
如果表中的ID列使用AUTO_INCREMENT,您可以通过“SELECT LAST_INSERT_ID()”获取其ID,然后在UPDATE语句中使用该语句中的返回值。
伪代码:
$insert = mysql_query("INSERT INTO ...");
$last_id = mysql_query("SELECT LAST_INSERT_ID()");
$update = mysql_quqery("UPDATE notes SET status = 0 WHERE id != $last_id");
这种方法的唯一警告是你可能有一个短暂的时刻,其中2行有status = 1(你的INSERT和UPDATE之间的时间)。我会在事务中包含所有这些,以使整个单元更具原子性。