You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将platenumber设为Firebase插入子节点时的自定义唯一键?

修改Firebase数据提交代码,使用车牌号作为自定义唯一键

原来的代码通过push()方法让Firebase自动生成随机唯一键,要把车牌号(platenumber)设为子节点的自定义键,只需替换push()为指定child路径后调用set()方法即可,具体修改如下:

核心修改点

将这段生成自动键的代码:

$postRef_result = $database->getReference($ref_table)->push($postData);

替换为:

// 以platenumber作为子节点的唯一键
$postRef_result = $database->getReference($ref_table)->child($platenumber)->set($postData);

完整修改后的代码

if(isset($_POST['submit']))
{
    $drivername = $_POST['drivername'];
    $operatorname = $_POST['operatorname'];
    $mtop = $_POST['mtop'];
    $platenumber = $_POST['platenumber'];
    $image = time() . '_' . $_FILES['image']['name'];

    $target = 'images/' . $image;

    if (move_uploaded_file($_FILES['image']['tmp_name'],$target)) {

        $postData = [
            'drivername'=>$drivername,
            'operatorname'=>$operatorname,
            'mtop'=>$mtop,
            'platenumber'=>$platenumber,
            'img'=>$image,
        ];
        $ref_table= "details";
        // 修改为使用车牌号作为节点唯一键
        $postRef_result = $database->getReference($ref_table)->child($platenumber)->set($postData);
        
        if( $postRef_result ) {
           echo '<h3 align="center" class="text text-success my-2">Data Save Success !</h3>';
        }else{
            // 原代码的mysqli_error是MySQL错误处理,替换为Firebase专属错误捕获
            die($database->getError());
        }
      
    }else{
        $msg = "Failed to upload";
        $css_class = "alert-danger";
    } 
}

额外注意事项

  • 防止数据覆盖:如果存在相同车牌号的记录,新数据会直接覆盖旧数据。若要避免这种情况,可在写入前先检查节点是否存在:
    $ref = $database->getReference($ref_table)->child($platenumber);
    $snapshot = $ref->getSnapshot();
    if($snapshot->exists()){
        echo '<h3 align="center" class="text text-danger my-2">该车牌号已存在记录!</h3>';
    }else{
        $postRef_result = $ref->set($postData);
        echo '<h3 align="center" class="text text-success my-2">Data Save Success !</h3>';
    }
    
  • 错误处理修正:原代码中的mysqli_error($conn)是针对MySQL的错误处理逻辑,和Firebase无关,建议替换为Firebase自身的$database->getError()方法获取错误信息。

内容的提问来源于stack exchange,提问作者Richmon Delos Reyes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 05:22:33