こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

簡単な投稿サイトを作りたい

簡単な投稿サイトを作りたいのですが、下記のようにDBデータを表記することとDBにデータを入れることは何とか出来たのですが、実際に投稿サイトを作る場合、
inputに入力してもらった情報をDBのカラムに入れて、それを表記したい要素に渡してブラウザ上に表記し、削除ボタンを押したらカラムのデータを空にして表記していた要素を削除しないといけないですよね?

これらの作業はすべてphpで行うよりサーバの負担を避けるためにinputに入力された文字列をphpの変数に入れるまではajaxを使ったjsで行うべきでしょうか?

その場合どうやってphpのこの変数に入れるとするのでしょうか?

そして$stmt->execute(array(値を受け取ったphpの変数名));
とすれば問題なくカラムにデータが入るでしょうか?

正直難しくてあまり検討が付きません。
ここまで来るとlaravelを使った方がよいのでしょうか?
生では厳しいですか?



$db_host = "localhost"; // データベースのホスト
$db_name = "toukoutest"; // データベースの名前
$db_user = "root"; // データベース接続ユーザー
$db_pass = ""; // データベース接続パスワード


// データベース接続を確立
try {
$db = new PDO("mysql:host={$db_host};dbname={$db_name};charset=utf8", $db_user, $db_pass);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // エラーモードの設定
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); // prepareのエミュレーションを停止
} catch (PDOException $e) {
// エラー発生時
exit("データベースの接続に失敗しました");
}

// データの問い合わせ
$rows_post = array(); // 配列の初期化
try {
// toukoutableの部分がテーブル名。itemの部分がカラム(フィールド)名
$stmt = $db->prepare("SELECT * FROM toukoutable ORDER BY item DESC");
$stmt->execute(); // クエリの実行
$rows_post = $stmt->fetchAll(); // SELECT結果を二次元配列に格納
} catch (PDOException $e) {
// エラー発生時
exit("クエリの実行に失敗しました");
}

if (count($rows_post) > 0) {
echo '<ul>';
foreach ($rows_post as $row) { printf('<li>%s</li>', $row['item']); }
echo '</ul>';
} else {
// 取得行数が 0 だったときの処理
}



// データをデータベースに入力
$stmt = $db->prepare('insert into `add` (addcol2) values (?)');
$stmt->execute(array('値222'));

投稿日時 - 2017-10-13 09:12:47

QNo.9385324

困ってます

質問者が選んだベストアンサー

> iinputに入力された情報をDBに登録するためにはhtmlのpostで可能なので、phpもajaxも必要ないのですね。

横から失礼しますが、
Webアプリの根本的な動作を理解されていないようです。

【投稿時】
(1)ブラウザから サーバーへFormデータを送る

(2)サーバーでは、サーバーサイドのスクリプトで
 受け取ったFormデータをDBに格納して、完了なりエラーなりのHTMLを生成する。

(3) (1)のブラウザに(2)のHTMLが送信されてブラウザ上に表示される

【閲覧時】
(1) 閲覧したい情報をブラウザ上で選択(リンクなりFormなり)してサーバーに送る

(2) サーバーは、サーバーサイドのスクリプトで リクエストに合わせたHTMLを作る

(3) (1)のブラウザに(2)のHTMLが送信されてブラウザ上に表示される
です。

つまり用意するのは、 (1)のHTMLと、(2)のPHPです。

(1)でFormでなくAjaxを使ったとしても、(2)のPHPはいらなくなる訳ではなく、
(2)のPHPで生成するのがHTMLでなくて、XMLやJsonになるだけの違いです。

投稿日時 - 2017-10-13 18:49:18

お礼

htmlのformで送ってそれを受け取ったphpファイルの変数に代入して、
その変数を指定してdbのカラムに入れればajaxを使わなくてもできるので、ajaxを使うと軽くなるというメリットはないのですね。
あるのはページ遷移しなくてよくなるだけですね。

投稿日時 - 2017-10-13 20:35:21

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(14)

ANo.14

(良く知りませんが)そう言えば かなり前から「Comet」と言う概念?(手法?)が登場しているようです。

第2回 Comet---プッシュ型のWebアプリケーションを作る
http://itpro.nikkeibp.co.jp/article/COLUMN/20080220/294242/?rt=nocnt

Tomcat 6で実現!Ajaxを超える通信技術Comet
http://www.atmarkit.co.jp/ait/articles/0712/12/news128.html
http://www.atmarkit.co.jp/ait/articles/0712/12/news128_2.html
http://www.atmarkit.co.jp/ait/articles/0712/12/news128_3.html

AjaxとCometで作るリアルタイムWeb
https://thinkit.co.jp/story/2011/03/08/2040
https://thinkit.co.jp/story/2011/03/08/2040?page=0%2C1

投稿日時 - 2017-10-14 22:22:47

ANo.13

>ajaxで部分的に変更させればページ遷移しない分早くなったようにユーザーは感じると思ったのですが、そのためではないのですね。

なるほど、データの変更部分だけをサーバーから取得すれば、サーバの負担も下がり「ajaxの方が速度が速い」と言えます。
その場合、現在ブラウザ側が持ってるデータとサーバー側が持ってるデータの どこが変更されたか(データの追加、データの変更、データの削除など)をチェックして、その変更をブラウザ側に反映させれば良いでしょう。

投稿日時 - 2017-10-14 21:59:51

ANo.12

>ユーザーが投稿ボタンを押さなくても自動的に投稿されるチャットの場合は必要と言うことですね

自分がブラウザでチャット画面を見ているとします。
他のユーザーが記事を投稿すると、サーバーのデータが更新されます。
ブラウザは「0.5秒ごと」とか「1秒ごと」みたいな感じで、(「ユーザーの操作」に起因せずに)バックグラウンドで たえずサーバと通信しているので、サーバーのデータが更新されたら、そのデータをブラウザに読み込むと言う処理を繰り返している訳です。

>レンダリングの速度だけの理由で使う必要はないのですね。
>部分的にページ繊維しないでこうしんしたい時だけ使うのですね

どうも話が噛み合ってないと思いましたが、「ajaxの方が速度が速い」と言うのは、「Google マップ」のような場合ですね。
「Google マップ」と掲示板ではカテゴリーが全く違います。
「Google マップ」を表示してマウスドラックで(画像表示が完了する前に)どんどん一方向に移動させたとします。
「Google マップ」は「ユーザーの操作」がトリガーですが、ajaxを使って"バックグラウンド"でサーバから地図データを読み込みます。
表示させなくて良い画像はサーバーから送らなくて良い事になり、サーバの負担も下がり「ajaxの方が速度が速い」と言えます。
サーバから地図データを(ajaxが)"バックグラウンド"で読み込みんでいるので、その間もユーザーはブラウザ操作できると言うメリットもあります。

投稿日時 - 2017-10-14 17:01:57

お礼

ajaxで部分的に変更させればページ遷移しない分早くなったようにユーザーは感じると思ったのですが、そのためではないのですね。

投稿日時 - 2017-10-14 18:28:48

ANo.11

> フレームワークのlaravelを使って作ろうかとも思ったのですが、あまりに癖が強く学習コストも大きすぎそうなので、簡易な投稿サイトくらいなら生のほうがずっと簡単だと思ったのですがそうではないのでしょうか?

投稿されたデータを適切に処理しないとSQLインジェクションとかクロスサイトスクリプティングとか色々サイトの脆弱性となる問題が発生します。
これらについて適切に処理する知識をお持ちであればPHPでフルスクラッチで書いても問題無いと思いますが、質問されている内容からすると適切に処理する知識をお持ちとは思えません。
攻撃手法はどんどん増えていて対策も簡単ではなくなってきているので、フレームワークに任せてしまった方が簡単です。
フレームワークの機能をちゃんと利用して、フレームワークを常に最新版に保っておけば、必要とされる対策は施された状態になります。

投稿日時 - 2017-10-14 14:24:29

補足

PHPixieが簡単と聞いたのですが将来性や需要などどうでしょうか?

投稿日時 - 2017-10-14 15:27:08

お礼

ただララベルを使って投稿サイトを作るだけでセキュリティまで大丈夫なのですね。

ただ下記を見ると習得に数年間かかりそうですね。
://kore1server.com/370/Laravelを使うべきか、2017

また下記で基礎をやろうと思ったのですが、ララベル特有の用語説明などが飛ばされています。
http://laraweb.net/knowledge/2232/

ララ帳は古いようですし良い情報はないでしょうか?


それとも今後伸びるもっと簡単なフレームワークでもありませんか?

投稿日時 - 2017-10-14 15:03:56

ANo.10

>回答No.9 amanojaku1

>ざっくりと「サーバのデータがブラウザに反映」されるトリガーが、「ユーザーの操作」に起因するか、「ユーザーの操作」に起因しないのか、の差と言えます。

例えばチャットだと「サーバのデータがブラウザに反映」されるトリガーが「0.5秒ごと」とか「1秒ごと」みたいな感じで、(「ユーザーの操作」に起因せずに)バックグラウンドで たえずサーバと通信しているので、当然サーバの負担は上がります。

ざっくりと言うとajaxはバックグラウンドでサーバと通信するためのライブラリーですので、バックグラウンドでサーバと通信する必要がないならajaxを使う必要はありません。

投稿日時 - 2017-10-14 13:43:12

お礼

レンダリングの速度だけの理由で使う必要はないのですね。

部分的にページ繊維しないでこうしんしたい時だけ使うのですね

投稿日時 - 2017-10-14 14:04:24

ANo.9

>ajaxより速度は遅い

そうではありません。

ざっくりと言うとajaxはバックグラウンドでサーバと通信するためのライブラリーです。
もしajaxを使ってバックグラウンドでサーバと通信するとサーバの負担は上がるでしょう、もしバックグラウンドでサーバと通信する必要がないならajaxを使う必要もないでしょう。

具体的に分かりやすい例として「バックグラウンドでサーバと通信」しているのはチャットです。
「バックグラウンドでサーバと通信」しているので、ユーザーの操作がなくても、サーバのデータがブラウザに反映します。

>ここでお礼をするときもページ遷移している

そうです、通常は「ユーザーの操作」→「Submit(送信)」でページが更新されます。

ajaxを使ってバックグラウンドでサーバと通信すると「ユーザーの操作」がなくてもサーバのデータがブラウザに反映されます。

つまり、ざっくりと「サーバのデータがブラウザに反映」されるトリガーが、「ユーザーの操作」に起因するか、「ユーザーの操作」に起因しないのか、の差と言えます。
もしajaxを使ってバックグラウンドでサーバと通信すると、当然サーバの負担は上がります。
大抵チャットで人数の制限があるのはサーバの負担が上がり過ぎないように配慮しているためです。

投稿日時 - 2017-10-14 13:27:19

お礼

チャットは以外にサーバ代がかかりそうですね。

ユーザーが投稿ボタンを押さなくても自動的に投稿されるチャットの場合は必要と言うことですね

投稿日時 - 2017-10-14 14:14:47

ANo.8

>リロードしないと更新できない

「Submit(送信)」でもページは更新します。
掲示板は使った事はありますか?、大抵の掲示板は「ページの移動、記事の投稿」などは「Submit(送信)」が使われています、大抵の掲示板は「Submit(送信)」で ちゃんとページは更新されます(それで不便はないと思いますが?)。
実際に どこかの掲示板に書き込んでみたらどうでしょうか?、って ここも掲示板でした(笑)

投稿日時 - 2017-10-14 01:31:50

お礼

ここでお礼をするときもページ遷移しているのですね。
一見わからないですが。

ajaxより速度は遅いですが、気にするレベルではないという事ですね。

投稿日時 - 2017-10-14 11:34:58

ANo.7

> リロードしないと更新できないのが唯一のデメリットなんですね

Ajaxだけがそれの解ではありません。
投稿されたら記事のURLが変わるようにかするとか、
no-cache指定するとか、方法はいくらでもありますよ。

投稿日時 - 2017-10-14 00:00:51

ANo.6

> ajaxを使うと軽くなるというメリットはないのですね。

そういうことです。

Ajaxというのは、ブラウザ上で動くJavaScriptだけのことではなく、
それに連動して動くサーバーサイドスクリプトを 合わせたセットのことです。
つまり、Ajaxを使えば サーバーサイドスクリプト(今例でいうとPHP)が
必要なくなるということではありません。

Form方式(ページ遷移)とAjax方式のどちらが、
サーバー側の負荷が小さくなるかというのはシステムの構成や更新データ量や頻度次第なので一概には言えませんが
ソースを見る限りは、わざわざAjax化してシステムを複雑化する程の内容には見えません。
それに学習中ということであれば、なおさらで、
旧来のForm方式を充分に理解してからAjaxを学んだほうが、理解がスムーズです。

投稿日時 - 2017-10-13 23:01:28

お礼

リロードしないと更新できないのが唯一のデメリットなんですね

投稿日時 - 2017-10-13 23:39:05

ANo.5

>これらの作業はすべてphpで行うよりサーバの負担を避けるためにinputに入力された文字列をphpの変数に入れるまではajaxを使ったjsで行うべきでしょうか?

ajaxは良く知りませんが、ざっくりと言うとajaxはバックグラウンドでサーバと通信するためのライブラリーです。
ajaxを使ってバックグラウンドでサーバと通信するとサーバの負担は上がるでしょう、もしバックグラウンドでサーバと通信する必要がないならajaxを使う必要もないと思います。

投稿日時 - 2017-10-13 20:12:53

ANo.3

> inputに入力された情報をDBに登録するためにはhtmlのpostで可能なので、phpもajaxも必要ないのですね。

サーバサイドの事とブラウザサイドの事を混同して考えてはいけません。

inputに入力された内容をサーバへ送信するには、HTMLのformを使ってユーザーがsubmitする方法も有れば、formを使わずにJavaScript(Ajax)を使ってプログラムで制御しながら送信する方法もあると言う事です。
どちらがいいかはサイトの構造やUI設計などに依存します。

ブラウザからサーバへデータを送信するにはHTTPのGETメソッドかPOSTメソッドを使う必要がありますが、これはブラウザとサーバ間の通信方法の問題です。
formを使おうがAjaxを使おうが、何れの手段であっても通信プロトコルとしてはHTTPのGETメソッドかPOSTメソッドを使用します。

サーバへ送られたデータは何らかのプログラムで処理しないとDBに入れる事は出来ませんので、PHPでもPerlでもRubyでもJavaでも何でもいいのでプログラミング言語を使ってプログラムを用意しなければいけません。
PHPを使うのであれば、PHPには $_GET とか $_POST と言ったHTTPで送信されてきたデータを受け取る変数が用意されているので、これらを使って受信したデータを取り出して処理します。
ただ、セキュリティの事を考えたら何らかのフレームワークを使用して受信したデータのチェックをした方がいいんじゃないでしょうか。
自分でデータチェックのプログラムを書いてもいいですが、結構手間が掛かりますよ。
それにフレームワークを使えばデータチェックだけで無く、DBへのデータの出し入れなんかもゴチャゴチャとコードを書かなくて済むので簡単です。

投稿日時 - 2017-10-13 13:14:00

お礼

inputに入力された情報をDBに登録するためにはhtmlのpostで可能なので、phpもajaxも必要ないのですね。

そのためにはhtmlのpostでphpの変数に代入してその変数をdbにインデックスさせれた良いという事でよいでしょうか?

フレームワークのlaravelを使って作ろうかとも思ったのですが、あまりに癖が強く学習コストも大きすぎそうなので、簡易な投稿サイトくらいなら生のほうがずっと簡単だと思ったのですがそうではないのでしょうか?

またレンサバがsshに対応していないようでLaravelを使えないといわれてしまいました。

投稿日時 - 2017-10-13 14:58:35

ANo.2

色々と曖昧なので、まずは整理されたらいかがでしょうか。

まず、『簡単な投稿サイト』じゃ作れません。

具体的に何を誰が投稿し、投稿内容を誰に対してどのように表示し、投稿の管理は誰がどのように行うのか。

最低限の仕様でこれくらいは明確じゃないと、着手出来ないですね。

基本的に何らかのプログラミングは、目的のために問題を分解して、最も簡単に分解することで行います。
目的がわからなければ、やりようがないです。

次に、質問でよくわからなかったのは、DBデータです。
データベースなんで、データを扱うのは当たり前なんですが、どんなデータなのかデータベースのどのテーブルにどのような構成のデータがあるのか、明確じゃないですね。

データを表記と言うのもわからない。
データを表記したならデータが並ぶだけで、データベースは関係ない。

さらに、INPUTに入力。
INPUTって言うのは入力を英語にしただけなので、入力に入力と言っているのと同じ意味で、わからない。

食べ物の摂取方法に例えるなら、口に運び噛み砕いて飲み込むと言うところを、入力に運び噛み砕いて飲み込むみたいなことになってます。

どうやって入力したいのか。これを説明しましょう。


>これらの作業はすべてphpで行うよりサーバの負担を避けるためにinputに入力された文字列をphpの変数に入れるまではajaxを使ったjsで行うべきでしょうか?

これが特に何を思って何をしたいのかわからないですね。

サーバー負担は、サーバーに何らかの処理をさせればかかるはかかりますけど、処理をさせたいのだから仕方ないですね。
無駄に処理をさせる必要はないと思いますが、簡単な投稿サイトなのだから、大した負荷がそもそもかかると思えないんですけど。
phpで値を変数に入れるには、わかっていると思うんですが、=を使うだけです。
=の右側の値が左側の変数に入りますね。


WebでLAMP環境のシステム開発するなら簡単な流れ

1.HTMLのフォームを使ってDBに挿入する情報を入力させる。

2.phpで入力された情報を受け取る。

3.phpで受け取った情報を使ってSQL文を発行する。

4.phpからDBにクエリを送る。

5.DBに問い合わせたならその結果をphpで受け取る。

6.受け取ったカラムのデータをphpでごにょごにょやって整形してhtml出力する。

さて、どれがわからないんだろう。

投稿日時 - 2017-10-13 10:16:33

ANo.1

> これらの作業はすべてphpで行うよりサーバの負担を避けるためにinputに入力された文字列をphpの変数に入れるまではajaxを使ったjsで行うべきでしょうか?

Ajaxを使おうがHTMLでPOSTしようがサーバーの負担はそんなに変わらないでしょう。


> その場合どうやってphpのこの変数に入れるとするのでしょうか?

Ajaxを使ったとしてもブラウザからサーバへデータを渡す仕組みはHTMLのフォームと同じです。
GETメソッドかPOSTメソッドを使ってサーバへリクエストを送るだけです。

投稿日時 - 2017-10-13 09:56:29

お礼

inputに入力された情報をDBに登録するためにはhtmlのpostで可能なので、phpもajaxも必要ないのですね。

そのためにはhtmlのpostでphpの変数に代入してその変数をdbにインデックスさせれた良いという事でよいでしょうか?

投稿日時 - 2017-10-13 11:50:56