0

こんにちは私は私のPHPプログラミングクラスのプロジェクトに取り組んでいます。そして、私たちが使用している本は、ムラフのPHPとMYSQLです。そして、私たちのプロジェクト6-1では、与えられたフォルダーはtech_supportと呼ばれます。私が取り組んでいるもののスクリーンショットをお見せします。私は現在、phpmyadminとlocalhostを使用してこのプロジェクトに使用しています。これは、これが使用するサーバーだからです。

何らかの理由で、プロダクトマネージャーフォルダ内のテーブルの削除ボタンをクリックすると、削除されず、空白のページが表示されます。しかし、product_manager / index.phpページにアクセスすると、テーブルが表示されず、エラーが発生します。

致命的なエラー:7行目のC:\ xampp \ htdocs \ tech_support \ model \ product_db.phpでget_products()(以前はC:\ xampp \ htdocs \ tech_support \ model \ product_db.php:3で宣言されていました)を再宣言できません

そして、dreamweaverまたはメモ帳で作業しているページを表示すると、7行目に表示されるのは中かっこだけです。なぜそう言っているのかわからない?また、プロダクトマネージャーフォルダーにproduct_db.php、delete_product.php、add_product.phpproduct_list.phpのページがいくつかある2つのコードを表示することもできます。これらは私が今作業しているフォルダです。

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_supportphpmyadminデータベースではproductsと呼ばれます。これは、これまで私が見つめ、このコードを理解しようとしていて、それが私を苛立たせ始めたばかりの様子のスクリーンショットです。

4

1 に答える 1

0

問題1 -"it will not delete it will just show a blank page"

これは次の原因で発生します -

(1) フォームに有効な がありませんaction。(送信を無効にしている場合を除き、'../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');

これは、関数を再宣言する2 回**Fatal error:**...含めることによって発生するため、最初の再宣言 ( ) の後に致命的なエラーが発生します。product_db.phpget_products()


functions/queriesin product_list.php&delete_product.phpは SQL インジェクションに対して脆弱であることに注意してください。読んでください -
SQL インジェクションを防ぐ最善の方法は?

于 2012-11-28T07:29:22.583 に答える