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

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

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

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

Q&A

解決済

2回答

3814閲覧

PHP クラスでsyntax error

a-_.

総合スコア133

PHP

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

0グッド

0クリップ

投稿2016/09/25 04:38

PHPのクラスで各メソッド毎にファイルを作成してデータベースにアクセスし、そこから出力するという処理を行いたいんですが、Parse error: syntax error, unexpected 'list' (T_LIST), expecting identifier (T_STRING)とエラー表示され、エラーと思われる箇所を訂正してみたものの、何がsyntax errorなのかが分からなくなりました
XXX1.phpはデータをデータベースへinsertするクラスで、エラーはこのコードのnameのpost送信の箇所を指しているので、このクラスに何かエラーがあるのではと思ったのですが、特定ができません
XXX4.phpはlistと称してデータベースからデータ取得するクラスとして作成しており、このクラスに何かエラーがあるのではと思ったのですが、特定ができません

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("mysqli:host=XXX;XXX", "XXX", "XXX"); 8 $p_obj->name = $_POST['name'];//←ここに'list'のエラー表示 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("mysqli:host=XXX;XXX", "XXX", "XXX"); 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("mysqli:host=XXX;XXX", "XXX", "XXX"); 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//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 mysqli_query("INSERT INTO XXX(name, comment) VALUES('$this->name', '$this->comment')"); 11 $this->close(); 12 } 13 } 14?>

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 list() { 9 $this->connect(); 10 $get = mysqli_query("SELECT * FROM XXX ORDER BY time DESC"); 11 $i = 0; 12 $this->result = null; 13 while($this->row = mysqli_fetch_assoc($get)) { 14 $this->result[$i] = array('name' => "{$this->row['name']}", 'comment' => "{$this->row['comment']}"); 15 $i++; 16 } 17 $this->close(); 18 return $this->result; 19 } 20 } 21?>

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

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

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

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

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

mpyw

2016/09/25 06:19 編集

質問とは関係ないのでこちらに書きますが mysqli_query("INSERT INTO XXX(name, comment) VALUES('$this->name', '$this->comment')"); このあたり,典型的なSQLインジェクション脆弱性がありますね.ローカル環境専用であれば構いませんが,スクリプトを公開する予定であれば脆弱性を修正しましょう.非常に危険です.
guest

回答2

0

ん? syntax error, unexpected 'list' (T_LIST), expecting identifier (T_STRING)

'list' っていうのがPHPの予約語でconstantsやcalss名、function名、method名では使えない

投稿2016/09/25 05:27

carimatics

総合スコア740

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

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

mpyw

2016/09/25 06:12 編集

旧来のPHP5系では使えませんが,新しいPHP7系では使えるようになっています.PHP5を切り捨てて,PHP7以降のみを対象とするコードを書くのも選択肢の1つですね.
carimatics

2016/09/25 07:02

情報ありがとうございます。 調べてみたら去年に比べてPHP7のシェアが伸びているのですね。 そろそろノウハウも貯まってきていそうなので、個人的な開発であればPHP7で新規開発、ないし移行するのも選択肢として十分有りえそうです。 組織で開発しているとなかなか厳しいかもしれませんが…。
guest

0

ベストアンサー

ぱっと思いつくのは、PHP にはすでに list() 関数があるので
それとかぶってるってくらいですかねえ。

あと、XXX1.php で SQL の中の変数が展開されてないっぽいのと、
XXX4.php で result に追加するときのダブルクォートと中括弧は不要です。

投稿2016/09/25 05:31

takasima20

総合スコア7458

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

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

mpyw

2016/09/25 06:10

厳密に言うとlistは関数ではなく言語構造ですね.ふつうの関数ではありえないような,代入式の左辺で,という使われ方をします.
takasima20

2016/09/25 07:26

フォローありがとうございます。 確かに「関数」といういいかたは不正確でしたね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問