dポイントプレゼントキャンペーン実施中!

以前質問しましたが、解決できませんでした。

ヒアドキュメント内での多次元配列の扱いで悩んでいます。

ソースは
<?php

require_once("mysql.php");// MySQLへのID・パスワードの取得をするファイルへのアクセス

function kensaku($str1,$str2,$str3,$str4){
$mysql = new MySQL;
$sql = "SELECT * FROM tankanji
WHERE
kanji like '%$str1%'
AND
(onyomi like '%$str2%'
OR
kunyomi like '%$str2%')
AND
kakusuu like '%$str3%'
AND
busyu like '%$str4%'";
$row=$mysql->query($sql);
echo <<<EOM
<TABLE width="3000" frame="border" border="3" cellspacing="1" cellpadding="3">
<TBODY>
<TR><TH>id</TH><TH>漢字</TH><TH>音読み</TH><TH>訓読み</TH>
<TH>画数</TH><TH>部首</TH></TR>
while ($row = $mysql->fetch()){
<TR>
<TD align="center"><?={$row['id']}?></TD>
<TD align="center"><?={$row['kanji']}?></TD>
<TD align="center"><?={$row['onyomi']}?></TD>
<TD align="center"><?={$row['kunyomi']}?></TD>
<TD align="center"><?={$row['kakusuu']}?></TD>
<TD align="center"><?={$row['busyu']}?></TD></TR>
}
</TBODY>
</TABLE>
EOM;
}



なんですが、うまくいきません。
$row=$mysql->query($sql); のあとでprint文で$rowの中身を表示させたらきちんと入っているのでecho <<<EOM以降がおかしいものと思います。


エラーの内容としてはsyntax error, unexpected '"', expecting T_STRING or T_VARIABLE or T_NUM_STRINGと表示されてしまいます。これがどうしてもやらないといけないことでしてものすごく困っています。。初心者の質問で大変申し訳ないです。

A 回答 (3件)

あれ?何か変な書き方してますね もう一箇所 訂正でした



ヒアドキュメントの中なら
<TD align="center"><?={$row['kakusuu']}?></TD>

<TD align="center">{$row['kakusuu']}</TD>
こうです

これの前の質問で、ヒアドキュメントを使うのが間違いという指摘が
ありましたが、私にはこの間違いの理由がわからないので
とりあえずヒアドキュメント内での表示の仕方のアドバイスでした
(一個目のレスつけてから指摘に気づいてしまったので今、弁解を…)

※ 根本的にヒアドキュメントの使用が間違っているということでも
今後ヒアドキュメントを使う時に こういう書き方をするってことは
覚えていてもよろしいかと思います
    • good
    • 0
この回答へのお礼

丁寧にご指導ありがとうございます。とてもわかりやすくて助かります。

koke29さんの言うとおり
echo <<<EOM以降を

echo <<<EOM
<TABLE width="3000" frame="border" border="3" cellspacing="1" cellpadding="3">
<TBODY>
<TR><TH>id</TH><TH>漢字</TH><TH>音読み</TH><TH>訓読み</TH>
<TH>画数</TH><TH>部首</TH></TR>
EOM;
while ($row = $mysql->fetch()){
echo <<<EOM
<TR>
<TD align="center">{$row['id']}</TD>
<TD align="center">{$row['kanji']}</TD>
<TD align="center">{$row['onyomi']}</TD>
<TD align="center">{$row['kunyomi']}</TD>
<TD align="center">{$row['kakusuu']}</TD>
<TD align="center">{$row['busyu']}</TD></TR>
EOM;
}
echo <<<EOM
</TBODY>
</TABLE>
EOM;



このように変更して実行したらsyntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRINGが現われます。


僕の変更の仕方が間違っていましたらぜひご指摘をお願いしたいのですが、初心者で申し訳ないです。

お礼日時:2009/02/08 21:37

エラーについてちょっと調べてみたところヒアドキュメントの閉じ(EOM;)


の後ろにスペースとかが入ってる時に出たりするみたいです
(たぶんそれだけじゃないとは思いますが)

載せてあるコードを見る感じだと不要なスペースは見当たらないですが
実コードはどうですか??(ドラッグしたらわかるかな)
投稿するときに原文をtrimされたりしてたらわからないので
念のため実コードでチェックしてみて下さい

【 あと、やってみて欲しいコト 】
ヒアドキュメントを一回コメントアウトして
while ($row = $mysql->fetch()){
print {$row['id']};
print $row['id'];
print {$row[id]}
print $row[id]
}

↑のどれかで表示されれば その記述でコードを書いてみる…
※二重引用符?がいらない場合もあるような記事を見かけたので一応
出そうなパターンでやってみて欲しいなぁ…と。

また、ヒアドキュメントだけfunctionの外にだして
動作するかどうか確認してみる

↑でエラーになるなら、ヒアドキュメントの書き方の問題ってことが
確定するので、あとは一つずつチェックしてみる、と。

うーん…総当りで申し訳ないです
もっと的確なレスがつけれれば良いのですが私も勉強中なもので…
(ここでレスをするのも勉強の一環なのです)
    • good
    • 0

ヒアドキュメントの中にwhileは入れれないですよ



1.項目名のテーブル部分で一回ヒアドキュメントを終了
2.whileを書いた後にまたヒアドキュメントを入れる
3.while終了(})の手前でヒアドキュメントを終了
4.</TBODY></TABLE>はechoでもヒアドキュメントでもお好きに

↑のように修正して下さい
    • good
    • 0

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