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

如何在点击按钮后用PHP更新MySQL表的x、y列值?

解决点击Update按钮无法获取x/y值并更新MySQL的问题

首先,咱们先梳理下你遇到的核心问题:Undefined index警告和无法获取输入框值更新数据库,这俩其实是关联的,下面一步步给你拆解修复:

1. 先解决Undefined index警告

你代码里直接写了:

$getx = $_GET['forx'];
$gety = $_GET['fory'];

这里有两个明显问题:

  • 你的表单用的是method=post,但你却用$_GET去取值,应该对应使用$_POST
  • 不管表单有没有提交,你都直接去取这两个变量,当页面首次加载或者没触发Update提交时,这两个索引根本不存在,自然会抛出Undefined index警告

修复方式:改成条件判断后再安全取值,PHP7+可以用更简洁的空合并运算符:

$getx = $_POST['forx'] ?? '';
$gety = $_POST['fory'] ?? '';

如果是低版本PHP,就用三元运算符:

$getx = isset($_POST['forx']) ? $_POST['forx'] : '';
$gety = isset($_POST['fory']) ? $_POST['fory'] : '';

2. 修复表单结构,确保x/y值能被提交

你现在的代码里,图片点击的表单、x/y输入框的表单、Location下拉框是分散开的!这样点击Update按钮时,根本不会把x/y的输入值一起提交到后台,因为它们不在同一个表单域里。

要把所有需要一起提交的元素(x输入框、y输入框、Location下拉框、Update按钮)放在同一个<form>标签里,示例如下:

<?php if (isset($img) && mysqli_num_rows($img)) : ?>
<?php while($row = mysqli_fetch_assoc($img)) {
    $filepath = $row['map_image_filepath'];
    $foo_x = $_POST['foo_x'] ?? '';
    $foo_y = $_POST['foo_y'] ?? '';
    if(file_exists($filepath)) { ?>
        <!-- 合并所有需要提交的元素到同一个表单 -->
        <form action='' method='post'>
            <!-- 图片点击区域(点击后会自动提交foo_x/foo_y) -->
            <input type='image' src='<?= $filepath ?>' name='foo' style='cursor:crosshair; border: 2px outset #000;' height='300px' width='400px'>
            
            <!-- x/y输入框:注意id要唯一,之前两个输入框用了同一个id是无效的 -->
            <div class='form-group form-inline' style='margin-top: 35px;'>
                <label class='form-inlineinput' for='inlineinput_x'> X </label>
                <input class='form-control form-control-sm' type='text' id='inlineinput_x' value='<?= $foo_x ?>' name='forx' size='10px'>
            </div>
            <div class='form-group form-inline'>
                <label class='form-inlineinput' for='inlineinput_y'> Y </label>
                <input class='form-control form-control-sm' type='text' id='inlineinput_y' value='<?= $foo_y ?>' name='fory' size='10px'>
            </div>

            <!-- Location下拉框和Update按钮 -->
            <select name='loctn' class='dropdown' style='margin: 10px 0;'>
                <option value=''>Choose Location</option>
                <?php 
                // 先判断selectedbldg是否有效,避免SQL错误
                if (!empty($selectedbldg)) {
                    $lquery = mysqli_query($con, "SELECT location_ID, location_name, building_ID FROM location WHERE building_ID = {$selectedbldg}");
                    while ($row_loc = mysqli_fetch_assoc($lquery)) : ?>
                        <option value='<?= $row_loc['location_ID'] ?>' <?= $row_loc['location_ID'] == $selectedloctn ? 'selected' : '' ?>>
                            <?= $row_loc['location_name'] ?>
                        </option>
                    <?php endwhile;
                }
                ?>
            </select>
            <input type='submit' name='update_loc' class='btn btn-primary btn-xs' value='Update'>
        </form>
<?php } else {
    echo "<img src='../img/no map.jpg' height='300' width='400'>";
} } ?>

3. 修正Update逻辑的触发条件与安全性

你之前的代码是当!empty($_POST['loctn'])时执行更新,但其实应该判断是否点击了Update按钮(比如isset($_POST['update_loc'])),同时要必须用预处理语句防止SQL注入(直接把变量拼进SQL里是非常危险的操作)。

修复后的Update逻辑:

$selectedloctn = null;
$getx = $_POST['forx'] ?? '';
$gety = $_POST['fory'] ?? '';

// 当点击Update按钮,且所有必要参数都不为空时执行更新
if (isset($_POST['update_loc']) && !empty($_POST['loctn']) && !empty($getx) && !empty($gety)) {
    $selectedloctn = $_POST['loctn'];
    // 使用预处理语句,避免SQL注入
    $stmt = $con->prepare("UPDATE location SET x=?, y=? WHERE location_ID = ?");
    // 绑定参数:s=字符串,i=整数,根据你的数据库字段类型调整
    $stmt->bind_param("ssi", $getx, $gety, $selectedloctn); 
    $stmt->execute();
    
    // 可选:添加更新反馈
    if ($stmt->affected_rows > 0) {
        echo "<p style='color:green;'>坐标更新成功!</p>";
    } else {
        echo "<p style='color:red;'>更新失败,请检查参数!</p>";
    }
    $stmt->close();
}

4. 其他细节优化

  • 数据库连接错误处理:可以加个判断,避免后续操作无意义:
$con = new mysqli("localhost", "root", "", "user_databases");
if ($con->connect_error) {
    die("数据库连接失败: " . $con->connect_error);
}
  • 图片点击后的坐标赋值:图片作为提交按钮时,会自动把点击坐标以foo_x和foo_y的参数提交,这个逻辑是没问题的,只要在同一个表单里,输入框就能获取到对应值。

按照上面的步骤修改后,应该就能解决Undefined index警告,并且成功获取x/y值更新数据库了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:41:40