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

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

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

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

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

MAMP

Mac 上で WordPress などの動的ページのサイトが作れるように環境を構築するフリーソフト

Q&A

解決済

3回答

790閲覧

Parse error: syntax error, unexpected ','

1004

総合スコア74

MySQL

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

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

MAMP

Mac 上で WordPress などの動的ページのサイトが作れるように環境を構築するフリーソフト

0グッド

0クリップ

投稿2018/09/21 05:28

前提・実現したいこと

PHPで日記投稿システムを作っています。
php上のSQLで同じユーザーが書き込んだ日記を表示させるコードを実装中に以下のエラーメッセージが発生しました。(ブラウザ上に書かれています。)
実現したいこととしては、メールアドレスごとに過去に該当ユーザーが書いた日記をそのユーザーだけが閲覧できるようにしたいです。

発生している問題・エラーメッセージ

Parse error: syntax error, unexpected ',' in C:\MAMP\htdocs\mysql\afterLogin.php on line 21

下記の画像はDBの中身になります。例えば、idが10番目のemailがiii@iiiのcontentsを表示させたい場合、

イメージ説明

afterLogin.php↓

<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title></title> </head> <?php session_start(); $link = mysqli_connect("localhost","root","root","memberapp"); if(mysqli_connect_error()){ die("DBへの接続失敗!"); } echo "このユーザーは".$_SESSION['email']."でログインしています。"; //本人の以前の日記を表示させる $query = "SELECT contents FROM `users` WHERE email = '".($link,$_SESSION['email'])."'"; $result = mysqli_query($link,$query); echo "前回の投稿".$result; if(!empty($_POST['text'])){ $contents = $_POST['text']; $stmt = $link->prepare('update users set contents = concat(contents,"\n",?) where email = ?'); $stmt->bind_param('ss', $contents, $_SESSION['email']); $stmt->execute(); echo "今回の投稿:".$_POST['text']; $_SESSION['text'] = $_POST['text']; } ?> <form method="post"> <input type="text" name="text" placeholder="Please fill in the blank"> <input type="submit" name="submit" value="投稿"> </form>

###homework.php↓

<?php session_start(); $link = mysqli_connect("localhost","root","root","memberapp"); if(mysqli_connect_error()){ die("DBへの接続失敗!"); } //$query = "SELECT * FROM users WHERE name = '".mysqli_real_escape_string($link,$name)."'"; if(array_key_exists('email',$_POST) OR array_key_exists('password',$_POST)){ if($_POST['email'] == ''){ echo "Eメールアドレスを入力してください"; } elseif($_POST['password'] == '') { echo "パスワードを入力してください"; } else { $query = "SELECT password FROM `users` WHERE email = '".mysqli_real_escape_string($link,$_POST['email'])."'"; $result = mysqli_query($link,$query); $row = $result->fetch_assoc(); if(mysqli_num_rows($result) > 0){ if($row["password"] == $_POST['password']){ $_SESSION["email"] = $_POST['email']; header("Location:afterLogin.php"); }else{ echo "入力されたパスと値が一致しません。"; } } else { $query = "INSERT INTO `users` (`email`,`password`) VALUES ('".mysqli_real_escape_string($link,$_POST['email'])."','".mysqli_real_escape_string($link,$_POST['password'])."')"; if(mysqli_query($link,$query)){ echo "登録されました!"; } else { echo "登録に失敗しました!"; } } } } ?> <form method="post"> <input type="email" name="email" placeholder="email"> <input type="password" name="password" placeholder="password"> <input type="submit" name="submit" value="signin"> </form>

試したこと

mysqli_real_escape_stringとmysqli_queryの引数を減らして、
.mysqli_real_escape_string($_POST['email'])や、
mysqli_query($query)として実行しても「引数が足りません」というエラーになり、
うまくいきませんでした。

補足情報(FW/ツールのバージョンなど)

windows10
MAMP
Brackets

分かる方、ご教示いただければ幸いです。

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

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

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

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

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

guest

回答3

0

これまでの質問の履歴を見ると、単純な文法エラーの解決ができなくて質問を繰り返しているようですが、一体どんな開発環境をお使いですか?

まともな開発環境があれば、このような単純なミスは事前に防ぐことができます。

こちらは提示されたコードを Netbeans に貼り付けたところです。

イメージ説明

コードを書いているときにリアルタイムに指摘してくれるので、こんな質問をしなくて済むようになりますよ、

投稿2018/09/21 05:34

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

1004

2018/09/21 05:39

ご回答、ありがとうございます。 エディタはBracketsを使用いています。 あと、自習用にVisualStudioCodeを使っています。 Netbeansも使ってみます。リアルタイムで指摘してくれるのはありがたいですね。
1004

2018/09/21 06:11

この際、エディタを変えようと思います。Netbeans等、おススメのエディタが他にもあれば教えてください。
退会済みユーザー

退会済みユーザー

2018/09/21 06:12

自分はNetbeansしか使っていません。道具は自分で選びましょう。
1004

2018/09/21 06:13

なるほど。ご回答いただき、ありがとうございます。
guest

0

ベストアンサー

単純に

($link,$_SESSION['email'])

↓↓↓

PHP

1mysqli_real_escape_string($link,$_SESSION['email'])

なんでしょうけど、インジェクション対策としては不十分です
引数を渡すときはprepareで処理してください

投稿2018/09/21 05:46

yambejp

総合スコア114779

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

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

1004

2018/09/21 06:09 編集

ご回答、ありがとうございます。 $query = SELECT contents FROM `users` WHERE email =mysqli_real_escape_string($link,$_POST['email']); で合っていますか?変更したところ、Parse error: syntax error, unexpected 'contents' (T_STRING) in C:\MAMP\htdocs\mysql\afterLogin.php on line 21 となり、エラーが出ます。
yambejp

2018/09/21 06:15

$query = "SELECT `contents` FROM `users` WHERE `email` = '".mysqli_real_escape_string($link,$_SESSION['email'])."'"; じゃないですか?
1004

2018/09/21 06:46

変更したところ、Recoverable fatal error: Object of class mysqli_result could not be converted to string in C:\MAMP\htdocs\mysql\afterLogin.php on line 23 とエラー内容が変わりましたので、原因を調べています。 もし、何か分かれば、教えて下さい。 最終的には$resultでDBのcontentsデータを表示できれば目標が達成できます。
yambejp

2018/09/21 06:52

$row = mysqli_fetch_row($result); print $row["contents"]; みたいな感じです
madoka9393

2018/09/21 06:53

横から失礼いたします。 以下が参考になるのではないかと。 https://teratail.com/questions/208 Googleで調べればすぐに見つかるんですけどね。(could not be converted to stringで検索した最上段)
1004

2018/09/21 07:04

madoka9393様>非常に参考になりました。残る課題としては$resultにcontents列の内容を表示させることです。調べてみます。
1004

2018/09/21 07:36 編集

yambejp様>ご回答ありがとうございます。ご提示いただいた内容で試してみたところ、下記のエラーが出てしまいます。 Notice: Undefined index: contents in C:\MAMP\htdocs\mysql\afterLogin.php on line 24 下記のようにコードを変えました。 //本人の以前の日記を表示させる $query = "SELECT `contents` FROM `users` WHERE `email` = '".mysqli_real_escape_string($link,$_SESSION['email'])."'"; $result = mysqli_query($link,$query); $row = mysqli_fetch_row($result); print($row["contents"]); 改善策はありますでしょうか?(投稿を修正いたしました。)
madoka9393

2018/09/21 07:27

再度横から失礼をば。 エラーメッセージとコードをよーく見てみましょう…。
1004

2018/09/21 07:37

madoka9393様> contentsがontentsになっておりましたので、修正させていただきました。
madoka9393

2018/09/21 07:44 編集

訂正した上でもUndefined index(=$rowの中にcontentsなんてないよ)なのであれば、 $rowの中身を確認してみるのはいかがでしょう。 var_dump()とかprint_rでログや画面に吐かせてみるとか。
1004

2018/09/21 09:25

print_rで画面に$rowの中身を表示させ、いろいろ試してみたところ、ゴールまでたどり着けました。 ありがとうございました。
guest

0

エラーメッセージ、読まれました?
afterLogin.phpの21行目にエラーがあると書かれています。

PHP

1$query = "SELECT contents FROM `users` WHERE email = '".($link,$_SESSION['email'])."'";

PHP

1$query = "SELECT contents FROM `users` WHERE email = '".$_SESSION['email']."'";

に変更するといかがでしょうか。

投稿2018/09/21 05:38

Takumiboo

総合スコア2534

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

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

1004

2018/09/21 06:02

ご回答、ありがとうございます。該当箇所を変更したところ、 Recoverable fatal error: Object of class mysqli_result could not be converted to string in C:\MAMP\htdocs\mysql\afterLogin.php on line 23とエラーが変わりました。 //本人の以前の日記を表示させる $query = "SELECT contents FROM `users` WHERE email = '".$_SESSION['email']."'"; $result = mysqli_query($link,$query); echo "前回の投稿".$result;  ←23行目 この部分でどこが間違っているのかわかりません。もし、お分かりであれば教えてください。
madoka9393

2018/09/21 06:12 編集

横から失礼いたします。 $resultをstring型に変換できない…ってエラーメッセージに書いてありますね(could not be converted to string)。 調べればすぐに見つかるのでエラー内容で検索する癖をつけるとよいかもです。 #誤記があったので訂正
1004

2018/09/21 06:47

文献のご提示、ありがとうございます。 プログラミングに不慣れなので勉強してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問