如何将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
相关产品推荐
相关产品推荐

