syntax error, unexpected 'else' (T_ELSE)というエラーなのですが、lineで指定された行の周辺の記述を変えても解決しません。
<?php
//HTTPヘッダーで文字コードを指定
header("Content-Type:text/html; charset=UTF-8");
?>
<?php
//h()関数の読み込み
require_once 'h.php';
//checkinput()関数の読み込み
require_once 'checkinput.php';
//POSTされたデータのチェック
$_POST = checkinput($_POST);
//三項演算子で検索文字列の有無を判定し処理
$data = isset($_POST['data']) ? trim($_POST['data']) : '';
//入力された検索文字列をexplode()関数で半角スペースで区切って配列に代入
//全角スペースはmb_convert_kana()関数で半角スペースに変換
$datalist = explode('', mb_convert_kana($data, 's'));
//値が空の要素を削除
$datalist = array_filter($datalist,function($val){
return $val != '';
});
//値でソートしてキーを0から振り直す
sort($datalist);
?>
この部分が1行目~27行目のコードになっています。
エラーメッセージにはline 10とあるので、require_once 'checkinput.php';
の周辺だと思うのですが周辺をいじっても解決しませんでした。
cehckinput.phpはこのコードの書かれたファイルと同じ階層に存在しています。
ちなみにそれ以降のコードは以下のとおりで、
<?php
if(!empty($datalist)){
//データベース設定の読み込み
require_once __DIR__ .'database.php';
try{
//mysqlデータベースに接続
$db = new PDO($dsn,$dbUser,$dbPass);
//プリペアドステートメントのエミュレーションを無効にする
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES,false);
//エラーが発生した場合、例外がスローされるようにする
$db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
//sql文の準備
//検索文字列の数だけ[:data0][:data1]…のようにプレースホルダを用意
$where = '';
foreach ($datalist as $key => $value) {
$where .= sprintf('AND name LIKE :name%d , $key');
}
$sql = 'SELECT * FROM goods WHERE 1' . $where;
$prepare = $db->prepare($sql);
//sql文のプレースホルダに値をバインドしてクエリを実行
for($i = 0; $i < count($datalist); $i++){
//検索文字列の中のワイルドカード文字及びエスケープ文字をエスケープ
$link = preg_replace('/([_%\\\\])/u', '\\\\$1', $datalist[$i]);
$prepare->bindValue(':name'.$i, '%' .$link .'%', PDO::PARAM_STR);
}
$prepare->execute();
$result = $prepare->fetchAll(PDO::FETCH_ASSOC);
if(count($result) == 0){
print '<p>「'.h($data).'」はデータベースに登録がありません</p>';
}else{
print '<p>「'.h($data).'」はデータベースに登録がありました</p>';
?>
<p>検索結果</p>
<table>
<tr>
<th>ID</th>
<th>商品名</th>
<th>価格</th>
</tr>
<?php
foreach ($result as $row){
?>
<tr>
<td><?php h($row['id']) ?></td>
<td><?php h($row['name']) ?></td>
<td><?php h($row['prace']) ?></td>
</tr>
<?php
}
print '</table>';
}
$sql = 'SELECT * FROM goods';
$prepare = $db->prepare($sql);
$prepare->execute();
$result = $prepare->fetchAll(PDO::FETCH_ASSOC);
?>
<p>データベースの内容一覧</p>
<table>
<tr>
<th>ID</th>
<th>商品名</th>
<th>価格</th>
</tr>
<?php
foreach ($result as $row){
?>
<tr>
<td><?php h($row['id']) ?></td>
<td><?php h($row['name']) ?></td>
<td><?php h($row['prace']) ?></td>
</tr>
<?php
}
print '</table>';
//接続でいない場合、PDOException例外がスローされるのでキャッチする
}catch(PDOException $e){
print 'エラーが発生しました。。 内容:' . h($e->getMessage());
}
}
?>
こうなっています。
長くなって申し訳ないですが、力を貸していただきたいです。 どこがおかしいでしょうか?