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

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

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

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

Q&A

解決済

5回答

3421閲覧

PHP エラーの場所が分からない

a-_.

総合スコア133

PHP

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

0グッド

1クリップ

投稿2016/09/27 07:26

編集2016/09/27 07:51

PHPのクラスで各メソッド毎にファイルを作成してデータベースにアクセスし、そこから出力するという処理を行いたいんですが、ここでお聞きしたいのが大きく2つあります

⓵メインのクラスでParse error: syntax error, unexpected '$i' (T_VARIABLE)
とエラー表示されました
原因がよく分からないんですが、$iの何がエラーなんでしょうか

⓶全クラスについてなんですが、手続き型でコーディングしていた箇所をオブジェクト指向型に全て書き換えてみて、クラス分けしている為に直ぐエラーに気付けないんですが、オブジェクト指向型とはこのようなコーディングで正しいのでしょうか
初めてこの書き方にしたため、本などで見比べても理解しづらい点もあるのでご指摘お願いします

PHP

1//メインのクラス 2<?php 3 require_once("XXX.php"); 4 5 if (isset($_POST['name'], $_POST['comment'], $_POST['bbs']) && $_POST['bbs'] == "post") { 6 require("XXX1.php"); 7 $p_obj = new Post(); 8 $p_obj->name = $_POST['name']; 9 $p_obj->comment = $_POST['comment']; 10 $p_obj->post(); 11 } elseif (isset($_POST['bbs']) && $_POST['bbs'] == "update") { 12 require("XXX2.php");//←ここにエラー表示 13 $u_obj = new Update(); 14 $u_obj->name = $_POST['name']; 15 $u_obj->comment = $_POST['comment']; 16 $u_obj->chk = $_POST['chk']; 17 $u_obj->update(); 18 } elseif (isset($_POST['bbs']) && $_POST['bbs'] == "delete") { 19 require("XXX3.php"); 20 $d_obj = new Delete(); 21 $d_obj->chk = $_POST['chk']; 22 $d_obj->delete(); 23 } 24 25 require("XXX4.php"); 26 $l_obj = new List_table; 27 $data = $l_obj->list(); 28 echo strlen($data); 29?>

PHP

1//XXX.php データベース接続クラス 2<?php 3 class Db { 4 public $class; 5 public function connect() { 6 $mysqli = new mysqli("XXX", "XXX", "XXX", "XXX"); 7 $mysqli->select_db("XXX"); 8 } 9 10 public function close() { 11 $mysqli->close(); 12 } 13 } 14?>

PHP

1//XXX1.php 2<?php 3 require_once("XXX.php"); 4 5 class Post extends Db { 6 public $name; 7 public $comment; 8 public function post() { 9 $this->connect(); 10 $stmt = $mysqli->prepare("INSERT INTO XXX(name, comment) VALUES(?, ?)"); 11 $stmt->bind_param('ss', $_POST["name"], $_POST["comment"]); 12 $stmt->execute(); 13 $this->close(); 14 } 15 } 16?>

PHP

1//XXX2.php 2<?php 3 require_once("XXX.php"); 4 5 class Update extends Db { 6 public $name; 7 public $comment; 8 public $chk; 9 public function update() { 10 $this->connect(); 11 for($a = 0; $a < count($this->chk); $a++) { 12 $stmt = $mysqli->prepare("UPDATE XXX SET name = '$this->name', comment = '$this->comment' WHERE id = '".$this->chk[$a]."'"); 13 } 14 $stmt->execute(); 15 $this->close(); 16 } 17 } 18?>

PHP

1//XXX3.php 2<?php 3 require_once("XXX.php"); 4 5 class Delete extends Db { 6 public $chk; 7 public function delete() { 8 $this->connect(); 9 for($b = 0; $b < count($this->chk); $b++) { 10 $stmt = $mysqli->prepare("DELETE FROM XXX WHERE id = '".$this->chk[$b]."'"); 11 } 12 $stmt->execute(); 13 $this->close(); 14 } 15 } 16?>

PHP

1//XXX4.php 2<?php 3 require_once("XXX.php"); 4 5 class List_table extends Db { 6 public $result; 7 public $row; 8 public function bbslist() { 9 $this->connect(); 10 $sql = "SELECT * FROM XXX ORDER BY time DESC"; 11 $result = $mysqli->query($sql) 12 $i = 0; 13 $this->result = null; 14 while(row = $result->fetch_assoc($sql)) { 15 $this->result[$i] = array('name' => $this->row['name'], 'comment' => $this->row['comment']); 16 $i++; 17 } 18 $this->close(); 19 } 20 } 21?>

追記
XXX4.phpです
他のクラスのも念の為訂正します

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/09/27 07:35 編集

$i があちこちで使われているので、どのファイルの何行目なのかわかるように示してください。たとえば一行コメントなどで書き加えていただけると助かります。
jm1156

2016/09/27 07:38

1つの書き込みで、2つ質問しないでください。 2つに分けましょう。
guest

回答5

0

ベストアンサー

PHP

1//XXX4.php 2 $result = $mysqli->query($sql)

末尾にコンマがないですね。あと

PHP

1//XXX4.php 2 while(row = $result->fetch_assoc($sql)) {

のrowもシンタックスエラーになるのではないでしょうか。

投稿2016/09/27 07:53

srsnsts

総合スコア480

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

PHP

1$result = $mysqli->query($sql)

セミコロンが無い。
syntax errorの意味わかってますか?

投稿2016/09/27 07:48

jm1156

総合スコア866

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/09/27 07:50

ここも while(row = $result->fetch_assoc($sql)) { ↓ while($row = $result->fetch_assoc($sql)) {
guest

0

「$i」を「$j」「$k」などと変えていき、発生源を特定してみては?

投稿2016/09/27 07:39

kei344

総合スコア69364

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

a-_.

2016/09/27 07:50 編集

ご回答ありがとうございます 見づらくてすいませんでした 発生源はXXX4.phpでした
guest

0

PHP2を取り込んでると思ったら4を取り込んでたのがちょっとわからなかった。
エラー文のsyntax error, unexpectedをちょっとググルだけで情報がいっぱい出てきました。
いままでエラーはどうしてたんでしょうか。ノーミスで行ってたんでしょうか。だとしたらすごいと思います。

投稿2016/09/27 17:57

toutou

総合スコア2050

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jm1156

2016/09/27 23:43

いままでのエラーは、答えを聞いて、コピペして終わり。 そんな感じの流れがもう数か月…。
guest

0

直接の回答じゃないけど、class Dbにてconnect()メソッドで獲得している$mysqliをクラス内変数として保持していない場合、connect()メソッドを抜けたら内容は保証されない気がするんですが、問題ないのかなぁ。
継承クラスのメソッドでなんの宣言もなく$mysqliにアクセスしているのが、どうにも気持ち悪くて。

さらには、public $class;ってあるけど、本当はpublic $mysqli;の間違いなのかも?

phpだから大丈夫、なの?

投稿2016/09/27 07:55

編集2016/09/27 08:03
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rana_kualu

2016/09/27 16:20

> phpだから大丈夫、なの? 大丈夫じゃないです。 PHPの場合クラス内へのアクセスは必ず$this->xxって書かないといけない(Javaみたいに同名ならthis.を省略とかできない)ので、インスタンス変数宣言にかかわらず全く継承ができてません。 まあ元投稿者へのアドバイスとしては「まともな入門書を一冊買え」ですかね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問