• 締切済み

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

  • PHP
  • 回答数2
  • ありがとう数11

みんなの回答

回答No.2

> 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つめのシングルクォーテーションです。 文字列の中にシングルクォーテーションを利用したい場合は\'としてエスケープ しましょう。

noname#244856
noname#244856
回答No.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']) ); ?>

関連するQ&A

  • PHPエラー Warning: mysql_

    OCNサーバープランをスタンダードからビジネスライトへ変更した際、 OCN側で移動してくれたのはいいのですが、入っていた掲示板システムで、「削除」画面で 削除を押すと前サーバーまでは問題がなかったのですが、今回は削除はされるけれどエラー文がでてきます。 Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource in /usr/home/△△/www/htdocs/info/●●.php on line 87 問題の87行目: echo "<br>1件削除しました"; <?php if ($_POST["go_1"]==1) { $db_date = htmlspecialchars($_POST['db_date']); $sql="DELETE FROM keiji_t where kdate='".$db_date."'"; mysql_query($sql,$conn) or die("削除できませんでした"); mysql_free_result($res); echo "<br>1件削除しました"; } ?> 「1件削除しました」という文字はでます。 何が原因かわからず、もし原因として考えられそうなこと教えていただければとこちらにいれさせていただきました。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHPについて。

    PHPで占いを作っているのですが、ランダム表示にするにはどうすればいいですか。 <html> <head> <title>入力フォーム</title> </head> <body> <center> <?php //接続 $link = mysql_connect("○○○","○○○","○○○"); if(!$link){ die('Connected error !'.mysql_error()); } //DB選択 $db_selected = mysql_select_db('○○', $link); if(!$db_selected){ die('Connected error !'.mysql_error()); } //フォーム入力文字を表現 $○○= $_POST['name']; /* echo $○○.'<br>'; */ //ハッシュ値の取得 $hash = crc32($○○); if($hash < 0){ $hash = 0 - $hash; } /* echo $hash; */ $result = mysql_query("SELECT ○○") or die("sql error !"); $retukazu = mysql_num_rows($result); $kekka = $hash % $retukazu + 1; //文字コード設定 mysql_query("SET NAMES sjis"); $sql = mysql_query("SELECT ○○ = $kekka"); if(!$sql){ die('query_error !'.mysql_error()); } while($row = mysql_fetch_assoc($sql)){ echo '<center><br />あなたはきっと・・・<br /><br /><font color= "Red"><strong>'.$row['Memo'].'</strong></font>です<br />'; } ?> </p> </body> </html>

    • ベストアンサー
    • PHP
  • phpのif文について

    下記の表現をした際に、必ずif文がelseの方に流れてしまいます。 そこで条件式をいろいろ書き換え試したところ、 if($_SESSION['user_id'] = $employee_id) ↓ if($_SESSION['user_id'] == $employee_id) に書き換えた際にだけ、elseに流れず、 ==の関係が成り立ちます。 その際に変更しているのは、条件式だけで他のコードを変更していません。 どのように変更すれば、正しく条件式が機能しますか? <?php $sql = "SELECT * FROM thread_detail WHERE thread_id = $id"; $date = mysql_query($sql,$link); $logs = array(); while ($post = mysql_fetch_assoc($date)) { $logs[] = array($post['thread_detail_id'], $post['parent_thread_detail'], '<a href="thread.php?id='.$post['thread_id'].'&res='.$post['thread_detail_id'].'">'.$post['post_date'],$post['employee_id'].'</a>', $post['body'],'<a href="thread.php?id='.$post['thread_id'].'&edit='.$post['thread_detail_id'].'">編集</a>', '<a href="remove_thread.php?id='.$post['thread_id'].'&delete='.$post['thread_detail_id'].'"'.'onclick="return confirm(\'本当に削除しますか?\');">削除</a>'); } foreach ($logs as list($no, $oya, $create_date, $employee_id, $kiji, $edit, $delete)) { if ($oya > 0) { continue; } if($_SESSION['user_id'] == $employee_id) { print $create_date. $employee_id .'<br>'. $kiji . $edit . $delete . '<br>'; } else { print $create_date. $employee_id .'<br>'. $kiji . '<br>'; } listchild($logs, $no); } function listchild($logs, $parent) { $ct = 0; foreach ($logs as list($no, $oya, $create_date, $employee_id, $kiji, $edit, $delete)) { if ($oya !== $parent ) { continue; } if ($ct++ == 0) { print '<ul>'; } if($_SESSION['user_id'] == $employee_id) { print '<li>' .$create_date.$employee_id.'<br>'. $kiji . $edit . $delete . '<br>'.'<br>' . '</li>'; } else { print '<li>' .$create_date.$employee_id.'<br>'. $kiji . '<br>'.'<br>' . '</li>'; } listchild($logs, $no); } if ($ct > 0) { print '</ul>'; } } ?>

    • 締切済み
    • PHP
  • mysql sqlエラー

    先ほども質問したのですが再度質問させていただきます mysql limitページ分割を行っていてエラーは消せたのですが今度 SQLエラーになり出来ません 前の人が質問したのを参考にしてつくったのですがうまくいかず困っています 検索結果を10件ずつ表示して googleみたいに 1l 2l 3 みたいな感じやりたいです <body> <?php error_reporting(E_ALL ^ E_NOTICE); //データベースに接続 if (!$con = mysql_connect("localhost", "root", "admin")) { echo "接続エラー" ; exit ; } //データベースを選択 if (!mysql_select_db("db_test", $con)) { echo "データベース選択エラー" ; exit ; } //LIMITを使ったSELECT文を作成 $sql = "select * from tbl_test where (氏名 LIKE '%{$_GET['name']}%') or (住所 LIKE '%{$_GET['name']}%')"; $sql = "limit" . $page * 10 . ", 10" ; //SQL実行 if (!$res = mysql_query($sql)) { echo "SQLエラー<BR>" ; exit ; } //検索結果表示 echo "<table border=1>" ; echo "<tr> <th>番号</th> <th>氏名</th> <th>住所</th> <th>操作</th> </tr>" ; while($row = mysql_fetch_array($res)){ $ID = htmlspecialchars($row['番号']); $NAME = htmlspecialchars($row['氏名']); $ADDR = htmlspecialchars($row['住所']); echo "<tr> <td>$ID</td> <td>$NAME</td> <td>$ADDR</td> <td><a href='edit.php?番号=$ID'>修正</a> <a href='delete.php?番号=$ID'>削除</a></td> </tr>"; //検索条件に該当する全データの件数取得 $sql = "select count(*) from tbl_test " ; $sql = "where (氏名 LIKE '%{$_POST['name']}%') or (住所 LIKE '%{$_POST['name']}%')"; if (!$res = mysql_query($sql)) { echo "SQLエラー<BR>" ; exit ; } $row = mysql_fetch_array($res) ; $cnt = $row[0] ; //ページ表示 if(!$cnt > 10) echo ceil($cnt / 10), "ページの中の", $page + 1, "ページ目を表示<br>" ; //前の10件 if ($page_num != 0) { echo "<a href = find.php?name=".$name. ". $page -1.>" ; echo "&lt 前の10件"; } //次の10件 if (($page_num + 1)*10 < $cnt) { echo "<a href = find.php?name=".$name. ". $page +1.>" ; echo " 次の10件 &g</a>t" ; } //結果セットの開放 mysql_free_result ($res) ; //データベースから切断 mysql_close($con) ; } ?> </body> </html>

    • ベストアンサー
    • MySQL
  • PHPのサンプルコードが意図した通りに動かない。

    かれこれ6時間眺めてますが何が駄目なのかがわかりません。 どこが悪いのか教えていただけると助かります。 このbbs.phpは 二つのインプット要素をもつHTMLフォームを含むPHPファイルで、 名前とひとことコメントを入力してsubmitすれば フォームの下部にそのコメントを 名前、コメント、日付の書式で一行づつ表示する 。。。はずだったんですが Parse error: syntax error, unexpected T_STRING in /Applications/XAMPP/xamppfiles/htdocs/online_bbs/bbs.php on line 48 らしく該当する行を眺めてみても何がいけないのかさっぱりです。 コード内にもエラーが出たら出力するコードがあるのですが どうやらこれはインタープリタ自体が吐くエラーのようで このエラーの表示時にはフォーム要素は一切表示されません。 なにがいけないのか教えてください ほとほと困り果てています <?php $link = mysql_connect(`localhost`,`root`,`takataka`); if(!$link) { die(`Can not connect database`. mysql_error()); } mysql_select_db(`online_bbs`,$link); $errors = array(); if($_SERVER[`REQUEST_MTHOD`]===`POST`) { $name = null; if(!isset($_POST[`name`]) || !strlen($_POST[`name`])) { $errors[`name`] = `input your name `; }else if(strlen($_POST[`name`]) > 40) { $errors[`name`] = `名前は四十文字以内で入力してください`; }else { $name = $_POST[`name`]; } $comment = null; if(!isset($_POST[`comment`]) || !strlen($_POST[`comment`])) { $errors[`comment`] = `Input your comment please `; }else if(strlen($_POST[`comment`]) > 200) { $errors[`comment`] = `コメントは200文字以内で入力してください`; }else { $comment = $_POST[`comment`]; } if(count($errors) === 0) { $sql = "INSERT INTO `post` (`name`,`comment`,`created_at`) VALUES (`" . mysql_real_escape_string($name) . "`,`" . mysql_real_escape_string($comment) . "`,`" . date(`Y-m-d H:i:s`) . "`); mysql_query($sql,$link); mysql_close($link); header(`Location: http://localhost/online_bbs/bbs.php`); } } ?> <html> <head>    <titlle>ひとこと掲示板</title> </head> <body> <h1>ひとこと掲示板掲示板</h1> <form action="bbs.php" method="post"> //ここが48行目になります <?php if (count($errors) > 0): ?> <ul class="error_list"> <?php foreach ($errors as $error): ?> <li> <?php echo htmlspecialchars($error,ENT_QUOTES,`UTF-8`) ?> </li> <?php endforeach; ?> </ul> <?php endif; ?> 名前:<input type="text" name="name"/><br/> ひとこと;<input type="text" name="comment" size="60"/><br/> <input type="submit" name="submit" value="送信"/> </form> <?php $sql = "SELECT * FROM `post` ORDER BY `created_at` DESC"; $result = mysql_query($sql,$link); ?> <p><?php echo $result; ?></p> <?php if($result !== false && mysql_num_rows($result)): ?> <ul> <?php while($post = mysql_fetch_assoc($result)): ?> <li> <?php echo htmlspecialchars($post[`name`],ENT_QUOTES,`UTF-8`); ?> <?php echo htmlspecialchars($post[`comment`],ENT_QUOTES,`UTF-8`); ?> - <?php echo htmlspecialchars($post[`created_at`],ENT_QUOTES,`UTF-8`); ?> </li> <p>test</p> <?php endwhile; ?> </ul> <?php endif; ?> <?php mysql_free_result($result); mysql_close($link); ?> </body> </html>

    • ベストアンサー
    • PHP
  • phpでmysqlで作成したdbを表示したい。

    現在phpのプログラムの学習を行っています。、 phpmyadminで作成したデータベースを読み込もうとしているのですが、うまくいきません。 参考書やサイトも参考にしたのですが、警告が出ています。 よくわからなくなってきましたので、教えていただきたいです。 ------------------------------------------------------------------------------- ・実行結果 Resource id #31Resource id #40 接続ID: 選択の成否: 結果ID: 行数: Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\job\job.php on line 45 ------------------------------------------------------------------------------- ・ソース <?php /*$con = mysql_connect('localhost','root','root') or die("接続できません"); print "接続に成功しました。"; mysql_close($con);*/ $url = "localhost"; $user = "root"; $pass = "***"; $db = "***"; // MySQLへ接続する $link = mysql_connect($url,$user,$pass) or die("MySQLへの接続に失敗しました。"); // データベースを選択する $sdb = mysql_select_db($db,$link) or die("データベースの選択に失敗しました。"); // クエリを送信する $sql = "SELECT * FROM t01prefecture"; $result = mysql_query($sql, $link) or die("クエリの送信に失敗しました。<br />SQL:".$sql); //結果セットの行数を取得する $rows = mysql_num_rows($result); //結果保持用メモリを開放する mysql_free_result($result); echo "$link"; echo "$sdb"; echo "$result"; echo "$rows"; echo "<br>"; echo "接続ID:<?= $link ?><br />"; echo "選択の成否:<?= $sdb ?><br />"; echo "結果ID:<?= $result ?><br />"; echo "行数:<?= $rows ?><br />"; $recordSet = mysql_query('SELECT * FROM my_items'); while($data = mysql_fetch_assoc($recordSet)){ /*このあたりが45行目 */ echo $data['item_name']; /* ここの値を変える*/ echo '<br>'; } // MySQLへの接続を閉じる mysql_close($link) or die("MySQL切断に失敗しました。");

    • ベストアンサー
    • PHP
  • phpのデータベースを使用したsqlのエラー

    すみません、PHPでデータベースを読み込み、SQLにて処理するプログラムを作成しているのですが、 再びエラーで止まってしまいまして、困っています。 データベースへのアクセスはできたようなのですが、SQLの処理の部分がエラーになっているのだと思われます。 --------------結果表示-------------- Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\site\search_criteria.php on line 70 @ エラー番号 : 1064メッセージ : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'aaa,bbb,ccc FROM `test_table`' at line 1 @ ------------------------- -----------ソース------------- <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=shift_jis"> <title>-サイト -検索条件入力ページ-</title> </head> <body> <p>検索条件を入力してください</p><br> <?php # 変数定義関連 # mysqliの定義 global $mysqli; $mysqli = new mysqli('localhost', 'root', "", "****_db"); $link = mysql_connect('localhost', 'root', "", "****_db"); header("Content-type: text/html; charset=shift-jis"); // 文字化け防止 /* 文字セットを utf8 に変更します */ if (!$mysqli->set_charset("utf8")) { printf("処理1:文字コードのセットに失敗しました。: %s\n", $mysqli->error); } else { printf("処理1:文字コードセット-> %s\n", $mysqli->character_set_name()); } printf("<BR><BR>"); #配列定義 $job_name = array("配列定義"); $data = $_GET["job_opening_type"]; //データベースへの接続 if (!$link) { die("処理2:データベースへの接続失敗です。<BR>".mysql_error()); }else{ print("処理2:データベースへの接続成功!<BR><BR>"); } //データベースを選択 if (!mysql_select_db("****_db",$link)){ echo "処理3:データベース選択失敗<BR><BR>"; exit; }else{ echo "処理3:データベースの選択成功です。<BR><BR>"; } $query = file_get_contents("create.sql"); printf("処理4:クエリ->%s",$query); //SELECT文を実行 if($res = mysql_query($query,$link)){ echo "<BR>mysql_query失敗<BR>"; }else{ echo "<BR>mysql_query成功<BR>"; } //検索した結果を全部表示 line 70辺り→while($row = mysql_fetch_array($res,MYSQL_BOTH)){ echo "****=".$row["****"]; echo "****=".$row["****"]; echo "<BR>"; } echo "<BR>@<BR>エラー番号 : " . mysql_errno() . "メッセージ : " . mysql_error() ."<BR>@"; //データベースから切断 $mysqli->close(); echo "<BR><BR>処理5:データベースを切断しました。<BR>"; ?> <br> --------------------------------------------------<br> 最終更新日時<br> <p>&nbsp;</p> </body> </html> 内部のプログラムではなく、外部から読んでいるSQLの問題なのでしょうか? 外部にcreate.sqlというテキストを作成し、 SELECT aaa,bbb,ccc FROM `test_table` としています。 色々試しているのですが、うまくいきません、解決方法を教えて頂きたいです。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPでの検索機能実装について(フレームワーク無し

    PHP初心者です。 現在、PHPにてDBからアクセスし、DBの検索を実装するプログラムを作成しております。 参考HPを元に下記のプログラムを作成したのですが、参考HPのコードではフレームワークが組み込まれており、 フレームワークを組んでいない私のコードではエラーが発生してしまいます。 エラー内容: Warning: mysql_fetch_array() expects parameter 1 to be resource, (省略) line63 Warning: mysql_free_result() expects parameter 1 to be resource, (省略) line74 参考HPでは、search.phpの17行目'$search'が宣言されてない状態で記載されて おりましたので、search.phpの最初にて宣言しました($searchでは検索キーを格納して おります)。 恐れいりますが、ご教示願います。 input.php 検索ワードを送信 <form action="search.php" method="POST"> <input type="text" name="searchkey"> <input type="submit" name="searchid" value="検索"> </form> search.php <?php $search = htmlspecialchars($_POST['searchkey']); //データベースに接続 if (!$con = mysql_connect("ホスト名", "user名", "パスワード")) { echo "接続エラー"; exit ; } //データベースを選択 if (!mysql_select_db("db名", $con)) { echo "データベース選択エラー"; exit ; } //フォームで送られてきた条件を元にSELECT文を作成 $sql = "SELECT * FROM listwhere name LIKE '% . $search . %'"; //SELECT文を実行 if ($res = mysql_query($sql)) { echo "SQLエラー<BR>" ; exit ; } //検索結果<br> echo "<table border=1>" ; while($row = mysql_fetch_array($res)){ //エラー echo "<tr>" ; echo "<td>" . $row["id"] . "</td>" ; echo "<td>" . $row["name"] . "</td>" ; echo "<td>" . $row["date"] . "</td>" ; echo "<td>" . $row["registant"] . "</td>" ; echo "<td>" . $row["comment"] . "</td>" ; echo "</tr>" ; } echo "</table>" ; //結果セットの開放 mysql_free_result($res); //エラー //データベースから切断 mysql_close($con); ?>

    • ベストアンサー
    • PHP
  • mysql limitページ分割

    前の人が質問したのを参考にしてつくったのですがうまくいかず困っています 検索結果を10件ずつ表示して googleみたいに 1l 2l 3 みたいな感じやりたいです <html> <body> <?php //データベースに接続 if (!$con = mysql_connect("localhost", "root", "admin")) { echo "接続エラー" ; exit ; } //データベースを選択 if (!mysql_select_db("db_test", $con)) { echo "データベース選択エラー" ; exit ; } //LIMITを使ったSELECT文を作成 $sql = "select * from tbl_test where (氏名 LIKE '%{$_POST['name']}%') or (住所 LIKE '%{$_POST['name']}%')"; $sql = "limit" . $page_num*10 . ", 10" ; //SQL実行 if (!$res = mysql_query($sql)) { echo "SQLエラー<BR>" ; exit ; } //検索結果表示 echo "<table border=1>" ; echo "<tr> <th>番号</th> <th>氏名</th> <th>住所</th> <th>操作</th> </tr>" ; while($row = mysql_fetch_array($res)){ $ID = htmlspecialchars($row['番号']); $NAME = htmlspecialchars($row['氏名']); $ADDR = htmlspecialchars($row['住所']); echo "<tr> <td>$ID</td> <td>$NAME</td> <td>$ADDR</td> <td><a href='edit.php?番号=$ID'>修正</a> <a href='delete.php?番号=$ID'>削除</a></td> </tr>"; //検索条件に該当する全データの件数取得 $sql = "select count(*) from tbl_test " ; $sql = "where (氏名 LIKE '%{$_POST['name']}%') or (住所 LIKE '%{$_POST['name']}%')"; if (!$res = mysql_query($sql)) { echo "SQLエラー<BR>" ; exit ; } $row = mysql_fetch_array($res) ; $cnt = $row[0] ; //ページ表示 if(!$cnt > 10) echo ceil($cnt / 10), "ページの中の", $page_num + 1, "ページ目を表示<br>" ; //前の10件 if ($page_num != 0) { echo "<a href = find.php?name=",$name, ", $page_num -1.">" ; echo "&lt 前の10件"; } //次の10件 if (($page_num + 1)*10 < $cnt) { echo "<a href = find.php?name=",$name, ", $page_num +1.">" ; echo " 次の10件 &g</a>t" ; } //結果セットの開放 mysql_free_result ($res) ; //データベースから切断 mysql_close($con) ; ?> </body> </html> Parse error: syntax error, unexpected '前の10件' (T_STRING), expecting ',' or ';' というエラーが出て自分なりにバグを消しているのですがまだエラーが消えずに困っています

    • ベストアンサー
    • MySQL
  • PHP MySQLでエラーがでてしまいます。

    PHP MySQLからデータを取得したいのですが、以下のエラーが出てしまい原因が分かりません。 詳しい方お願い致します。 <b>Warning</b>: json_encode() expects exactly 1 parameter, 2 given in <b>/home/users/2/***.**-********/web/****************/php/seupPharmacyData.php</b> on line <b>21</b><br /> エラーが出るコードは以下になります。 <?php include "db.php"; $sql = "SELECT * FROM user_data"; $query = mysql_query($sql, $db) or die("クエリの送信に失敗しました。<br />SQL:".$sql); $result= array(); while ($row = mysql_fetch_object($query)) { $result[] = array( 'name1' => $row->name1, 'name2' => $row->name2, 'name3' => $row->name3, 'id' => $row->id, ); } //jsonとして出力 header('Content-type:application/json; charset=UTF-8'); echo json_encode($result,JSON_UNESCAPED_UNICODE); ?>

    • ベストアンサー
    • PHP