2012-11-28 91 views
0

你好,我正在爲我的P.H.P編程類項目工作。而我們使用的書是Murach的PHP和MYSQL。對於我們的項目6-1,我們給出的文件夾稱爲tech_support。我會告訴你我正在做什麼的截圖。我目前使用phpmyadmin和localhost用於這個項目,因爲那是我們使用的服務器。帶刪除按鈕的PHP表格

由於某些原因,當我點擊產品經理文件夾中的表的刪除按鈕時,它將不會刪除它只會顯示一個空白頁。但是現在當我進入product_manager/index.php頁面時,它不會顯示錶格,而是會給我一個錯誤。

致命錯誤:不能重新聲明get_products()(以前用C宣稱:\ XAMPP \ htdocs中\ tech_support \型號\ product_db.php:3)在C:\ XAMPP \ htdocs中\ tech_support \型號\ product_db.php上第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數據庫中名爲產品。以下是截至目前爲止,我一直在盯着並試圖弄清楚這段代碼,它剛剛開始激怒我。

+0

您是否嘗試更改get_product()的名稱?有些代碼在sql注入時易受攻擊 – Sam

+0

對於'get_products()'錯誤,嘗試將它聲明爲'class'而不是一組''',然後初始化你的類並調用相關的'functions'。 – Killrawr

+0

好的事情是編碼的方式來自之前的練習文件,我們在課堂上做了一些編碼,而其中一些編碼與此類似。所以我所做的就是使用他們的編碼,但做了一些編輯工作與tech_support項目,但所有的功能是我們使用或將用於該項目。所以我不確定班級是如何工作的,我們不得不同時擁有get_product()和get_products(),因爲老師也有這樣的代碼。我知道它很混亂>。> – xRayne99x

回答

0

1期 -

(1)你的形式不具有有效的action - "it will not delete it will just show a blank page"

這所致。 (除非您禁用了提交,並且您正在通過'../view/header.php'文件中的java或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很容易受到SQL注入。請閱讀 -
Best way to prevent SQL Injection?