【问题标题】:Update feature not updating, why is ID not being passed?更新功能没有更新,为什么没有通过ID?
【发布时间】:2026-02-13 04:30:02
【问题描述】:

首先注意:我已经查看了一些关于 SO 的建议答案,不幸的是我仍然没有找到答案。

我注意到在我的更新语句中,我试图编辑的项目的 ID 值没有被传递给 editUrl.php。但是,如果我硬编码一个 id 号(即WHEREid= '13'";),更新就会完美运行。

问题:为什么'id'的值没有被传递给editUrl.php?

代码:

editUrlForm.php 文件:

<!-- Include AJAX Framework -->
<script src="js/ajax.js" language="javascript"></script>

<!--Include Database connections info-->
<?php include('config.php'); ?>

<?php

    $id = $_GET['id'];

    if(isset($_GET['id']))  {

        $cdquery="SELECT * FROM links WHERE `id` = '$id'";
        $cdresult=mysql_query($cdquery) or die ("Query to get data from first table failed: ".mysql_error());

        while ($row = mysql_fetch_assoc($cdresult)) {

            echo "Edit URL:";
            echo "<form action='javascript:update()' method='get'>";
            echo "<table>";

            echo "<tr>";
            echo "<th>URL ID:</th> <td><label for='urlId'>". $row['id'] . "</label></td>";
            echo "</tr>";

            echo "<tr>";
            echo "<th>Name:</th> <td><input name='name' type='text' id='name' value='". $row['name'] . "' size'30'></input></td>";
            echo "</tr>";

            echo "<tr>";
            echo "<th>Release Time:</th> <td><input name='releaseTime' type='time' id='releaseTime' value='". $row['releaseTime'] . "'></input></td>";
            echo "</tr>";

            echo "<tr>";
            echo "<th>Release Day:</th> <td><select name='releaseDay' id='releaseDay' value='". $row['releaseDay'] . "'> <option value='monday'>Monday</option> <option value='tuesday'>Tuesday</option> <option value='wednesday'>Wednesday</option> <option value='thursday'>Thursday</option> <option value='friday'>Friday</option> <option value='saturday'>Saturday</option> <option value='sunday'>Sunday</option> </select></td>";
            echo "</tr>";

            echo "<tr>";
            echo "<th>Category:</th> <td><select name='category' id='category' value='". $row['category'] . "'> <option value='television'>Television</option> <option value='movie'>Movie</option> <option value='music'>Music</option> </select></td>";
            echo "</tr>";

            echo "<tr>";
            echo "<th>Genre:</th> <td><select name='genre' id='genre' value='". $row['genre'] . "'> <option value='action'>Action</option> <option value='drama'>Drama</option> <option value='comedy'>Comedy</option> <option value='thriller'>Thriller</option> <option value='horror'>Horror</option> <option value='childrens'>Childrens</option> <option value='romantic'>Romantic</option> </select></td>";
            echo "</tr>";

            echo "<tr>";
            echo "<th>URL:</th> <td><input name='url' type='text' id='url' value='". $row['url'] . "' size'250'></input></td>";
            echo "</tr>";

            echo "</table><br />";
            echo "<input type='submit' name='Submit' value='Edit URL'/>";
            echo "<input type='button' value='Cancel' onClick='actionCancel();return false;'/>";
            echo "</FORM>";
        }

    }

?>

ajax 函数:

function update() 
{

    var name= encodeURIComponent(document.getElementById('name').value);
    var releaseTime = encodeURIComponent(document.getElementById('releaseTime').value);
    var releaseDay = encodeURIComponent(document.getElementById('releaseDay').value);
    var category = encodeURIComponent(document.getElementById('category').value);
    var genre = encodeURIComponent(document.getElementById('genre').value);
    var url= encodeURIComponent(document.getElementById('url').value);

    xmlhttp.open('get', 'editUrl.php?name='+name+'& releaseTime=' +releaseTime+'& releaseDay=' +releaseDay+'& category=' +category+'& genre=' +genre+'& url=' +url);
    xmlhttp.onreadystatechange = urlRefresh;
    document.getElementById("content02").innerHTML = "Processing Request. Please wait a moment...";
    xmlhttp.send(null);
    return;
}

editUrl.php 文件:

<!-- Include Database connections info. -->
<?php include('config.php'); ?>

<?php

    $id = $_GET['id'];
    $name = $_GET['name'];
    $releaseTime = $_GET['releaseTime'];
    $releaseDay = $_GET['releaseDay'];
    $category = $_GET['category'];
    $genre = $_GET['genre'];
    $url = $_GET['url'];

    $editUrl_sql = "UPDATE `links` SET `id` = '{$id}', `name` = '{$name}', `releaseTime` = '{$releaseTime}', `releaseDay` = '{$releaseDay}', `category` = '{$category}', `genre` = '{$genre}', `url` = '{$url}' WHERE `id` = '{$id}'";

    $editUrl_sql= mysql_query($editUrl_sql) or die(mysql_error());

mysql_close($link);

?>

【问题讨论】:

  • 您必须发布所有代码吗?你自己调试过吗?如果你这样做了,你的范围会比这缩小得多。
  • “为什么'id'的值没有被传递给editUrl.php?” - 因为你没有将任何名为id的参数放入查询字符串中那个网址……?

标签: php mysql ajax edit


【解决方案1】:

您没有将 id 作为参数传递

你的密码应该是这样的:

var id = encodeURIComponent(document.getElementById('urlId').value);

xmlhttp.open('get', 'editUrl.php?name='+name+'&releaseTime=' +releaseTime+'&releaseDay=' +releaseDay+'&category=' +category+'&genre=' +genre+'&url=' +url+'&id=' +id);

【讨论】:

  • 嗨,这显然是我的疏忽,诚然,我很愚蠢。我添加了这段代码。但是,现在我收到此错误“未捕获的类型错误:无法读取 null 的属性‘值’”
  • 可能是因为在第一次调用时,id 没有设置/定义为 get 变量