電子書籍の厳選無料作品が豊富!

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の中身になるのか?それであればその中の記述もおかしいと思うし。。。。


ちょっと初歩的なことで聞くのも恥ずかしかったのですが、どうしてもわからないので教えてください!!

お願いします!!!

A 回答 (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"]; に置き換えれば
当初の文になります。
    • good
    • 0
この回答へのお礼

なるほどーーー!!
目からうろこでした^^
ありがとうございます!!納得できましたー!

お礼日時:2008/12/24 00:55

#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>
    • good
    • 0
この回答へのお礼

ありがとうございますーー!!
#2の方と逆の説明ですね^^
とてもわかりましたーー!ありがとうございました!!!!

お礼日時:2008/12/24 00:57

\"が「"」のエスケープを行っていることはご理解されているようですので、


とても簡単なことですよ。
きっと、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ですね!
    • good
    • 0

>sizeの直前の"\までがvalueの中身になるのか?



↑おしいです。

正しくは

sizeの直前の\"までがvalueの中身になります。

意味としてはvalueのなかみにあたる

echo $row["simei"];

をダブルクオテーションで囲ってるということになります。

echoのあとにくるものが文字列の場合はダブルクオテーションで

囲うのですが、変数だとダブルクオテーションで囲わなくてよくなります。

なので、echo "\" size = \"40\"></p>";

この一番初めにでてくるダブルクオテーションは

この中に文字列が入ってることを意味して、次にでてくる\"は

valueの後ろ側のダブルクオテーションにあたり、これをエスケープして表示

という意味になります。

わかりますかね?
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございます!!

変数の場合は"で囲わなくていいんですね!!!

でもまだすっきりしません><
これで伝わるでしょうか??

これがvalueの中←|
      echo  "\" size = \"40\"></p>";
         |→これがechoの中身?←|


ということでしょうか?
被っているところが出てくるんでしょうか。

あとvalue =\""; の最後の";は echo "<p>氏名 の終わりを指すのでしょうか?もうそうであればここも後ろの構文と被ってしまうので><

お礼日時:2008/12/24 00:03

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!