douzhan8652 2015-06-20 11:27
浏览 70
已采纳

致命错误:在非对象上调用成员函数setAttribute()

I am trying to setup a newseltter, but in my newsletter class I keep getting the error: Fatal error: Call to a member function setAttribute() on a non-object

I have been converting the file from an older non pdo version.

<?php
class NEWSLETTER{
    private static $email;
    private static $datetime = null;
    private static $valid = true;

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

    public function signup($email){
        if(!empty($_POST)){
            self::$email = $_POST['email'];
            self::$datetime = date('Y-m-d H:i:s');

            if(empty(self::$email)){
                $status = "Error";
                $message = "No email entered.";
                self::$vaild = false;
            }else if(!filter_var(self::$email, FILTER_VALIDATE_EMAIL)){
                $status = "Error";
                $message = "Vaild email required.";
                self::$valid = false;
            }

            if(self::$valid){
                $this->db->setAttribute(PDO::ATTR_ERRMODE_EXCEPTION);
                $exist = $this->prepare("SELECT COUNT (*) FROM newsletter WHERE email='$email'");
                $exist->execute();
                $data_exists = ($exist->fetchColumn() > 0) ? true : false;

                if(!$data_exists){
                    $sql = "INSERT INTO newsletter (email, date) VALUES (:email, :datetime)";
                    $q = $pdo->prepare($sql);
                    $q->execute(array(':email'=>self::$email, ':datetime'=>self::$datetime));

                    if($q){
                        $status = "Success";
                        $message = "You have been subscribed to the Epic Owl newsletter.";
                    }else{
                        $status = "Error";
                        $message = "An error occurred, try again.";
                    }
                }else{
                    $status = "Error";
                    $message = "You have already subscribed at an earlier date.";
                }
            }

            $data = array('status' => $status, 'message' => $message);

            echo json_encode($data);
        }
    }
}
?>

 <?php
ini_set('display_errors', '1');
require_once './includes/conn.php';

if(!empty($_POST['email'])){
    $email = $_POST['email'];

    $newsletter->signup($email);
}
?>

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <title>EpicOwl UK | CMS Admin Panel Mail List</title>
        <meta charset="utf-8">
        <link rel="shortcut icon" href="../images/favicon.ico" type="image/x-icon" />
        <link rel="stylesheet" type="text/css" href="../css/main.css">
    </head>
    <body>
    <div id="header">
        <a href="index.php"><img id="logo" src="../images/logo.png" /></a>
        <div id="navigation">
            <ul>
                <a href="../index.php"><li>Home</li></a>
                <a href="./index.php"><li>Admin Panel</li></a>
            </ul>
        </div>
    </div>
    <div id="content">
    <form method="post">
        <br /><h2>Signup to the Epic Owl Newsletter(NOT WORKING! STILL BEING DEVELOPED!)</h2>
        <input type="text" name="email" placeholder="Your Email Address" /><br /><br />
        <input type="submit" name="submit" value="Signup" /><br /><br /><br /><br />
    </form>

            <script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
            <script src="./includes/js/lib.js"></script>
    </div>
    <div id="footer">
        <p class="copyright">&copy; EpicOwl UK. All Rights Reserved.</p>
    </div>
    </body>
    </html>
  • 写回答

1条回答 默认 最新

  • douxing2156 2015-06-20 11:43
    关注

    $pdo is not defined anywhere in your class. You should call setAttribute() and prepare() on your db connection, i.e. $this->db->setAttribute() provided $this->db is actually a valid connection to a DB.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 请问读取环境变量文件失败是什么原因?
  • ¥15 在若依框架下实现人脸识别
  • ¥15 网络科学导论,网络控制
  • ¥100 安卓tv程序连接SQLSERVER2008问题
  • ¥15 利用Sentinel-2和Landsat8做一个水库的长时序NDVI的对比,为什么Snetinel-2计算的结果最小值特别小,而Lansat8就很平均
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载