-PR-
解決済み

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

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

お礼率 64% (173/268)

簡単な投稿サイトを作りたいのですが、下記のように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'));
通報する
  • 回答数14
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.4
レベル12

ベストアンサー率 66% (338/505)

コンピューター カテゴリマスター
> 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% (173/268)

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

その他の回答 (全13件)

  • 回答No.6
レベル12

ベストアンサー率 66% (338/505)

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

そういうことです。

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

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

お礼率 64% (173/268)

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


  • 回答No.3
レベル14

ベストアンサー率 38% (2519/6471)

コンピューター カテゴリマスター
> 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へのデータの出し入れなんかもゴチャゴチャとコードを書かなくて済むので簡単です。
お礼コメント
okweb12345

お礼率 64% (173/268)

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

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

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

またレンサバがsshに対応していないようでLaravelを使えないといわれてしまいました。
投稿日時 - 2017-10-13 14:58:35
  • 回答No.2
レベル13

ベストアンサー率 20% (257/1257)

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

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

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

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

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

次に、質問でよくわからなかったのは、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出力する。

さて、どれがわからないんだろう。
  • 回答No.1
レベル14

ベストアンサー率 38% (2519/6471)

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

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


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

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

お礼率 64% (173/268)

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

そのためにはhtmlのpostでphpの変数に代入してその変数をdbにインデックスさせれた良いという事でよいでしょうか?
投稿日時 - 2017-10-13 11:50:56
  • 回答No.7
レベル12

ベストアンサー率 66% (338/505)

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

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

ベストアンサー率 59% (157/263)

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

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

お礼率 64% (173/268)

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

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

ベストアンサー率 59% (157/263)

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

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

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

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

お礼率 64% (173/268)

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

ベストアンサー率 59% (157/263)

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

そうではありません。

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

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

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

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

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

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

お礼率 64% (173/268)

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

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

ベストアンサー率 38% (2519/6471)

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

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

お礼率 64% (173/268)

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

お礼率 64% (173/268)

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

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

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

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


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

ベストアンサー率 59% (157/263)

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

なるほど、データの変更部分だけをサーバーから取得すれば、サーバの負担も下がり「ajaxの方が速度が速い」と言えます。
その場合、現在ブラウザ側が持ってるデータとサーバー側が持ってるデータの どこが変更されたか(データの追加、データの変更、データの削除など)をチェックして、その変更をブラウザ側に反映させれば良いでしょう。
13件中 1~10件目を表示
このQ&Aで解決しましたか?
AIエージェント「あい」

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

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

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

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

特集


抽選で合計100名様にプレゼント!

ピックアップ

ページ先頭へ