Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.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 类未写入数据库PDO_Php_Mysql_Class_Pdo - Fatal编程技术网

Php 类未写入数据库PDO

Php 类未写入数据库PDO,php,mysql,class,pdo,Php,Mysql,Class,Pdo,我有一个类设置,可以将一些数据写入mysql数据库,而mysql数据库似乎并没有实际写入数据。我认为问题在于PDO的声明。我在站点上的其他脚本上仔细检查了查询和数据库连接,它们工作正常。有什么想法吗 这是我的表格: <?php $navsection = 'addClass'; $dir = $_SERVER['DOCUMENT_ROOT'] . "/grades/"; // load php-login components require_once $d

我有一个类设置,可以将一些数据写入mysql数据库,而mysql数据库似乎并没有实际写入数据。我认为问题在于PDO的声明。我在站点上的其他脚本上仔细检查了查询和数据库连接,它们工作正常。有什么想法吗

这是我的表格:

<?php
    $navsection = 'addClass';
    $dir = $_SERVER['DOCUMENT_ROOT'] . "/grades/";
    // load php-login components
    require_once $dir . 'php-login.php';
    $classes = new Classes();

    // load head file
    require_once $dir . 'includes/head.php';
?>

<h1>Add a Class</h1>
<?php 
    // show negative messages
    if ($classes->errors) {
        foreach ($classes->errors as $error) {
            echo $error;
        }
    }

    // show positive messages
    if ($classes->messages) {
        foreach ($classes->messages as $message) {
            echo $message;
        }
    } 
?>
<br />
<form method='post' action='<?php $siteurl; ?>/grades/pages/addClass.php' name='addClass_form'>
    <label for='className'>Class Name:</label>
    <input id='className' type='text' name='className' required /><br />
    <label for='classProfessor'>Professor's Name:</label>
    <input id='classProfessor' type='text' name='classProfessor' /><br />
    <label for='classPeriod'>Class Period:</label>
    <select id='classPeriod' name='classPeriod'>
        <option value='Spring 2014'>Spring 2014</option>
        <option value='Fall 2013'>Fall 2013</option>
    </select><br />
    <label for='classStartDate'>Class Start Date:</label>
    <input id='classStartDate' type='date' name='classStartDate' /><br />
    <label for='classEndDate'>Class End Date:</label>
    <input id='classEndDate' type='date' name='classEndDate' /><br />
    <input type='submit' name='addClass' value='Submit' />
</form>

<?php
    //load footer file
    require_once $dir . 'includes/footer.php';
?>

添加一个类


哪里定义了
$siteurl
?您需要通过
$this->db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION)
回送它
查看并配置PDO对象以抛出异常。默认情况下,PDO错误silentlySee也可能是一个类的严重错误实现。这里有一些问题需要解决:
session\u start()
应该位于代码的顶部,而不是隐藏在构造函数中;您依赖于$\u POST和一些与DB相关的常量,这些常量应该被注入构造函数或通过公共方法注入;你所有的方法都是私有的,那么为什么还要麻烦设置一个类呢?;检查PDO活动时没有错误,只是检查数据库连接是否已设置;您的方法不会返回任何有用的值(它们不能返回,因为它们是私有的)。我相信还有更多。
<?php
    class Classes
    {
        private $db_connection          = null;
        public $classAdd_successful         = false;
        public $classDelete_successful      = false;
        public $classEdit_successful        = false;
        public $errors              = array();
        public $messages                = array();

        public function __construct()
        {
            session_start();

            if (isset($_POST["addClass"])) {
                $this->addNewClass($_POST['className'], $_POST['classProfessor'], $_POST['classPeriod'], $_POST['classStartDate'], $_POST['classEndDate']); 
            }
        }

        private function databaseConnection()
        {
            if ($this->db_connection != null) {
                return true;
            } else {
                try {
                    $this->db_connection = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME, DB_USER, DB_PASS);
                    return true;
                } catch (PDOException $e) {
                    $this->errors[] = "Database error";
                    return false;
                }
            }
        }

        private function addNewClass ($className, $classProfessor, $classPeriod, $classStart, $classEnd)
    {
            if(empty($className)) {
                $this->errors[] = "Please enter a class name.";
            } elseif(empty($classProfessor)) {
                $this->errors[] = "Please enter a class professor.";
            } elseif(empty($classPeriod)) {
                $this->errors[] = "Please select a class period";
            } elseif(empty($classStart)) {
                $this->errors[] = "Please enter a class start date.";
            } elseif(empty($classEnd)) {
                $this->errors[] = "Please enter a class end date.";
            } 

            if ($this->databaseConnection() == true) {
                //Write data to database
                $query_new_class_insert = $this->db_connection->prepare('INSERT INTO classes (class_name, user_id, professor_name, class_start, class_end, school_period) VALUES(:className, :userID, :professorName, :classStart, :classEnd, :schoolPeriod)');
                $query_new_class_insert->bindvalue(':className', $className, PDO::PARAM_STR);
                $query_new_class_insert->bindvalue(':userID', $_SESSION['user_id'], PDO::PARAM_INT);
                $query_new_class_insert->bindvalue(':professorName', $classProfessor, PDO::PARAM_STR);
                $query_new_class_insert->bindvalue(':classStart', $classStart, PDO::PARAM_STR);
                $query_new_class_insert->bindvalue(':classEnd', $classEnd, PDO::PARAM_STR);
                $query_new_class_insert->bindvalue(':schoolPeriod', $schoolPeriod, PDO::PARAM_STR);
                $query_new_class_insert->execute();

                $this->classAdd_successful = true;
            } else {
                $this->errors[] = "Database write error";
            }
        }
    }
?>