0

私はPHPスクリプトを使用しており、 PDO経由でデータベースに接続しています。データベースには 2 つのテーブルが含まれています。最初の 1 つはrequired_itemsで、もう 1 つはdonationsです。

required_items次の列を含む: id, name,required_amount

donations次の列を含む: id, name, email, donation_amount,item_id

ここに私が取り組んでいる簡単なコードがあります:

<?php

    $pageName = "/donations/index.php";
    $databaseHost = "localhost";
    $databaseName = "donations";
    $databaseUser = "root";
    $databasePassword = "pwd";

    //TODO Check, validate, sanitize your input...
    $name = $_POST['name'];
    $email = $_POST['email'];
    $donation_amount = $_POST['amount'];
    $item_id = $_POST['radioButtons'];

    try {
        $db = new PDO('mysql:host=' . $databaseHost . ';dbname=' . $databaseName . ';charset=utf8', $databaseUser, $databasePassword);
        $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
    } catch (PDOException $e) {
        echo "Exception: " . $e->getMessage(); //TODO better error handling
    }

    // Check to see if someone wants to donate something
    if(!empty($_REQUEST['donate']))
    {
        try {
            //Construct your query with placeholders
            $sql = "INSERT INTO donations (name, email, donation_amount, item_id) VALUES (?, ?, ?, ?)";
            //Prepare your query
            $query = $db->prepare($sql);

            //Execute it passing parameters
            $query->execute(array($name, $email, $donation_amount, $item_id));

            echo("Thank you for donating!\n<br>\n<br>");
    } catch (PDOException $e) {
        echo "Exception: " . $e->getMessage(); //TODO better error handling
    }
    }

    $request = "SELECT 
                required_items.id,
                required_items.name, 
                required_items.required_amount - donations.donation_amount AS Amount_Left,
                donations.item_id
                FROM required_items JOIN donations ON donations.item_id=required_items.id";

    $stmt = $db->query($request);
    $item_info = $stmt->fetch();

    // Round negative amounts to zero
    if($item_info['Amount_Left'] < 0){
        $item_info['Amount_Left'] = 0;
        }

?>
    <!--Print out the table tag and header-->
    <form name="donationForm" action="<?php $pageName ?>" method="POST">
    <fieldset>
    <table>
    <tr>
        <th>Item Name</th><th>Amount</th>
    </tr>
    <tr>
        <td><?php $item_info['name'] ?></td>
        <td><?php $item_info['Amount_Left'] ?></td>
        <td><input type="radio" name="radioButtons" value="<?php $item_info['item_id'] ?>"></input></td>
    </tr>
    </table>
    <div><label>Amount</label><input type="number" name="amount"></div>
    <div><label>Email</label><input type="email" name="email"></div>
    <div><label>Name</label><input type="text" name="name"></div>
    <div><input type="submit" name="donate" value="Donate"></div>
    </fieldset>
    </form>

誰でもこれで私を助けてもらえますか?何が問題なのか正確にわからないため、スクリプト全体を含めました。表の情報をエコーアウトしようとしましたが、うまくいきませんでした。基本的に、テーブル フィールドにはラジオ ボタン以外は何も表示されません。

4

3 に答える 3

0

これを試して

$amount_left = $db->query("SELECT r.name AS Name, r.required_amount - d.donation_amount AS Amount_Left FROM required_items AS r JOIN donations AS d ON d.item_id=r.id");

使用しているため、それぞれのテーブルに andを使用ASする必要がありますrd

于 2013-09-12T12:46:55.643 に答える
-1

オーバーエンジニアリングは避けてください

$sql = "SELECT name, required_amount - donation_amount AS Amount_Left 
        FROM required_items JOIN donations ON item_id=id";

あなたにも役立つだろう

肥大化している他のすべてのコードについても同じことが言え、このように単純化できます

$stmt = $db->query($sql);
$data = $stmt->fetch();
if($data['Amount_Left'] < 0) {
    $data['Amount_Left'] = 0;
}
?>
<form name="donationForm"  method="POST">
<fieldset>
<table>
  <tr> 
    <th>Item Name</th>
    <th>Amount</th>
  </tr>
  <tr>
    <td><?=$data['name']?></td>
    <td><?=$data['Amount_Left']?></td>
    <td>
      <input type="radio" name="radioButtons" value="<?=$row['id']?>">
    </td>
  </tr>
于 2013-09-12T12:46:11.013 に答える