我正在为我的项目创建编辑用户个人资料。我遇到了这个错误“ 注意:未定义的索引:第18行的C:\ xampp \ htdocs \ HelloWorld \ EditProfile.php中的userid “。我花了一个小时试图找出错误的原因,但我似乎无法找到它。我在这里遵循了这个指南php -'Edit' function for forum posts and such这是我的代码:
EditProfile.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");
?>
提前致谢。
答案 0 :(得分:1)
$id = intval($_GET['userid']);
这意味着将$id
变量设置为您网址中的“userid”变量。例如,如果您的网址是mySite.com?userid = 12,则$ id将设置为“12”。如果您的网址末尾没有“username = aValue”,您将收到错误消息。 :)
您可以将其更改为此设置默认值:
$id = (isset($_GET['userid']) ? intval($_GET['userid']) : -1);
答案 1 :(得分:0)
问题是你正在尝试使用变量$_GET['userid']
,而它是未定义的。此变量引用URL中的GET参数(例如EditProfile.php?userid=42
)。如果此参数未在URL中传递,您将收到此警告。你应该检查变量是否存在:
if (!isset($_GET['userid'])) {
die("Parameter is missing!");
}
$id = intval($_GET['userid']);
答案 2 :(得分:0)
在尝试访问它之前,您应该确定该值已正确设置。请事先尝试使用isset函数。
答案 3 :(得分:0)
你的代码的问题除了在使用之前使用变量之外,当你使用intval设置为默认值(总是返回至少0)时,你继续执行查询,如果一个非数字字符被传递你总是去要更新表中的第0行用户,您应该做的是不更新任何内容并返回错误的用户。在查询,
列之后,您还有一个age
。{/ p>
<?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');
}
?>