- ベストアンサー
MYSQL入門以前という本
MYSQL入門以前という本を買って勉強を始めた初心者のものです。 書籍の中でMYSQLとPHPを使って住所録を作って行くのですが、どうも自己解決出来ない点があります。 DBにすでに入力済みの氏名、住所、電話番号などを修正する項目において、 echo "<p>氏名:<input type = \"text\" name = \"nam\" value =\""; echo $row["simei"]; echo "\" size = \"40\"></p>"; という記述がありまして、valueの中にレコードから取得したデータを入れ込んでいると解説があるのですが、コードを見てもどこで区切っているのかわかりません>< echo のダブルコーテーションで囲ってあるので textやnameの属性のところの " を \ でエスケープしてるのは分かっていて <input type = \"text\" name = \"nam\" value =\"";echo row["simei"];echo "\" size = \"40\">が一つのHTMLの構文になっているものだと理解しています。 value =\"" ~先がなぜこうなるかわかりません。valueの二個目の"の前に\が付かないのか、それともsizeの直前の"\までがvalueの中身になるのか?それであればその中の記述もおかしいと思うし。。。。 ちょっと初歩的なことで聞くのも恥ずかしかったのですが、どうしてもわからないので教えてください!! お願いします!!!
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
別のアプローチで説明してみます <p>氏名:<input type = "text" name = "nam" value ="日本太郎" size = "40"></p> 上記文は下記のように3行に分割できます 1行目終わりと3行目はじめの「"」に注目 <p>氏名:<input type = "text" name = "nam" value =" 日本太郎 " size = "40"></p> 上記3行の文字列中の"(ダブルコーテーション)をエスケープすると <p>氏名:<input type = \"text\" name = \"nam\" value =\" 日本太郎 \" size = \"40\"></p> と表すことができます。この3行を echo " "; で出力するようにすれば下記になります echo "<p>氏名:<input type = \"text\" name = \"nam\" value =\""; echo "日本太郎"; echo "\" size = \"40\"></p>"; ここで、echo "日本太郎"; を echo $row["simei"]; に置き換えれば 当初の文になります。
その他の回答 (3)
- めとろいと(@naktak)
- ベストアンサー率36% (785/2139)
#3です。コピペしてたら誤った情報で書き込んでしまいました・・・。 valueの値がhogehogeなのは変わらないんですけど、展開した結果を 勘違いされるのは困るので・・・。 誤 3." size = \"40\"></p>" これをつなげると <p>氏名:<input type = "text" name = "nam" value ="hogehoge" size = \"40\"></p>" 正 3." size = "40"></p> これをつなげると <p>氏名:<input type = "text" name = "nam" value ="hogehoge" size = "40"></p>
お礼
ありがとうございますーー!! #2の方と逆の説明ですね^^ とてもわかりましたーー!ありがとうございました!!!!
- めとろいと(@naktak)
- ベストアンサー率36% (785/2139)
\"が「"」のエスケープを行っていることはご理解されているようですので、 とても簡単なことですよ。 きっと、echoの文法のダブルクォーテーションとごっちゃになっている だけだと思います。 1.echo "<p>氏名:<input type = \"text\" name = \"nam\" value =\""; 2.echo $row["simei"]; 3.echo "\" size = \"40\"></p>"; 1つ1つのechoを展開して見てみましょうか。 $row["simei"]にはhogehogeとかいう値が入ってたとしましょう。 1.<p>氏名:<input type = "text" name = "nam" value =" 2.hogehoge 3." size = \"40\"></p>" これをつなげると <p>氏名:<input type = "text" name = "nam" value ="hogehoge" size = \"40\"></p>" です。 つまり、valueの中身はhogehogeですね!
- honoka69
- ベストアンサー率50% (6/12)
>sizeの直前の"\までがvalueの中身になるのか? ↑おしいです。 正しくは sizeの直前の\"までがvalueの中身になります。 意味としてはvalueのなかみにあたる echo $row["simei"]; をダブルクオテーションで囲ってるということになります。 echoのあとにくるものが文字列の場合はダブルクオテーションで 囲うのですが、変数だとダブルクオテーションで囲わなくてよくなります。 なので、echo "\" size = \"40\"></p>"; この一番初めにでてくるダブルクオテーションは この中に文字列が入ってることを意味して、次にでてくる\"は valueの後ろ側のダブルクオテーションにあたり、これをエスケープして表示 という意味になります。 わかりますかね?
お礼
早速の回答ありがとうございます!! 変数の場合は"で囲わなくていいんですね!!! でもまだすっきりしません>< これで伝わるでしょうか?? これがvalueの中←| echo "\" size = \"40\"></p>"; |→これがechoの中身?←| ということでしょうか? 被っているところが出てくるんでしょうか。 あとvalue =\""; の最後の";は echo "<p>氏名 の終わりを指すのでしょうか?もうそうであればここも後ろの構文と被ってしまうので><
お礼
なるほどーーー!! 目からうろこでした^^ ありがとうございます!!納得できましたー!