这是我之前提出的一个问题的更简洁版本,希望得到答案。我已经创建了一个表单,该表单应该使用类将已提交的信息发送到数据库。
的 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;
}
}
答案 0 :(得分:1)
$new_beer->setBeerRating($beer_rating);
echo "Beer added.";
您需要在此处添加一行,您可以在其中调用BeerEditor的addBeer($new_beer)
函数。目前,您没有任何调用该函数的内容,因此绝不会执行INSERT。您的Beer类中没有任何内容与数据库交互,因此您所做的只是设置本地Beer对象,然后将其丢弃。
修改强> 根据我的评论,你需要:
$conn
$beerEditor = new BeerEditor($conn);
$beerEditor->addBeer($new_beer);
谷歌可以帮到你很多,这里
答案 1 :(得分:0)
看起来$ _POST = $表格应该是$ form = $ _ POST。你要删除所有数据。此外,在您的示例中未调用addBeer。 此外,您的登录系统是可利用的。如果我没有从浏览器中点击它,我可以忽略重定向。
答案 2 :(得分:0)
除了@ doliver的回答
count($validationErrors)
将返回1
,因为它的Int不是数组。所以if语句中的任何内容都不会运行