Undefined index: id en php
Je vais avoir un problème dans le code PHP. J'ai eu un peu de code à partir d'un e-book, mais quand j'ai essayé de faire fonctionner le système, c'est de donner quelques erreurs. J'ai corrigé certaines erreurs, en donnant un entre guillemets, mais maintenant je suis coincé avec quelques autres erreurs.
Je serais plus qu'heureux si quelqu'un m'aide avec l'erreur suivante:
Notice: Undefined index: id in C:\xampp\htdocs\auction\index.php sur la ligne 4
C'est mon code pour les 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");
?>
Certains d'entre vous ont demandé, où l'id est en venir. Je n'ai aucune idée, mais j'ai cherché dans d'autres fichiers, et ici, ils sont:
bar.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
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
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
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;
}
?>
- ajouter isset($_GET['id']) avant de l'utiliser.
- Il devrait y avoir
id
dans votre chaîne de requête url. par exemple:index.php?id=1
. - isset chèque peut vous aider
- double possible de PHP: "notice: Undefined variable" et "notice: Undefined index"
- Si vous ne savez même pas ce que pourrait être la zone à problème (évident à partir de la grande quantité de code/les articles que vous avez posté) c'est peut-être temps d'investir en vous-même et d'essayer de comprendre ce que vous êtes en train de faire avec votre code.
- Bienvenue à Débordement de Pile! S'il vous plaît, n'utilisez pas
mysql_*
fonctions pour écrire du nouveau code. Il n'est plus maintenu et que la communauté a commencé la dépréciation du processus. Voir le boîte rouge? Au lieu de cela, vous devriez en apprendre davantage sur les instructions préparées soit PDO ou MySQLi. Si vous choisissez de PDO voici un bon tutoriel.
Vous devez vous connecter pour publier un commentaire.
Vous avez un problème dans
comment en êtes-vous de cet id, est-il à venir à partir de la chaîne de requête? Je ne pense pas. Mettre la fonction isset pour vérifier si l'id est dans l'url ou pas. Donc pour résoudre votre problème ne ce
mettre ceci dans votre index.php
Êtes-vous en passant un paramètre de chaîne de requête nommée
id
à votre page? Quelque chose commeindex.php?id=xxx
? Si non,$_GET['id']
ne sera pas défini, et vous ne pouvez pas y accéder. Vous devez vérifier qu'il existe tout d'abord avec quelque chose commearray_key_exists
.PHP est très, très clair dans son message d'erreur. Lorsque vous accédez à un tableau, vous donnera un "index" (la partie entre le
[]
) et que l'indice de cartes d'une valeur. PHP est vous dire que l'indice"id"
n'existe pas dans tout ce tableau, vous avez accès à la ligne 4. Si vous regardez à la ligne 4, vous pouvez le voir il n'y a qu'un tableau en cours d'accès à un seul endroit sur cette ligne,$_GET
, et vous pouvez voir l'indice que vous utilisez estid
.