上传区域添加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
相关产品推荐
相关产品推荐

