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

上传区域添加required属性遇阻及选择AKTIF选项时状态无法写入数据库的技术求助

问题分析与解决方案

我来帮你搞定这两个问题,咱们一步步拆解:

一、解决「选择AKTIF提交后状态无法写入数据库」的问题

你的PHP逻辑有个关键漏洞:当选择AKTIF时,上传区域是隐藏的,此时$_POST['uploaddiniyah']为空,代码会进入if(empty($_POST['uploaddiniyah']))分支,但这个分支里完全没有执行更新状态的SQL语句,只设置了错误信息,导致数据库里的状态根本没被修改!

另外,判断文件是否选择的逻辑也错了——文件上传的信息存在$_FILES数组里,不能用$_POST判断。修正后的PHP代码如下:

<?php
if (isset($_POST['ubah'])) {
    $status = $_POST['STATUS'];
    $id = $_GET['id'];
    
    // 优先更新状态,无论选择哪个选项都执行这一步
    $updateStatus = $koneksi->query("UPDATE diniyah SET status='$status' WHERE ID='$id'");
    
    // 只有选择「Tidak Aktif」时,才处理文件上传验证
    if ($status === "Tidak Aktif") {
        if(empty($_FILES['uploaddiniyah']['name'])){
            $err="mohon pilih file";
        }else{
            $namafoto = $_FILES['uploaddiniyah']['name'];
            $lokasifoto = $_FILES['uploaddiniyah']['tmp_name'];
            move_uploaded_file($lokasifoto, "../fotodokumen/" . $namafoto);
            
            $update_gambar=mysqli_query($koneksi,"UPDATE diniyah SET uploaddiniyah='$namafoto' WHERE ID='$id'");
            echo "<script>alert('Status pegawai telah diubah beserta dokumen');</script>";
        }
    } else {
        // AKTIF状态下,直接提示修改成功
        echo "<script>alert('Status pegawai telah diubah');</script>";
    }
}
?>

二、解决「文件输入框添加required属性」的问题

直接给文件输入框加required会有问题:当选择AKTIF时,隐藏的输入框依然会被浏览器验证,导致表单无法提交。所以需要动态控制required属性,或者在表单提交前做针对性验证。

方案1:通过JS动态切换required属性

修改你的JS代码,在切换状态时给文件输入框添加/移除required:

<script>
 let statusSelect = document.getElementById('STATUS');
 let uploadDiv = document.getElementById('upload');
 let fileInput = document.querySelector('input[name="uploaddiniyah"]');

 statusSelect.onchange = function() {
    if(this.value === "Tidak Aktif"){
        uploadDiv.style.display = 'block';
        fileInput.setAttribute('required', ''); // 添加required
    }else{
        uploadDiv.style.display = 'none';
        fileInput.removeAttribute('required'); // 移除required
    }
 }
</script>

方案2:表单提交前手动验证

如果不想用动态属性,也可以在表单提交时做判断,确保选择Tidak Aktif时文件已被选择:

<form method="post" enctype="multipart/form-data" onsubmit="return validateForm()">
 <!-- 你的表单内容 -->
</form>

<script>
 function validateForm() {
    const status = document.getElementById('STATUS').value;
    const fileInput = document.querySelector('input[name="uploaddiniyah"]');
    
    if (status === "Tidak Aktif" && fileInput.files.length === 0) {
        alert("Mohon pilih file dokumen");
        return false; // 阻止表单提交
    }
    return true; // 允许提交
 }

 // 保留原来的显示/隐藏逻辑
 let statusSelect = document.getElementById('STATUS');
 let uploadDiv = document.getElementById('upload');
 statusSelect.onchange = function() {
    uploadDiv.style.display = this.value === "Tidak Aktif" ? 'block' : 'none';
 }
</script>

最后提个小细节:你的HTML代码里有个多余的</textarea>标签(在上传区域的div里),记得删掉它,不然会导致HTML结构错乱。

内容的提问来源于stack exchange,提问作者M Bachtiar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 07:19:05