2960

[code]

    <?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);
    ?>
    
[/code]

この部分が1行目～27行目のコードになっています。 エラーメッセージにはline 10とあるので、`require_once
'checkinput.php';` の周辺だと思うのですが周辺をいじっても解決しませんでした。

cehckinput.phpはこのコードの書かれたファイルと同じ階層に存在しています。

ちなみにそれ以降のコードは以下のとおりで、

[code]

    <?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());
        }
    }
    ?>
    
[/code]

こうなっています。

長くなって申し訳ないですが、力を貸していただきたいです。 どこがおかしいでしょうか？


CC BY-SA 3.0
2015-01-02T16:09:20.757
2958
2015-01-04T17:50:29.507
5985
question
php
syntax error, unexpected 'else' (T_ELSE)というエラーなのですが、lineで指定された行の周辺の記述を変えても解決しません。


> else 節が2個あることが原因ですね。

コメント欄でいただいた指摘を回答とさせて頂きます。


CC BY-SA 3.0
2015-01-03T06:20:01.267
2960
2015-01-04T17:50:29.507
2015-01-04T17:50:29.507
30
5985
2958
answer