Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/250.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 数据库项未显示在网页上_Php_Mysql_Sql_Pdo - Fatal编程技术网

Php 数据库项未显示在网页上

Php 数据库项未显示在网页上,php,mysql,sql,pdo,Php,Mysql,Sql,Pdo,我正在使用PHP脚本,并通过PDO连接到数据库。数据库包含两个表:第一个是必需的\u项,另一个是捐赠 required\u items包含列:id,name,required\u amount 捐赠包含以下列:id,姓名,电子邮件,捐赠金额,项目id 下面是我正在使用的简单代码: <?php $pageName = "/donations/index.php"; $databaseHost = "localhost"; $databaseName = "donat

我正在使用PHP脚本,并通过PDO连接到数据库。数据库包含两个表:第一个是
必需的\u项
,另一个是
捐赠

required\u items
包含列:
id
name
required\u amount

捐赠
包含以下列:
id
姓名
电子邮件
捐赠金额
项目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>


如果要给表格添加别名,请尝试:

SELECT r.name AS Name ... FROM required_items AS r ...
PDO::query()返回PDO语句对象,因此需要执行以下操作:

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

请避免过度工程化

$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>
$stmt=$db->query($sql);
$data=$stmt->fetch();
如果($data['Amount_Left']<0){
$data['Amount_Left']=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");

因为您使用的是
AS
,所以需要对相应的表使用
r
d

不知道DB类,但是PHP代码是正确的。正如错误所说,您在required_items中似乎没有name列。name可能是一个保留字,请尝试required_items。`name`好的,这似乎可以工作,但现在我收到一个错误“不能将PDOStatement类型的对象用作数组”,在“try{”$amount_left是PDOStatement对象。您可以执行->获取”之后引用if语句(PDO::FETCH_ASSOC)得到array@user2766423是的,你不能。因为你用错了方法。我确实计划去掉所有的echo'd HTML,使其成为HTML。是的,我感谢你在这方面的帮助。我想让它先工作,但可读性会更好。这不是可读性,而是敏感性。这些无用的别名是错误的原因.