入力した内容の表示

2015/08/28/Fri

前回のソースコードはこちら

今まではリンクを使って、
入力画面から送信確認画面に進んでいました。
それを今日はリンクではなく!
さらに入力した内容を確認画面で表示する!!
という難しい内容に挑戦しました。

〜GETとPOSTの違い〜

HTTPというのは
リクエストするとレスポンスが返ってくるという
通信の方式のことをいいます。
そしてHTTPのリクエストの種類のことをメソッドといいます。

ではこのことをふまえて
今日の内容にはいっていきましょう!

?「GETメソッドとPOSTメソッドの違いを説明するね。
  簡単にいうと、
  GETメソッドは情報を取得したいというリクエストで、
  POSTメソッドは情報を追加したいというリクエストだよ。」
姉妹「ほーほー」
ちなみに、主体はブラウザです。

リクエスト・レスポンスって?

今まではaタグでリンクしていたから、
GETメソッドをリクエストで送られていたのです。
だから今回は、ユーザーが情報を入力して
その情報を追加したレスポンス(確認画面)がほしいので
POSTメソッドを使うわけなんですね。

〜挑戦!〜

これを理解して、早速姉妹は各自HPをあさり始めました。
発見したHPは二人とも同じでした!
→Sinatraでformを使ってPOSTしてみる
でもなかなか反映されません。
しかも姉妹二人とも同じところでつまづいていました。
※姉妹は確認画面のファイル名を「check.erb」にしています。

まず、myapp.rbにこのソースコードを書きます。
2015-08-28 15.50.59

この@emailや@messageは変数です。
またparamsというのを使うと、
パラメータを取得することができます。
今回でいえば、フォームで入力した値を
params[:パラメータ名]という使いかたで取得します。

はい、姉妹がつまづいたポイントその1!!
ここでpostに変更しているので
index.erbのほうの送信ボタンに貼ってあったリンクがあれば
そのaタグを消さないと
2015-08-28 15.51.58
こんなエラーが出てしまいます。
なぜなら、リンクがそのままだとボタンを押したときに
getのリクエストが送られて
「このcheckっていうページを取得したい!」
ってことになってしまうからです。
そのためSinatra側では、
「え、getのリクエストが送られてきてるのに
 get ‘/check’になってない!」
と混乱してしまって、エラーがでます。

続いて、index.erbのファイルの中身なのですが
フォームを作る際、formタグで中を囲っているはずです。
そのformタグにaction =“check” method=“POST”と書きます。
2015-08-28 15.53.30
これは、フォームになにか入力し、送信ボタンを押したときに
「送信されるデータの送信先がcheckで、
 checkにPOST(追加)してください!お願いします!」
というリクエストを送るためです。
また、
メールアドレスを入力してもらうというソースコードが
inputタグになっていますよね。そこに、name=“email”と書きます。
同じく、本文のほうのtextareaタグのところにも
name=“message”と書きます。
2015-08-28 16.04.04
こうしないと先ほど宣言した変数に、
入力した内容を代入することができなくなります。

ちなみにフォームを作っている時以外でも
postでなにか表示させたいときには
formタグを使ってactionやmethodを指定しましょう!

はい、つまづいたポイントその2!
ここで英語が苦手な妹登場です!! しょうもないミスをしました。
わかりますか。そうです。スペルミスです。
しかもemailでもmessageでもなく、nameのほうです。
1つだけ「neme」にしてしまったのです。
妹「スペルミスには気をつけよう…」

最後にcheck.erbの中身です。
入力した、メールアドレスと本文を表示させたいところに
<%=@email%>
<%=@message%>
と書きます。
2015-08-28 15.54.57
そうすればそれぞれの変数に代入された、
入力された内容が反映されるはずです!!

しかし、ここで問題発生!
妹「よっしゃー!!できたぞー!!!!」
姉「え……、さっきのエラーがでる」
妹「え!!なんで!!???」

さあここから間違い探しが始まりました。
でもほんとになにが違うのかがわからない!!

妹「method=“POST”のとこ、大文字じゃなきゃいけないとかある?」
姉「カタカタ…。いや小文字でも大丈夫だ。」
姉妹「うーーーーん。」
?「…文字拡大してみる?」
妹「ここの空白が全角だったりしてね!」
姉「いやーそんなことあるわけ!(とりあえず直す)
  …あれ、幅変わった。え!もしかして!!」
そしてリロードして送信ボタンを押すと……!!
姉妹「きたーーーーーーー!!!!!!!!」

…いやー、空白の全角、半角って怖いです。
わかりません。奇跡です。
姉「初歩的すぎて恥ずかしいよーー…」
よくある間違いらしいので気をつけましょう。

今日のソースコードはこちらです。
参考にしてくださいね!