質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.49%

  • PHP

    20770questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • MySQL

    5990questions

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

  • mysqli

    161questions

    MySQLiはPHP5より導入されているデータベース用のドライバです。MySQL 4.1.3以降の新しい機能の利点をまとめています。

PHPのエラー原因について

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 1,005

yutaishikawa_

score 46

151行目の、class task の$this->mysqliの$this でパースエラーで弾かれてしまいます。
なにがいけないのでしょう。

calenderクラスを継承した task クラス でメソッドを作り、
task_doクラス でインスタンスを実行するつもりです。
<?php
// dbconnect.php
class dbconnect {
    //mysqli の インスタンス化 、接続
    public function ConnectDb() {
        $this->mysqli = new mysqli('localhost', '//////', '/////', '//////');
            if ($this->mysqli->connect_error){
                die('Connect Error (' . $this->mysqli->connect_errno . ') '. $this->mysqli->connect_error);
                exit;
            }
    }
}
class Calender extends dbconnect {
    protected $weeks = array();
    protected $timeStamp;
    protected $task = '';  
    protected $userData = array();
    protected $taskData = array();
    // mysqli の メソッド
    public function __construct(){
        $dbconnect = new dbconnect();
        if ($this->timeStamp === false) {
            $this->timeStamp = time();
        }
        parent::dbconnect();
    }
    // 現在の日時取得 (Y-m)
    public function setTimeStamp(){
        $ym = isset($_GET['ym']) ? $_GET['ym'] : date("Y-m");
        $this->timeStamp = strtotime($ym . "-01");
            if ($this->timeStamp === false){
                $this->timeStamp = time();
            }
    }
    // 現在の日時取得 (Y-m-d)
    public function setTimeStamp_day(){
        $ymd = isset($_GET['ymd']) ? $_GET['ymd'] : date("Y-m-d");
        $this->timeStamp = strtotime($ymd);
            if ($this->timeStamp === false){
                $this->timeStamp = time();
            }
    }    
    //空の処理を準備 
    public function task() {
        return $this->task; 
    }
    // カレンダー作成
    public function query() {
        // SQLで今月を取得する処理。先月の最終日と翌月の初日を不等号で期間を指定し、ANDで結ぶ。
        $lastMonth = date("Y-m-d",strtotime("last day of - 1 month",$this->timeStamp));
        $nextMonth = date("Y-m-d",strtotime("first day of + 1 month",$this->timeStamp));
        $userData = array();
        // PHP->MySQLtable
        $query = $this->mysqli->query("SELECT * FROM tasks WHERE task_date > '$lastMonth' AND task_date <'$nextMonth'");    
            if (!$query) {
                die('クエリーが失敗しました。'.mysql_error());
            }
        // 連想配列で$rowを取得する
        while($row = $query->fetch_assoc()) {
            $userData[date('j',strtotime($row['task_date']))] = array(
            // 各メンバ取得
            'id' => $row['id'],
            'title' => $row['title'],
            'task_date' => $row['task_date'],
            'place' => $row['place'],
            'memo' => $row['memo'],
           );
        }
        // 最終日取得
        $lastday = date("t",$this->timeStamp);
        // 1日の曜日番号の数だけ空白を出力(7月だと3つ)
        $youbi = date("w",mktime(0,0,0,date("m",$this->timeStamp),1,date("Y",$this->timeStamp)));
        // $weekを初期化
        $week = "";
        // 結合代入演算子を使用して、<td>を取得。一週間(0~6の<td>)が完成。
        $week .= str_repeat('<td></td>', $youbi);
        // 上記の定義で1日から31日までfor文で取得
        for ($day = 1; $day <= $lastday; $day++ ,$youbi++) {
            // もし$userData[日付]の変数が    空の場合
                if (isset($userData[$day])) {
                // リンクをはる
                    $week .= '<td><a href="taskListDay.php">'.$day.'</a></td>';
                }else{
                // リンクをはらない
                    $week .= '<td class="youbi_'.($youbi % 7).'">'.$day.'</td>';
                }
            // $youbiを7で割った余り=6。(土曜日)
            if ($youbi % 7  == 6 OR $day == $lastday) {
                // もし 1 = $lastdayだったとき、<tb>に$youbiを7で割ったものを6で引く
                if($day == $lastday) {
                    $week .= str_repeat('<td></td>', 6 - ($youbi % 7));
                }    
                // 結果、<tr>は$week
                $this->weeks[]='<tr>' .$week .'</tr>';
                // $weekを初期化する
                $week = '';
            }
            // week""を初期化し続ける処理によってカレンダー型を形成。
            } 
    }
    public function Create(){
        // $pass = file_get_contents('edition.php');
        // PHP->MySQLtable
        // タスクのパラメータを送れるようにする。
        $view = $this->mysqli->query("SELECT * FROM tasks");
        // エラー処理
        if (!$view) {
            die('クエリーが失敗しました。'.mysql_error());
        }
        while ($this->row = $view->fetch_assoc()) {
            // 各メンバ取得
            $id = $this->row['id'];
            $title = $this->row['title'];
            $task_date = $this->row['task_date'];
            $place = $this->row['place'];
            $memo = $this->row['memo'];
            $this->task .= "<tr><td><a href='edition.php'>${title}</a></td><td>${task_date}</td><td>${place}</td><td>${memo}</td></tr>";    
        }
    }
    //    html記述用
    public function h($s){
        return htmlspecialchars($s, ENT_QUOTES, 'UTF-8');
    }
    // リストを取得
    public function mysqli_result() {
        return $this->mysqli;
    }
    // タスクを取得
    // 一週を取得
    public function getWeeks() {
        return $this->weeks;
    }
    // 前月を取得    
    public function prev() {
        return date("Y-m", mktime(0, 0, 0, date("m", $this->timeStamp)-1, 1, date("Y", $this->timeStamp)));
    }
    // 翌月を取得
    public function next() {
        return date("Y-m", mktime(0, 0, 0, date("m", $this->timeStamp)+1, 1, date("Y", $this->timeStamp)));
    }
    // 現在の日時を取得 (Y-m)
    public function yearManth() {
        return date("Y-m" ,$this->timeStamp);
    }
    public function getData(){
        return $this->userData;
    }
}
class task extends Calender {
    // メソッドを作成
    protected $stmt = $this->mysqli;
    protected $create = "";
    protected $enter = $stmt->extends;

    public function setSQL() {
        return $this->stmt;
    }
    public function create() {
        return $this->create;
    }
    public function Enter() {
        return $this->enter;
    }
}
class task_do extends task {
    // 引数を作成
    protected $inSert = $this->stmt->prepare("INSERT INTO tasks (id,title,task_date,place,memo) VALUES (?,?,?,?,?)");
    protected $upDate = $this->stmt->prepare("DELETE FROM tasks where task_date = ?");
    protected $deLete = $this->stmt->prepare("UPDATE tasks set title = ? where id = '$id';");

    public function inSert() {
        $this->create =  "INSERT INTO tasks VALUES (NULL,'Stuttgart','DEU','Stuttagart',617000)";
        $this->stmt->query($this->create);
        $this->enter;
    }
    public function upDate() {
        $this->upDate;
        $this->enter;
    }
    public function deLete() {
        $this->deLete;
        $this->enter;
    }
}


?>
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+5

class task extends Calender {
    // メソッドを作成
    protected $stmt = $this->mysqli;
    protected $create = "";
    protected $enter = $stmt->extends;
    
    :

}

Parse error: syntax error, unexpected '$this' (T_VARIABLE) in php.php on line 151

そのような位置に $this を書くことはできません。

継承元の dbconnect クラスの $this->mysqli を $stmt に入れたいということだと思いますが、
それなら次のようにコンストラクタを使う必要があります。

class task extends Calender {

    protected $stmt = $this->mysqli;
    protected $create = "";
    protected $enter = $stmt->extends;

    public function __construct() {
        parent::__construct();
        $this->stmt = $this->mysqli;
        $this->enter = $stmt->extends;
    }

    :

}

task_do クラスも同様です。

class task_do extends task {

    protected $inSert;
    protected $upDate;
    protected $deLete;

    public function __construct() {
        parent::__construct();
        $this->inSert = $this->stmt->prepare("INSERT INTO tasks (id,title,task_date,place,memo) VALUES (?,?,?,?,?)");
        $this->upDate = $this->stmt->prepare("DELETE FROM tasks where task_date = ?");
        $this->deLete = $this->stmt->prepare("UPDATE tasks set title = ? where id = '$id';");
    }

    :
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/07/27 14:00

    コメントありがとうございました。
    無事解決致しました。

    キャンセル

+2

クラス定義部では$thisは使えません。コンストラクタで初期化してください。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/07/27 14:00

    コメントありがとうございました。
    無事解決致しました。

    キャンセル

関連した質問

  • 解決済

    PHP strtotime()について質問です

    PHPを使っています strtotime("last Monday")は、今日が月曜日の場合どう返すのでしょうか? 今日が月曜だった場合は今日の日付を返してほしいのですが、

  • 解決済

    if文の基礎的な使用方法について

    初めまして。 PHP初心者です。 今回、某企業より課題が出されため、PHP+MySQLを用いて、タスク機能付きのカレンダー(縛りあり)を作成しています。 縛りは、 ・クラス化しない

  • 解決済

    SELECT文とパラメータの引き継ぎ

    前回に引き続き、質問させていただきます。 現在タスク機能付きのカレンダーを作成しているところでして、SELECT文でMySQLからカラムを表示しようとしたところ、中々うまくいきませ

  • 解決済

    $_GET?パラメータ?SELECT?

    タスクカレンダーを作る際に、INSERT文を書いてPHPからMySQLにデータをインサートします。 そこには、id[pri],日付[timestamp],タイトル[varchar]

  • 解決済

    PHPのカプセル化

    こんにちは。 いよいよクラス化の技術を学び始めました。 今回、前回まで書いてきたコードをカプセル化し、すべての処理を1ファイルずつにまとめました。 ですが、なかなかキレイにまとまっ

  • 解決済

    画面遷移なしで編集したいのですが、書き方が全くわかりません。。

    「編集」と「削除」を画面遷移なしで実行したいのですが、ajaxが分からず困っています。どうすれば、意図した結果が得られるでしょうか?>< PHPとMySQLを使っています。 PH

  • 解決済

    prepareとquery

    単純な質問になります (以下は$mysqli=new mysqliでデータベースは接続済みで読んでください) $searchName="470138f050bdd85431e070

  • 解決済

    未入力だと出るアラート表示がなぜか特定のページで出ない問題

    見よう見まねで検索フォーム作ってアラート表示も実装してみました。 他のページではアラートが出るのですが検索実行ページではアラートが出ないです。 どうしてなのでしょうか。 【

同じタグがついた質問を見る

  • PHP

    20770questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • MySQL

    5990questions

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

  • mysqli

    161questions

    MySQLiはPHP5より導入されているデータベース用のドライバです。MySQL 4.1.3以降の新しい機能の利点をまとめています。