PHP插入重复数据无法在master_toko.php展示提示消息求助
问题原因及修复方案
1. 修复 tokoCrud.php 代码错误
核心逻辑错误导致重复校验无法正常返回提示:
isDataTokoExist函数执行查询后没有返回布尔结果,判断逻辑永远不生效- 调用
isDataTokoExist时传入的$namaToko变量未定义 - 检测到重复数据时调用
runQuery传入了未定义的$query变量,会触发SQL错误
修改后的完整代码:
<?php include ('crudAction.php'); function insertData($db, $tableName) { $data = [ 'id_ot' => ' ', 'nama_ot' => $_POST['namaToko'], 'alamat_ot' => $_POST['alamatToko'], 'status_ot' => '1' ]; // 传入正确的参数调用校验函数 if(!isDataTokoExist($db, $_POST['namaToko'])) { $query = buildInsertQuery($tableName, $data); return runQuery($db, $query, 'insert'); } else { // 重复数据无需执行SQL,直接返回错误提示 return [ 'error' => true, 'message' => getMessage('dataDouble') ]; } } function isDataTokoExist($db, $namaToko) { $namaToko = mysqli_real_escape_string($db, $namaToko); // 加转义防SQL注入 $query = "SELECT * FROM master_toko WHERE nama_ot = '$namaToko'"; $result = mysqli_query($db, $query); // 返回是否存在匹配数据 return mysqli_num_rows($result) > 0; } ?>
2. 修复 messageBox.php 样式类反转错误
当前状态判断逻辑写反,成功状态错误分配了错误类,修改后代码:
<?php if(isset($_GET['error']) && isset($_GET['message'])) { $error = $_GET['error']; $message = urldecode($_GET['message']); // 加url解码防止特殊字符显示异常 $messageClass = $error === 'false' ? 'success-message' : 'error-message'; ?> <div class="message <?php echo $messageClass; ?>"> <?php echo $message; ?> </div> <?php } ?>
3. 调整 master_toko.php 提示框位置
将提示框放在class="content"的section区块后,调整代码位置:
找到原来的代码段:
<section class="content"> <?php include 'library/services/messageBox.php'; ?>
修改为:
<section class="content"> <div class="container-fluid"> <!-- 原有内容保持不变 --> </div> </section> <!-- 提示框移到section闭合标签之后 --> <?php include 'library/services/messageBox.php'; ?>
4. 可选优化:formAction.php 跳转前对message做url编码
防止消息中的特殊字符导致跳转参数异常,修改跳转代码:
if (!$result['error']) { header('location: ' . $_REQUEST['pageReferrer'] . '&error=false&message=' . urlencode($result['message'])); } else { header('location: ' . $_REQUEST['pageReferrer'] . '&error=true&message=' . urlencode($result['message'])); }
内容的提问来源于stack exchange,提问作者Ridho Wisnu
相关产品推荐
相关产品推荐

