使用PHP为插入或更新函数标记窗体


Using PHP to flag a form for insert or update function

想知道实现目标的最佳方式是什么。

总之,我有一个通过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来控制提交以及如何处理发送回来的数据。编写代码时很难不看到页面的其余部分,但在伪代码级别,您可以执行以下操作:

  1. 使用onsubmit()捕获原始提交操作
  2. 查看是否提供了targID
  3. 如果是,则向服务器发送更新请求。当行数据返回时,填写表单详细信息并显示表单(例如,您可以"显示"包含表单的隐藏DIV)
  4. 如果没有-你需要寄什么吗?-只显示一个空表单(再次显示以前隐藏的DIV)

希望这在某种程度上有用。

您应该使用本机mySQL:

INSERT ... ON DUPLICATE KEY UPDATE

请参阅:http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

在客户端确定这一点有什么意义?这有什么不同吗?

对于服务器端,我会使用从隐藏字段传递的$targID。如果它大于零-更新,否则-插入。