解決済み

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

  • 困ってます
  • 質問No.9385324
  • 閲覧数196
  • ありがとう数9
  • 気になる数0
  • 回答数14
  • コメント数0

お礼率 64% (227/350)

簡単な投稿サイトを作りたいのですが、下記のように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'));

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

  • 回答No.4

ベストアンサー率 66% (362/543)

コンピューター カテゴリマスター
> 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になるだけの違いです。
お礼コメント
okweb12345

お礼率 64% (227/350)

htmlのformで送ってそれを受け取ったphpファイルの変数に代入して、
その変数を指定してdbのカラムに入れればajaxを使わなくてもできるので、ajaxを使うと軽くなるというメリットはないのですね。
あるのはページ遷移しなくてよくなるだけですね。
投稿日時 - 2017-10-13 20:35:21
Be MORE 7・12 OK-チップでイイコトはじまる

その他の回答 (全13件)

  • 回答No.14

ベストアンサー率 54% (245/451)

コンピューター カテゴリマスター
(良く知りませんが)そう言えば かなり前から「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
  • 回答No.13

ベストアンサー率 54% (245/451)

コンピューター カテゴリマスター
>ajaxで部分的に変更させればページ遷移しない分早くなったようにユーザーは感じると思ったのですが、そのためではないのですね。

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

ベストアンサー率 54% (245/451)

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

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

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

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

お礼率 64% (227/350)

ajaxで部分的に変更させればページ遷移しない分早くなったようにユーザーは感じると思ったのですが、そのためではないのですね。
投稿日時 - 2017-10-14 18:28:48
  • 回答No.11

ベストアンサー率 38% (2760/7101)

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

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

お礼率 64% (227/350)

PHPixieが簡単と聞いたのですが将来性や需要などどうでしょうか?
投稿日時 - 2017-10-14 15:27:08
お礼コメント
okweb12345

お礼率 64% (227/350)

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

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

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

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


それとも今後伸びるもっと簡単なフレームワークでもありませんか?
投稿日時 - 2017-10-14 15:03:56
  • 回答No.10

ベストアンサー率 54% (245/451)

コンピューター カテゴリマスター
>回答No.9 amanojaku1

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

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

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

お礼率 64% (227/350)

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

部分的にページ繊維しないでこうしんしたい時だけ使うのですね
投稿日時 - 2017-10-14 14:04:24
  • 回答No.9

ベストアンサー率 54% (245/451)

コンピューター カテゴリマスター
>ajaxより速度は遅い

そうではありません。

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

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

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

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

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

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

お礼率 64% (227/350)

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

ユーザーが投稿ボタンを押さなくても自動的に投稿されるチャットの場合は必要と言うことですね
投稿日時 - 2017-10-14 14:14:47
  • 回答No.8

ベストアンサー率 54% (245/451)

コンピューター カテゴリマスター
>リロードしないと更新できない

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

お礼率 64% (227/350)

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

ajaxより速度は遅いですが、気にするレベルではないという事ですね。
投稿日時 - 2017-10-14 11:34:58
  • 回答No.7

ベストアンサー率 66% (362/543)

コンピューター カテゴリマスター
> リロードしないと更新できないのが唯一のデメリットなんですね

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

ベストアンサー率 66% (362/543)

コンピューター カテゴリマスター
> ajaxを使うと軽くなるというメリットはないのですね。

そういうことです。

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

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

お礼率 64% (227/350)

リロードしないと更新できないのが唯一のデメリットなんですね
投稿日時 - 2017-10-13 23:39:05
  • 回答No.5

ベストアンサー率 54% (245/451)

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

ajaxは良く知りませんが、ざっくりと言うとajaxはバックグラウンドでサーバと通信するためのライブラリーです。
ajaxを使ってバックグラウンドでサーバと通信するとサーバの負担は上がるでしょう、もしバックグラウンドでサーバと通信する必要がないならajaxを使う必要もないと思います。
13件中 1~10件目を表示
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

このQ&Aにこう思った!同じようなことあった!感想や体験を書こう
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する

特集


より良い社会へ。感謝経済プロジェクト始動

ピックアップ

ページ先頭へ