2

拡張クラスで mysqli を実装するにはどうすればよいですか?

画像をアップロードして MySQL データベースに保存していますが、次のエラーが発生します。

Notice: 未定義の変数: mysqli in ...ecc/ecc/ 行 33

致命的なエラー: 33 行目の ...ecc/ecc/ の非オブジェクトに対するメンバー関数 query() の呼び出し

ここに私のテストコードがあります:

<?php
    interface ICheckImage {
        public function checkImage();
        public function sendImage();
    }           
    abstract class ACheckImage implements ICheckImage {
        public $image;
        private $mysqli;    
        public function _construct(){
            $this->image = $_POST['image'];
            $this->mysqli = new mysqli('localhost','test','test','test');
        }
    }           
    class Check extends ACheckImage {
        public function checkImage() {
            if($this->image > 102400) {
                echo "File troppo grande";
            } 
        }
        public function sendImage() {
            //This is the line 33 give me the error
            if ($mysqli->query("INSERT INTO images (image) VALUES ('$this->image')")) {
            echo "Upload avvenuto &nbsp";
            } else {
                echo "Errore &nbsp" . $mysqli->error;
            }  
        }
    }   
    $form = new Check();
    $form->checkImage();    
    $form->sendImage();
?>
4

1 に答える 1

3

コードにいくつかのエラーがあります。

  1. メンバーは、$mysqli抽象クラス内でプライベートです。クラスに継承されCheckないため、そこには存在しません。保護してください。

  2. $this->特に$this->mysqliこのインスタンスでは、クラスのメンバーへのアクセスは常に前にある必要があります。

  3. コンストラクター関数は__construct、先頭に 2 つのアンダースコアを付けて名前を付ける必要があります。

  4. 画像チェックがおかしい。$_POST['image'] には、データベースに保存すると予想されるものが含まれていますが、それを整数値と比較し、それが大きい場合はエラー メッセージをエコーするようです。たとえば、POST データの文字列を整数と比較するなど、データ処理は機能しますが、別のものが必要なようです。

于 2013-02-04T22:31:39.360 に答える