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

PHP带URL ID参数页面表单提交无法入库且无法跳转回原页问题

问题原因梳理

1. 核心问题:表单提交时未传递会员ID参数

你在lid.php页面的两个表单都没有将当前页面URL里的lidnummer(会员ID)传给后端处理逻辑create.php,导致create.php中$lidnummer = $_GET['lidnummer']完全拿不到有效值,插入数据库时外键字段为空,直接触发写入失败。

2. 跳转语法错误

成功插入后的header跳转语句字符串拼接错误,生成的跳转URL携带多余的单引号,导致跳转路径失效:

// 错误写法:双引号内嵌套单引号拼接逻辑完全错误
header("location: ../lid.php?lidnummer=' . $lidnummer . '");
// 最终生成的URL会变成类似 lid.php?lidnummer=' . 4 . ' 格式错误无法正常访问

3. 其他潜在问题

  • 会员查询SQL的JOIN语句未写关联条件,会产生笛卡尔积,返回大量错误冗余数据
  • 会员查询直接拼接用户输入的lidnummer参数,存在SQL注入风险
  • INSERT语句未指定字段名,后续表结构调整会直接导致写入失败
  • 插入失败后依赖JS跳转,用户禁用JS时会无法返回原页面

修复方案

步骤1:修改lid.php的表单,新增隐藏字段传递会员ID

在两个表单内部都添加隐藏input,把当前页面的会员ID随表单一起提交:

<form action="includes/create.php" method="POST">
    <!-- 新增隐藏字段传递会员ID -->
    <input type="hidden" name="lidnummer" value="<?php echo htmlspecialchars($lidnummer); ?>">
    <b>
        <label for="telefoonnummer">
            Telefoonnummer:
            <input type="text" name="telefoonnummer">
        </label>
        <button type="submit" name='add_telnr'>Voeg telnr toe</button>
    </b>
</form><br>

<form action="includes/create.php" method="POST">    
    <!-- 新增隐藏字段传递会员ID -->
    <input type="hidden" name="lidnummer" value="<?php echo htmlspecialchars($lidnummer); ?>">    
    <b>
        <label for="email">
            Email:
            <input type="text" name="email">
        </label>
        <button type="submit" name='add_email'>Voeg email toe</button>
    </b>
</form><br>

步骤2:修改create.php的手机号新增逻辑

邮箱新增逻辑可以参照这段同步修改:

if(isset($_POST['add_telnr'])) {
    $telnr = get_post($conn, 'telefoonnummer');
    // 改为从POST参数拿会员ID,并且做非空校验
    $lidnummer = $_POST['lidnummer'] ?? '';
    if(empty($lidnummer) || !is_numeric($lidnummer)) {
        echo '<script> alert("参数错误,请重试") </script>';
        echo '<script> window.location.href = "../" </script>';
        exit();
    }

    // INSERT语句指定字段名,避免后续表结构变更导致错误
    $stmt_telnr = $conn->prepare("INSERT INTO telefoonnummers (telefoonnummer, lidnummer) VALUES(?,?)");
    $stmt_telnr->bind_param('si', $telnr, $lidnummer);
    $execute_result = $stmt_telnr->execute();

    if(!$execute_result || $stmt_telnr->affected_rows != 1) { 
        echo '<script> alert("Telefoonnummer niet toegevoegd. Waarschijnlijk bestaat deze al. Controleer de lijst en/of probeer het opnieuw.") </script>';
        echo '<script> window.location.href = "../lid.php?lidnummer=' . $lidnummer . '" </script>';         
    } else {
        // 修正跳转语法
        header("Location: ../lid.php?lidnummer=" . $lidnummer);
    }
    $stmt_telnr->close();
    exit();
}

步骤3:优化lid.php的会员查询逻辑,修复SQL问题并避免注入

if(isset($_GET['lidnummer'])) { 
    $lidnummer = $_GET['lidnummer']; 
    // 修正JOIN语句,补充关联条件(请替换为你实际的表关联字段名),并且用预处理查询
    $select_lid_query = $conn->prepare("SELECT * FROM leden 
                            JOIN postcodes ON leden.postcode_id = postcodes.id
                            WHERE lidnummer = ?");
    $select_lid_query->bind_param('i', $lidnummer);
    $select_lid_query->execute();

    $select_lid_result = $select_lid_query->get_result();
    if($select_lid_result->num_rows == 0) die ("<span style='color:red'>" . "Kon geen gegevens van de database ophalen. 
                                Klik a.u.b. op het pijltje terug in de browser en probeert u het opnieuw" . "</span>");

    $gegevens_lid = $select_lid_result->fetch_array(MYSQLI_ASSOC);

    // 后续原有逻辑保持不变
    foreach($gegevens_lid as $data => $info) {
        if($data == 'lidnummer' || $data == 'adres' || $data == 'woonplaats') {
            echo '<tr>';
            echo '<td><b>' . ucfirst(htmlspecialchars($data)) . '</b></td>';
            echo '<td>' . htmlspecialchars($info) . '</td>';
            echo '<td> ---- </td>';
            echo '<td> ---- </td>';
            echo '</tr>';
        } else {
            echo '<tr>';
            echo '<td><b>' . ucfirst(htmlspecialchars($data)) . '</b></td>';
            echo '<td>' . htmlspecialchars($info) . '</td>';
            echo '<td> update </td>';
            echo '<td> ---- </td>';
            echo '</tr>';
        }
    }

    toon_contactgegevens('telefoonnummers', $gegevens_lid, $conn, 'telefoonnummer', 'lid_table');
    toon_contactgegevens('emails', $gegevens_lid, $conn, 'email', 'lid_table');

    $select_lid_result->close();
    $conn->close();
} 

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 02:45:04