带删除按钮的PHP表单

时间:2012-11-28 01:27:37

标签: php

您好我正在为我的P.H.P编程课程开发一个项目。我们使用的书是Murach的PHP和MYSQL。对于我们的项目6-1,我们给出的文件夹名为tech_support。我将向您展示我正在做的工作的截图。我目前使用phpmyadmin和localhost来使用这个项目,因为那是我们使用的服务器。

出于某种原因,当我点击产品经理文件夹中表格的删除按钮时,它不会删除它只会显示一个空白页面。但现在当我转到product_manager / index.php页面时,它不会显示表格,而是会给我一个错误。

致命错误:无法在C:\ xampp \ htdocs \ tech_support \ model \ product_db.php中重新声明get_products()(之前在C:\ xampp \ htdocs \ tech_support \ model \ product_db.php:3中声明)第7行

当我去观看我在Dreamweaver或记事本中工作的页面时,它在第7行显示的是一个结束的大括号。我只是不明白为什么它的说法?我还可以向我展示我的两个代码,我在产品经理文件夹中有几页,它们是product_db.php,delete_product.php,add_product.php product_list.php。这些是我正在使用的文件夹。

product_list.php代码

    <?php include '../view/header.php'; ?>
<?php require ('../model/product_db.php');?>
<div id="main">

    <h1>Product List</h1>

    <div id="content">
        <!-- display a table of products -->
        <h2><?php echo $category_name; ?></h2>
        <table>
            <tr>
                <th>Code</th>
                <th>Name</th>
                <th>Version</th>
                <th>Release Date</th>
                <th>&nbsp;</th>
            </tr>

            <?php foreach ($products as $product) : ?>
            <tr>
                <td><?php echo $product['productCode']; ?></td>
                <td><?php echo $product['name']; ?></td>
                <td><?php echo $product['version']; ?></td>
                <td><?php echo $product['releaseDate']; ?></td>
                <td><form action="." method="post">
                    <input type="hidden" name="action"
                           value="delete_product" />
                    <input type="hidden" name="product_code"
                           value="<?php echo $product['productCode']; ?>" />
                    <input type="submit" value="Delete" />
                </form></td>
            </tr>
            <?php endforeach; ?>
        </table>
        <p><a href="add_product.php">Add Product</a></p>
    </div>

</div>
<?php include '../view/footer.php'; ?>

**product_db.php code** 

product_db.php

    <?php
function get_products() {
    global $db;
    $query = 'SELECT * FROM  products';
    $products = $db->query($query);
    return $products;
}

function get_product($product_id) {
    global $db;
    $query = "SELECT * FROM  products
              WHERE productID = '$product_id'";
    $product = $db->query($query);
    $product = $product->fetch();
    return $product;
}

function delete_product($product_code) {
    global $db;
    $query = "DELETE FROM products
              WHERE productCode = '$product_code'";
    $db->exec($query);
}

function add_product($code, $name, $version, $releasedate) {
    global $db;
    $query = "INSERT INTO products
                 (code, name, version, releasedate)
              VALUES
                 ('$code', '$name', '$version', '$releasedate')";
    $db->exec($query);
}
?>

delete_product.php代码

<?php
// Get IDs
$product_id = $_POST['productID'];

// Delete the product from the database
require_once('database.php');
$query = "DELETE FROM products
          WHERE productID = '$product_id'";
$db->exec($query);

// display the Product List page
include('product_list.php');
?>

好的,因此表格的表名称在tech_support phpmyadmin数据库中称为产品。这是截至目前为止看起来像我一直在盯着并试图弄清楚这个代码的截图,它刚开始让我感到沮丧。

1 个答案:

答案 0 :(得分:0)

问题1 - "it will not delete it will just show a blank page"

这将由 -

引起

(1)您的表单没有有效的action。 (除非您正在禁用提交,并且它是由您未包含的'../view/header.php'文件中的java OR javascript / jQuery / Ajax脚本完成的。)这将发布到未知/空白页面。

<form action="." method="post">

(2)<input type="hidden"> name="product_code"value="<?php echo $product['productCode']; ?>"

<input type="hidden" name="product_code" value="<?php echo $product['productCode']; ?>" />

但在delete_product.php {}}}中您使用的是$product_id = $_POST['productID'];WHERE productID = '$product_id'";

$product_id = $_POST['productID'];
....
$query = "DELETE FROM products
      WHERE productID = '$product_id'";

另外,为什么要重新编写DELETE查询?你应该使用你的功能 -

// Get IDs
$product_code = $_POST['product_code'];  // see final comment about SQL Injection

// Delete the product from the database
delete_product($product_code);

第2期 - Fatal error: Cannot redeclare get_products() (previously declared...

这是一个有根据的猜测,没有看到product_manager/index.php的页面布局/结构。

如果在product_manager/index.php中你包含这两个文件 -

include('product_list.php');
include('delete_product.php');

product_manager/index.php基本上是 -

include('product_list.php');
    |-> include '../view/header.php';  
    |-> require ('../model/product_db.php');
include('delete_product.php');
      |-> include('product_list.php');
              |-> include '../view/header.php';  
              |-> require ('../model/product_db.php');

**Fatal error:**...包括product_db.php两次,您将重新声明您的功能,因此在第一次重新声明(get_products())后会导致致命错误。


请注意functions/queriesproduct_list.php中的delete_product.php {{1}}容易受到SQL注入攻击。请阅读 -
Best way to prevent SQL Injection?