-1

我正在为我的项目创建一个编辑用户配置文件。我遇到了这个错误“注意:未定义的索引:第 18 行 C:\xampp\htdocs\HelloWorld\EditProfile.php 中的用户 ID”。我花了一个小时试图找出错误的原因,但我似乎找不到它。我在这里遵循了本指南php - 论坛帖子的“编辑”功能,这是我的代码:

编辑配置文件.php

<?php 
// connect to SQL
$dbcnx = mysql_connect("localhost", "root", "2345fypj");
if (!$dbcnx)
  {
  echo( "<P>Unable to connect to the database server at this time.</P>" );
  exit();
}

// connect to database
$dbcon = mysql_select_db("my_db", $dbcnx);
if (!$dbcon) {
  echo( "<P>Unable to locate DB table at this time.</P>" );
  exit();
}

//data preparation for the query
$id = intval($_GET['userid']);

// selects title and description fields from database
$sql = "SELECT * FROM user_profile WHERE userid=$id";
$result = mysql_query($sql) or die(mysql_error());        
# retrieved by using $row['col_name']
$row = mysql_fetch_array($result);

?>

<h3>Edit</h3>
<form action="save_edit.php" enctype="multipart/form-data" method="post" name="myForm" />
  <table>
    <tr>
      <td><b>Name</b></td>
      <td><input type="text" size="70" maxlength="100" name="title" value="<?php echo $row['name'] ?>"></td>
    </tr>
    <tr>
      <td><b>Age</b></td>
      <td><input type="text" size="70" maxlength="100" name="title" value="<?php echo $row['age'] ?>"></td>
    </tr>
  </table>
  <input type="hidden" name="id" value="<?php echo $id; ?>" />
  <input name="enter" type="submit" value="Edit">
</form>

<?php 
mysql_close($dbcnx);
?>

save_edit.php

<?php
// connect to SQL
$con = mysql_connect("localhost", "root", "2345fypj");
if (!$con) {
  echo( "<P>Unable to connect to the database server at this time.</P>" );
  exit();
}
// connect to database
$dbcon = @mysql_select_db("user_profile", $con);
if (!$dbcon) {
  echo( "<P>Unable to locate DB table at this time.</P>" );
  exit();
}

#data preparation for the query
$id = intval($_POST["userid"]);
foreach ($_POST as $key => $value) $_POST[$key] = mysql_real_escape_string($value);

$sql = "UPDATE user_profile SET 
        name='$_POST[name]', 
        age='$_POST[age]', 
        WHERE userid=$id";

if (!mysql_query($sql,$con)) {
  die('Error: ' . mysql_error());
}

mysql_close($con);
header ("location: http://www.domain.com/url_to_go_to_after_update");
?>

提前致谢。

4

4 回答 4

1
$id = intval($_GET['userid']);

这意味着将$id变量设置为 URL 中的“userid”变量。例如,如果您的 URL 是 mySite.com?userid=12,则 $id 将设置为“12”。如果您的 URL 在其末尾部分没有“username=aValue”,您将收到您所看到的错误。:)

您可以将其更改为此设置默认值:

$id = (isset($_GET['userid']) ? intval($_GET['userid']) : -1);
于 2012-05-03T02:47:45.483 回答
0

问题是您尝试使用$_GET['userid']未定义的变量。此变量引用 URL 中的 GET 参数(例如EditProfile.php?userid=42)。如果此参数未在 URL 中传递,您将收到此警告。您应该检查变量的存在:

if (!isset($_GET['userid'])) {
  die("Parameter is missing!");  
}

$id = intval($_GET['userid']);
于 2012-05-03T02:46:22.627 回答
0

在尝试访问它之前,您可能应该确保正确设置了该值。事先尝试使用 isset 函数。

http://php.net/manual/en/function.isset.php

于 2012-05-03T02:47:44.417 回答
0

您的代码的问题除了在使用之前使用变量之外,您在使用 intval 设置为默认值时继续执行查询(将始终返回至少 0),如果传递了非数字字符,您将始终更新表中的第 0 行用户,您应该做的是不更新任何内容并返回错误的用户。您在查询中列,后也有胭脂。age

<?php 
if(isset($_POST["userid"]) && is_numeric($_POST["userid"])){

    $_POST = array_walk($_POST,'mysql_real_escape_string');

    $sql = "UPDATE `user_profile` SET `name`='{$_POST['name']}', `age`='{$_POST['age']}' 
            WHERE `userid` = {$_POST['userid']}";
    mysql_query($sql);

}else{
    header('Location: ./failed');
}
?>
于 2012-05-03T03:15:14.053 回答