- 締切済み
PHPのエラーについて
データベースから出力し、リンクをつけたいと考えていますが、下記のようなエラーが出力されます。 どのように対応すれば解消されるでしょうか? データベースにはthread_idという項目は存在します。 echo から始まる列が38行目にあたります。 よろしくお願いします。 【コード】 <?php $sql = "SELECT * FROM thread WHERE category_id =1"; $date = mysql_query($sql,$link); while ($post = mysql_fetch_assoc($date)) { $thread_id = $post['thread_id']; echo '<br>' . '<a href="thread.php?id=<?php echo htmlspecialchars($post['thread_id']); ?>">' . $post['thread_title'] .'</a>'.'<br>'; } ?> 【エラー】 Parse error: syntax error, unexpected 'thread_id' (T_STRING), expecting ',' or ';' in C:\xampp\htdocs\index.php on line 38
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- めとろいと(@naktak)
- ベストアンサー率36% (785/2139)
> echo '<br>' . '<a href="thread.php?id=<?php echo htmlspecialchars($post['thread_id']); ?>">' . > $post['thread_title'] .'</a>'.'<br>'; 明らかにここが変です。 ここは、『PHPスクリプトとして文字列を出力している』わけですから、 PHPスクリプト内に、更にPHPスクリプトであることを明示する必要は ありません。 正しくはこうです。 echo '<br>' . '<a href="thread.php?id='. htmlspecialchars($post['thread_id']) . '>' . $post['thread_title'] .'</a>'.'<br>'; また今回発生しているエラーは上記によるものではありません。 (正しく解釈されていたら、<phpなどの文字列がただの文字列として出力されるだけですので) 何がエラーを起こしているかというと、 シングルクォーテーションの囲みで『文字列』だと認識させているにも関わらず、 『文字列』の中にシングルクォーテーションが存在し、その時点で『文字列』が 終了したと判断されている為です。 具体的には$post['thread_id']の1つめのシングルクォーテーションです。 文字列の中にシングルクォーテーションを利用したい場合は\'としてエスケープ しましょう。
まともなテキストエディタを使っていればすぐ気付けるエラーですね。「メモ帳」などを使うのはやめましょう。 ideone上でのソース確認 http://ideone.com/Yp8tYp <a href="thread.php?id=<?php echo htmlspecialchars($post[ この部分が文字列として認識されているのが分かると思います。原因は「PHPコードの中で全体を出力する」方法と「PHPコード部を細かく展開して出力する方法」を混在させているからです。 オススメの方法↓ <?php printf( '<br><a href="thread.php?id=%d">%s</a><br>', $post['thread_id'], htmlspecialchars($post['thread_title']) ); ?>