为什么我的表单不会将信息发送到数据库?

时间:2014-05-02 20:57:10

标签: php mysql function class pdo

这是我之前提出的一个问题的更简洁版本,希望得到答案。我已经创建了一个表单,该表单应该使用类将已提交的信息发送到数据库。


beeradded.php

<?php
session_start();

ini_set('display_errors', 1);
error_reporting(E_ALL); ini_set('display_errors', 1);

//var_dump($_POST);
if ($_SESSION['logged_in']!="yes"){
    header ("Location: unauth.php");
}

require "/home/carlton/public_html/PHPproject/allincludes.php";

//if (count($_POST)>0){
//need to add in validation check here
//
//
//
//
//$validationErrors= 0;

    //if(count($validationErrors == 0 )){
        $form=$_POST;
        $beer_name = $form['beer_name'];
        $beer_type = $form['beer_type'];
        $beer_abv = $form['beer_abv'];
        $beer_rating = $form['beer_rating'];

   // }

    $new_beer = new Beer($beer_name);
    $new_beer->setBeerType($beer_type);
    $new_beer->setBeerABV($beer_abv);
    $new_beer->setBeerRating($beer_rating);

    $beereditor->addBeer($new_beer);
    echo "Beer added.";
 echo '<a href="addbeer.php"> Back to add menu </a>';  
//}


editbeers.php

<?php

class BeerEditor
{
    protected $dbconn;

    function __construct($dbconn){
        $this->dbconn = $dbconn;
    }

    function addBeer(Beer $beerObj){
        //making connection to db here
        $conn = $this->dbconn->getConnection();

        $stmt = $conn->prepare("INSERT INTO beers (beer_name, beer_type, beer_abv, beer_rating) VALUES (:beer_name, :beer_type, :beer_abv, :beer_rating)");

        $stmt->bindParam(':beer_name', $beerObj->getBeerName());
        $stmt->bindParam(':beer_type', $beerObj->getBeerType());
        $stmt->bindParam(':beer_abv', $beerObj->getBeerABV());
        $stmt->bindParam(':beer_rating', $beerObj->getBeerRating());

        $result = $stmt->execute();

        if($result === false){
            var_dump($conn->errorCode());
        }

        return $result;
    }

    function listBeers(){

        $conn = $this->dbconn->getConnection();
        $result = $conn->query('SELECT * FROM beers');

        $result->setFetchMode(PDO::FETCH_CLASS|PDO::FETCH_PROPS_LATE, 'beers');
        $beers = $result->fetchAll();

        return $beers;
    }


}
?>

beer.php

<?php
/**
 * Description of beer
 *
 * @author root
 */
class beer {

    protected $beer_name;   //varchar(45)
    protected $beer_type;   //varchar(45)
    protected $beer_abv;    //decimal(4,2) alcohol percentage ex. 06.50
    protected $beer_rating; //char(10) 1 awful beer, 10 great beer

    public function __construct($beer_name = null){
        if ($beer_name !== null){
            $this->setName($beer_name);
        }    
        //defaults
       // $this->setType($beer_type);
       // $this->setABV($beer_abv);
       // $this->setRating($beer_rating);


    }

        public function setBeerName(){
            $this->beer_name = $beer_name;
        }
        public function getBeerName(){
                return $this->beer_name;
        }

        public function setBeerType(){
            $this->beer_type = $beer_type;
        }
        public function getBeerType(){
            return $this->beer_type;
        }

        public function setBeerABV(){
            $this->beer_abv = $beer_abv;
        }
        public function getBeerABV(){
            return $this->beer_abv;
        }

        public function setBeerRating(){
            $this->beer_rating = $beer_rating;
        }
        public function getBeerRating(){
            return $this->beer_rating;
        }
}

3 个答案:

答案 0 :(得分:1)

$new_beer->setBeerRating($beer_rating);
echo "Beer added.";

您需要在此处添加一行,您可以在其中调用BeerEditor的addBeer($new_beer)函数。目前,您没有任何调用该函数的内容,因此绝不会执行INSERT。您的Beer类中没有任何内容与数据库交互,因此您所做的只是设置本地Beer对象,然后将其丢弃。

修改 根据我的评论,你需要:

  • 定义新的PDO连接,例如$conn
  • 设置类似$beerEditor = new BeerEditor($conn);
  • 的内容
  • 运行$beerEditor->addBeer($new_beer);

谷歌可以帮到你很多,这里

答案 1 :(得分:0)

看起来$ _POST = $表格应该是$ form = $ _ POST。你要删除所有数据。此外,在您的示例中未调用addBeer。 此外,您的登录系统是可利用的。如果我没有从浏览器中点击它,我可以忽略重定向

答案 2 :(得分:0)

除了@ doliver的回答

count($validationErrors) 

将返回1,因为它的Int不是数组。所以if语句中的任何内容都不会运行