想知道实现目标的最佳方式是什么。
总之,我有一个通过ajax加载的表单,用于更新和向数据库中插入新行。为了确定它是更新还是插入,我使用以下代码(更新的表单使用mysql查询来填充表单字段)。
我的代码似乎很草率,不是最佳实践。有没有其他建议,什么是最好的方法来做到这一点?
<?
require_once("config.php");
$insert = false;
$update = false;
$targID = 0;
if(isset($_POST['targID'])){
$targID = $_POST['targID'];
$targRow = mysql_fetch_array(mysql_query("select * from events where eventid=$targID"));
$update = true;
}else{
$insert = true;
}
?>
<script type="text/javascript">
var insert = <? echo $insert; ?>+0;
var update = <? echo $update; ?>+0;
......javascript button events, validation etc based on inssert/update
</script>
通过发送或不发送POST数据项,您已经在客户端中知道这是更新还是插入。所以我会在原始页面中编写JS来控制提交以及如何处理发送回来的数据。编写代码时很难不看到页面的其余部分,但在伪代码级别,您可以执行以下操作:
- 使用onsubmit()捕获原始提交操作
- 查看是否提供了targID
- 如果是,则向服务器发送更新请求。当行数据返回时,填写表单详细信息并显示表单(例如,您可以"显示"包含表单的隐藏DIV)
- 如果没有-你需要寄什么吗?-只显示一个空表单(再次显示以前隐藏的DIV)
希望这在某种程度上有用。
您应该使用本机mySQL:
INSERT ... ON DUPLICATE KEY UPDATE
请参阅:http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html
在客户端确定这一点有什么意义?这有什么不同吗?
对于服务器端,我会使用从隐藏字段传递的$targID。如果它大于零-更新,否则-插入。