【问题标题】:Using PHP to flag a form for insert or update function使用 PHP 标记表单以进行插入或更新功能
【发布时间】:2012-03-09 09:30:04
【问题描述】:

想知道实现某事的最佳方式是什么。

总而言之,我有一个通过 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>

【问题讨论】:

    标签: php sql ajax forms


    【解决方案1】:

    通过发送或不发送 POST 数据项这一事实,您已经在客户端知道它是更新还是插入。所以我会在原始页面中编写 JS 来控制提交以及如何处理发回的数据。没有看到页面的其余部分就很难编写代码,但是在伪代码级别,您可以执行以下操作:

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

    希望这在某些方面有用。

    【讨论】:

    • 只是补充一点:永远不要在 SQL 查询中直接使用表单数据 - 现在 SQL 注入攻击发生了。确保先清理数据。
    【解决方案2】:

    您应该使用本机 mySQL:

    INSERT ... ON DUPLICATE KEY UPDATE
    

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2014-05-03
        • 2015-08-21
        • 1970-01-01
        • 2021-03-30
        • 1970-01-01
        • 1970-01-01
        • 2014-07-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多