未定义的索引:php 中的 id
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/16105733/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Undefined index: id in php
提问by Shahnawaz
I'm having a problem in PHP code. I got some code from an e-book, but when I tried to run the system, it's giving some errors. I fixed some of the errors by giving proper quotation marks, but now I'm stuck with some other errors.
我在 PHP 代码中遇到了问题。我从一本电子书中得到了一些代码,但是当我尝试运行系统时,它给出了一些错误。我通过给出适当的引号修正了一些错误,但现在我遇到了其他一些错误。
I'd be more than happy if some one helps me with the following error:
如果有人帮助我解决以下错误,我会非常高兴:
Notice: Undefined index: id in C:\xampp\htdocs\auction\index.php on line 4
注意:未定义索引:第 4 行 C:\xampp\htdocs\auction\index.php 中的 id
This is my code for index.php:
这是我的 index.php 代码:
<?php
require("config.php");
require("functions.php");
$validid = pf_validate_number($_GET['id'], "value", $config_basedir);
require("header.php");
if($validid == 0) {
$sql = "SELECT items.* FROM items WHERE dateends > NOW()";
}
else {
$sql = "SELECT * FROM items WHERE dateends > NOW()
AND cat_id = " . $validid . ";";
}
$result = mysql_query($sql);
$numrows = mysql_num_rows($result);
echo "<h1>Items available</h1>";
echo "<table cellpadding='5'>";
echo "<tr>";
echo "<th>Image</th>";
echo "<th>Item</th>";
echo "<th>Bids</th>";
echo "<th>Price</th>";
echo "</tr>";
if($numrows == 0) {
echo "<tr><td colspan=4>No items!</td></tr>";
}
else {
while($row = mysql_fetch_assoc($result)) {
$imagesql = "SELECT * FROM images WHERE
item_id = " . $row['id'] . " LIMIT 1";
$imageresult = mysql_query($imagesql);
$imagenumrows = mysql_num_rows($imageresult);
echo "<tr>";
if($imagenumrows == 0) {
echo "<td>No image</td>";
}
else {
$imagerow = mysql_fetch_assoc($imageresult);
echo "<td><img src='./images/". $imagerow['name'] . "' width='100'></td>";
}
echo "<td>";
echo "<a href='itemdetails.php?id="
. $row['id'] . "'>" . $row['name'] . "</a>";
if($_SESSION['USERID'] == $row['user_id']) {
echo " - [<a href='edititem.php?id="
. $row['id'] . "'>edit</a>]";
}
echo "</td>";
$bidsql = "SELECT item_id, MAX(amount) AS
highestbid, COUNT(id) AS numberofbids FROM bids
WHERE item_id=" . $row['id'] . " GROUP BY item_id;";
$bidresult = mysql_query($bidsql);
$bidrow = mysql_fetch_assoc($bidresult);
$bidnumrows = mysql_num_rows($bidresult);
echo "<td>";
if($bidnumrows == 0) {
echo "0";
}
else {
echo $bidrow['numberofbids'] . "</td>";
}
echo "<td>" . $config_currency;
if($bidnumrows == 0) {
echo sprintf('%.2f', $row['startingprice']);
}
else {
echo sprintf('%.2f', $bidrow['highestbid']);
}
echo "</td>";
echo "<td>" . date("D jS F Y g.iA",
strtotime($row['dateends'])) . "</td>";
echo "</tr>";
}
}
echo "</table>";
require("footer.php");
?>
Some of you asked, where the id is coming from. I have no idea, but I searched it in other files, and here are they:
你们中的一些人问,id 是从哪里来的。我不知道,但我在其他文件中搜索过,这是它们:
bar.php:
栏.php:
<?php
require("header.php");
$catsql = "SELECT * FROM categories ORDER BY category ASC;";
$catresult = mysql_query($catsql);
echo "<h1>Categories</h1>";
echo "<ul>";
echo "<li><a href='index.php'>View All</a></li>";
while($catrow = mysql_fetch_assoc($catresult)) {
echo "<li><a href='index.php?id=". $catrow['id'] . "'>" . $catrow['category']. "</a> </li>";
}
echo "</ul>";
?>
header.php:
头文件.php:
<?php
session_start();
require("config.php");
$db = mysql_connect($dbhost, $dbuser, $dbpassword);
mysql_select_db($dbdatabase, $db);
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01
Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title><?php echo $config_forumsname; ?></title>
<link rel="stylesheet" href="stylesheet.css" type="text/css" />
</head>
<body>
<div id="header">
<h1>BidTastic Auctions</h1>
<div id="menu">
<a href="index.php">Home</a>
<?php
if(isset($_SESSION['USERNAME']) == TRUE) {
echo "<a href='logout.php'>Logout</a>";
}
else {
echo "<a href='login.php'>Login</a>";
}
?>
<a href="newitem.php">New Item</a>
</div>
<div id="container">
<div id="bar">
<?php require("bar.php"); ?>
</div>
<div id="main">
itemdetails.php
项目详细信息.php
<?php
session_start();
include(“config.php”);
include(“functions.php”);
$db = mysql_connect($dbhost, $dbuser, $dbpassword);
mysql_select_db($dbdatabase, $db);
$validid = pf_validate_number($_GET[‘id'], “redirect”, $config_basedir);
if($_POST[‘submit']) {
if(is_numeric($_POST[‘bid']) == FALSE) {
header(“Location: “ . $config_basedir
. “itemdetails.php?id=” . $validid . “&error=letter”);
}
$theitemsql = “SELECT * FROM items WHERE id = “ . $validid . “;”;
$theitemresult = mysql_query($theitemsql);
$theitemrow = mysql_fetch_assoc($theitemresult);
$checkbidsql = “SELECT item_id, max(amount) AS
highestbid, count(id) AS number_of_bids FROM
bids WHERE item_id=” . $validid . “ GROUP BY item_id;”;
$checkbidresult = mysql_query($checkbidsql);
$checkbidnumrows = mysql_num_rows($checkbidresult);
if($checkbidnumrows == 0) {
if($theitemrow[‘startingprice'] > $_POST[‘bid']) {
header(“Location: “ . $config_basedir
. “itemdetails.php?id=” . $validid . “&error=lowprice#bidbox”);
}
}
else {
$checkbidrow = mysql_fetch_assoc($checkbidresult);
if($checkbidrow[‘highestbid'] > $_POST[‘bid']) {
header(“Location: “ . $config_basedir . “itemdetails.php?id=” .
$validid . “&error=lowprice#bidbox”);
}
}
$inssql = “INSERT INTO bids(item_id, amount, user_id) VALUES(“
. $validid
. “, “ . $_POST[‘bid']
. “, “ . $_SESSION[‘USERID']
. “);”;
mysql_query($inssql);
header(“Location: “ . $config_basedir
. “itemdetails.php?id=” . $validid);
}
else {
$validid = pf_validate_number($_GET[‘id'], “redirect”,
$config_basedir);
require(“header.php”);
$itemsql = “SELECT UNIX_TIMESTAMP(dateends) AS dateepoch,
items.* FROM items WHERE id = “ . $validid . “;”;
$itemresult = mysql_query($itemsql);
$itemrow = mysql_fetch_assoc($itemresult);
$nowepoch = mktime();
$rowepoch = $itemrow[‘dateepoch'];
if($rowepoch > $nowepoch) {
$VALIDAUCTION = 1;
}
echo “<h2>” . $itemrow[‘name'] . “</h2>”;
$imagesql = “SELECT * FROM images WHERE item_id = “ . $validid . “;”;
$imageresult = mysql_query($imagesql);
$imagenumrows = mysql_num_rows($imageresult);
$bidsql = “SELECT item_id, MAX(amount) AS highestbid,
COUNT(id) AS number_of_bids FROM bids WHERE item_id=”
. $validid . “ GROUP BY item_id;”;
$bidresult = mysql_query($bidsql);
$bidnumrows = mysql_num_rows($bidresult);
echo “<p>”;
if($bidnumrows == 0) {
echo “<strong>This item has had no bids</strong>
- <strong>Starting Price</strong>: “ . $config_currency
. sprintf(‘%.2f', $itemrow[‘startingprice']);
}
else {
$bidrow = mysql_fetch_assoc($bidresult);
echo “<strong>Number Of Bids</strong>: “
. $bidrow[‘number_of_bids'] . “
- <strong>Current Price</strong>: “ . $config_currency
. sprintf(‘%.2f', $bidrow[‘highestbid']);
}
echo “ - <strong>Auction ends</strong>: “
. date(“D jS F Y g.iA”, $rowepoch);
echo “</p>”;
if($imagenumrows == 0) {
echo “No images.”;
}
else {
while($imagerow = mysql_fetch_assoc($imageresult)) {
echo “<img src='./images/” . $imagerow[‘name'] .”' width='200'>”;
}
}
echo “<p>” . nl2br($itemrow[‘description']) . “</p>”;
echo “<a name='bidbox'>”;
echo “<h2>Bid for this item</h2>”;
if(isset($_SESSION[‘USERNAME']) == FALSE) {
echo “To bid, you need to log in. Login
<a href='login.php?id=” . $validid . “&ref=addbid'>here</a>.”;
}
else {
if($VALIDAUCTION == 1) {
echo “Enter the bid amount into the box below.”;
echo “<p>”;
switch($_GET[‘error']) {
case “lowprice”:
echo “The bid entered is too low.
Please enter another price.”;
break;
case “letter”:
echo “The value entered is not a number.”;
break;
}
?>
<form action=”<?php echo pf_script_with_get($SCRIPT_NAME);
?>” method=”post”>
<table>
<tr>
<td><input type=”text” name=”bid”></td>
<td><input type=”submit” name=”submit” value=”Bid!”></td>
</tr>
</table>
</form>
<?php
}
else {
echo “This auction has now ended.”;
}
$historysql = “SELECT bids.amount, users.username FROM bids,
users WHERE bids.user_id = users.id AND item_id = “
. $validid . “ ORDER BY amount DESC”;
$historyresult = mysql_query($historysql);
$historynumrows = mysql_num_rows($historyresult);
if($historynumrows >= 1) {
echo “<h2>Bid History</h2>”;
echo “<ul>”;
while($historyrow = mysql_fetch_assoc($historyresult)) {
echo “<li>” . $historyrow[‘username'] . “ - “ .
$config_currency . sprintf(‘%.2f', $historyrow[‘amount']) . “</li>”;
}
echo “</ul>”;
}
}
}
require(“footer.php”);
?>
functions.php
函数.php
<?php
function pf_script_with_get($script) {
$page = $script;
$page = $page . "?";
foreach($_GET as $key => $val) {
$page = $page . $key . "=" . $val . "&";
}
return substr($page, 0, strlen($page)-1);
}
function pf_validate_number($value, $function, $redirect) {
if(isset($value) == TRUE) {
if(is_numeric($value) == FALSE) {
$error = 1;
}
if($error == 1) {
header("Location: " . $redirect);
}
else {
$final = $value;
}
}
else {
if($function == 'redirect') {
header("Location: " . $redirect);
}
if($function == "value") {
$final = 0;
}
}
return $final;
}
?>
回答by meagar
Are you passing a query string parameter named id
to your page? Something like index.php?id=xxx
? If not, $_GET['id']
won't be defined, and you can't just access it. You have to check that it exists first with something like array_key_exists
.
您是否将命名的查询字符串参数传递id
给您的页面?像index.php?id=xxx
什么?如果没有,$_GET['id']
则不会被定义,并且您不能只是访问它。你必须先用类似的东西检查它是否存在array_key_exists
。
PHP is being very, very clear in its error message. When you access an array, you give it an "index" (the part between the []
) and that index maps to a value. PHP is telling you that the index "id"
doesn't exist in whatever array you're accessing on line 4. If you look at line 4, you can see there's only one array being accessed in only one place on that line, $_GET
, and you can see the index you're using is id
.
PHP 在其错误消息中非常非常清楚。当你访问一个数组时,你给它一个“索引”(在 之间的部分[]
)并且该索引映射到一个值。PHP 告诉您索引"id"
不存在于您在第 4 行访问的任何数组中。如果您查看第 4 行,您会看到只有一个数组在该行的一个地方被访问$_GET
,并且您可以看到您使用的索引是id
.
回答by chandresh_cool
You have a problem in
你有问题
$_GET['id']
how are you getting this id, is it coming from query string? Don't think so. Put isset function to check if id is in the url or not. So to solve your problem do this
你是如何得到这个 id 的,它来自查询字符串吗?不要这么认为。放置isset函数来检查id是否在url中。所以要解决您的问题,请执行此操作
$validid = 0;
if (isset($_GET['id'])) {
$validid = pf_validate_number($_GET['id'], "value", $config_basedir);
}
put this in your index.php
把它放在你的 index.php 中