【发布时间】:2013-01-08 14:10:17
【问题描述】:
然后当我添加新类别 Quantity 时,我有这个工作,现在它产生了这个错误。
Undefined offset: 0 in (the form values)
我看不到未定义的偏移量在哪里。任何帮助将不胜感激。
我也知道 mysql 已贬值,但希望它在更改之前工作。
请注意,当您处理它时,所有数据都会被召回到编辑表单中,它会产生该错误
查询也已验证并运行。
编辑函数
function edit_product($id, $name, $description, $price, $quantity, $picture, $category) {
$id = (int) $id;
$category = (int) $category;
$name = mysql_real_escape_string($name);
$description = mysql_real_escape_string($description);
$price = mysql_real_escape_string($price);
$quantity = (int) $quantity;
$picture = mysql_real_escape_string($picture);
mysql_query("UPDATE `shop` SET
`prod_id` = {$category},
`name` = '{$name}',
`description` = '{$description}',
`price` = '{$price}',
`quantity` = '{$quantity}',
`picture` = '{$picture}'
WHERE `id` = {$id}");
echo mysql_error();
}
编辑页面
$post = get_posts($_GET['id']);
if ( isset($_POST['name'], $_POST['description'], $_POST['price'], $_POST['quantity'], $_POST['picture'], $_POST['category']) ) {
$errors = array();
$name = trim($_POST['name']);
$description = trim($_POST['description']);
$price = trim($_POST['price']);
$quantity = trim($_POST['quantity']);
$picture = trim($_POST['picture']);
if ( empty($name) ) {
$errors[] = 'You need to supply a title';
} else if ( strlen($name) > 255 ) {
$errors[] = 'Title cannot be longer than 255 characters';
}
if ( empty($description) ) {
$errors[] = 'You need to supply text';
}
if ( empty($price) ) {
$errors[] = 'You need to supply text';
}
if ( empty($quantity) ) {
$errors[] = 'You need to supply text';
}
if ( empty($picture) ) {
$errors[] = 'You need to supply text';
}
if (! category_exists('id', $_POST['category']) ) {
$errors[] = 'Category does not exist';
}
if ( empty($errors) ) {
edit_product($_GET['id'], $name, $description, $price, $quantity, $picture, $_POST['category']);
header("Location: ../admin/edit_products.php?id={$post[0]['post_id']}");
die();
}
}
?>
.....
<label for="name">Title</label>
<input type="text" name="name" value="<?php echo $post[0]['name']; ?>"><br/>
<label for="price">price</label>
<input type="text" name="price" value="<?php echo $post[0]['price']; ?>"><br/>
<label for="sale">Quantity</label>
<input type="text" name="quantity" value="<?php echo $post[0]['quantity']; ?>"><br/>
<label for="picture">Picture</label>
<input type="text" name="picture" value="<?php echo $post[0]['picture']; ?>"><br/>
<label for="description">Description</label>
<textarea name="description" rows="15" cols="50"><?php echo $post[0]['description']; ?></textarea><br/>
<label for="prod_id">Category</label>
<select name="category">
<?php
foreach ( get_categories() as $category ) {
$selected = ( $category['name'] == $post[0]['name'] ) ? " selected" : '';
?>
<option value="<?php echo $category['id']; ?>" <?php echo $selected; ?>> <?php echo $category['name']; ?></option>
--------------
获取发布功能 - 根据要求。
function get_posts($id = null, $cat_id = null) {
$posts = array();
$query ="SELECT `shop`.`id` AS `post_id` , `products_cat`.`id` AS `category_id` , `shop`.`name` , `description` , `price` , `quantity` , `picture`
FROM `shop`
INNER JOIN `products_cat` ON `shop`.`prod_id` = `products_cat`.`id` ";
if ( isset($id) ) {
$id = (int) $id;
$query .= " WHERE `shop`.`id` = {$id}";
}
if ( isset($cat_id) ) {
$cat_id = (int) $cat_id;
$query .= " WHERE `products_cat`.`id` = {$cat_id}";
}
$query .= " ORDER BY `shop`.`price` DESC";
$query = mysql_query($query);
echo mysql_error();
while ( $row = mysql_fetch_assoc($query) ) {
$posts[] = $row;
}
return $posts;
}
【问题讨论】:
-
您确定它在您的编辑功能中,而不是您引用的某个地方
$post[0]...? -
我只是在查看您的代码,发现您有
prod_id = {$category},- 不应该是prod_id = '{$category}',- 使用'? ...只是检查... -
Please, don't use
mysql_*functions in new code。它们不再维护and are officially deprecated。看到red box?改为了解prepared statements,并使用PDO 或MySQLi - this article 将帮助您决定哪个。如果你选择 PDO,here is a good tutorial. -
$post 是一个数组吗?这个 get_posts() 函数究竟是做什么的?
-
$post = get_posts($_GET['id']);是返回一个数组还是空的?可能想要运行print_r($post)以确保它得到一些东西。否则$post[0]不存在。