hj01
@hj01

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

正しく入力しているのにエラーが発生する

Q&A

Closed

解決したいこと

下記のcase:peasonの中のrequireのところなんですが、
なぜか正しく入力しているのにエラーが出ます。
これは何が原因なのですか?

発生している問題・エラー

Parse error: syntax error, unexpected token "<", expecting "case" or "default" or "}" in C:\xampp\htdocs\課題7\View\search-output.php on line 15

search-output

該当するソースコード

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>ログイン</title>
<link rel="stylesheet" href="../style.css">
<link rel="stylesheet" href="style.css">
</head>
<body>
<?php
switch ($_REQUEST['1']) {

case 'person':

<?php require 'controller/person.php'; ?>



	break;
case 'verb':

<?php require 'controller/verb.php'; ?>

	break;
case 'interrogative':

<?php require 'controller/interrogative.php'; ?>

	break;
case 'ajectiveverb':

<?php require 'controller/ajectiveverb.php'; ?>

	break;
case 'others':

<?php require 'controller/others.php'; ?>

	break;

default:
	echo '入力が正しくありません。';
echo'<div class="box1">';
     echo'<a href="search-input.php">検索画面に戻る</a>';
echo'</div>';
	break;



}

echo'<div class="box1">';
     echo'<a href="search-input.php">メイン画面に戻る</a>';
echo'</div>';

echo'<div class="box2">';
     echo'<a href="main.php">メイン画面に戻る</a>';
echo'</div>';


?>
</form>
</body>
</html>

person.php

該当するソースコード

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>PHP Sample Programs</title>
<link rel="stylesheet" href="css/person.css">

</head>
<body>
<table>
<tr><th>単語</th><th>~は</th><th>~の</th><th>~に</th><th>~のもの</th></tr>
<?php
$pdo=new PDO('mysql:host=localhost;dbname=english word;charset=utf8', 
	'staff', 'password');
$sql=$pdo->prepare('select * person_table where name like ?');
$sql->execute(['%'.$_REQUEST['keyword'].'%']);
foreach ($sql as $row) {
	echo '<tr>';
	echo '<td>', $row['word'], '</td>';
	echo '<td>', $row['mean'], '</td>';
	echo '<td>', $row['word2'], '</td>';
      echo '<td>', $row['word3'], '</td>';
      echo '<td>', $row['word4'], '</td>';
	echo '</tr>';
	echo "\n";
}
?>
</table>
0

1Answer

エラーメッセージにあるように15行目ですが、<?php ..... ?>で囲まれたPHPの構文の中に<?php というのがでてくるのでエラーになっています。

    10  <?php
    11  switch ($_REQUEST['1']) {
    12
    13  case 'person':
    14
    15  <?php require 'controller/person.php'; ?>
         ↓   ↓   ↓   ↓   
           require 'controller/person.php';

15行目から余分な <?php ?> のタグを外せばエラーはなくなると思います。
同じようなものがいくつかあるのでそれらも同じです。

0Like

Comments

  1. @hj01

    Questioner

    require 'controller/person.php';
    としたんですが

    Warning: require(controller/person.php): Failed to open stream: No such file or directory in C:\xampp\htdocs\課題7\View\search-output.php on line 15

    Fatal error: Uncaught Error: Failed opening required 'controller/person.php' (include_path='C:\xampp\php\PEAR') in C:\xampp\htdocs\課題7\View\search-output.php:15 Stack trace: #0 {main} thrown in C:\xampp\htdocs\課題7\View\search-output.php on line 15
    というエラーがでました。
  2. それもエラーに書いてあるままで
    controller/person.php
    が無いからではありませんか?
  3. @hj01

    Questioner

    controllerファイルの中にperson.phpは入っているのでソースコードの書き方が間違っているのでしょうか?
    ファイル名/呼び出したいphpであっていますか?
  4. require の文法は https://www.php.net/manual/ja/function.require.php を参照していただくとよいかと思います。

    require の後ろに 'controller/person.php' なので、
    今問題になっているソースと同じ場所(=C:\xampp\htdocs\課題7\View)に
    controlというフォルダがあって、その中に person.php というファイルがあれば大丈夫なんじゃないかと思いますが、、、
  5. @hj01

    Questioner

    controllerファイルをViewフォルダに入れたのですが、
    Fatal error: Uncaught ArgumentCountError: PDOStatement::execute() expects at most 1 argument, 5 given in C:\xampp\htdocs\課題7\View\controller\person.php:20 Stack trace: #0 C:\xampp\htdocs\課題7\View\controller\person.php(20): PDOStatement->execute(Array, Array, Array, Array, Array) #1 C:\xampp\htdocs\課題7\View\search-output.php(15): require('C:\\xampp\\htdocs...') #2 {main} thrown in C:\xampp\htdocs\課題7\View\controller\person.php on line 20
    というエラーがでました。
    person.phpの$sql->execute(['%'.$_REQUEST['keyword'].'%']);のところでエラーがでました。


    あと、person.phpのselect分の書き方はあっていますか?

    person.php

    <?php session_start();?>

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>PHP Sample Programs</title>
    <link rel="stylesheet" href="css/person.css">

    </head>
    <body>
    <table>
    <tr><th>単語</th><th>~は</th><th>~の</th><th>~に</th><th>~のもの</th></tr>
    <?php
    $pdo=new PDO('mysql:host=localhost;dbname=english word;charset=utf8',
    'staff', 'password');
    $sql=$pdo->prepare('select * person_table where word like ? or mean like ? or word2 like ?
    or word3 like ? or word4 like ?');
    $sql->execute(['%'.$_REQUEST['keyword'].'%'],['%'.$_REQUEST['keyword'].'%'],['%'.$_REQUEST['keyword'].'%']
    ,['%'.$_REQUEST['keyword'].'%'],['%'.$_REQUEST['keyword'].'%']);
    foreach ($sql as $row) {
    echo '<tr>';
    echo '<td>', $row['word'], '</td>';
    echo '<td>', $row['mean'], '</td>';
    echo '<td>', $row['word2'], '</td>';
    echo '<td>', $row['word3'], '</td>';
    echo '<td>', $row['word4'], '</td>';
    echo '</tr>';
    echo "\n";
    }
    ?>
    </table>
  6. エラーメッセージを読んでひとつづつ問題点を整理する習慣を付けた方が良いと思います。

    > PDOStatement::execute() expects at most 1 argument, 5 given

    execute()は引数をひとつ指定しないといけないのに5つあると書かれています。
    そもそものソースでは引数は1つだったようですが、それは動いたんでしょうか?

    execute()の説明はこちらにあります。 https://www.php.net/manual/ja/pdostatement.execute.php
    SELECT文に修正を加えてパラメータを増やしたようですが、その場合、execute()は「引数を追加して並べるのではなく、
    このように配列で渡す必要があります。

    array(
    ['%'.$_REQUEST['keyword'].'%'],
    ['%'.$_REQUEST['keyword'].'%'],
    ['%'.$_REQUEST['keyword'].'%'],
    ['%'.$_REQUEST['keyword'].'%'],
    ['%'.$_REQUEST['keyword'].'%']
    )
  7. @hj01

    Questioner

    引数が1つの時は正常に動きます。、


    arrayを加えてした場合は
    Warning: Array to string conversion in C:\xampp\htdocs\課題7\View\controller\person.php on line 20

    Warning: Array to string conversion in C:\xampp\htdocs\課題7\View\controller\person.php on line 20

    Warning: Array to string conversion in C:\xampp\htdocs\課題7\View\controller\person.php on line 20

    Warning: Array to string conversion in C:\xampp\htdocs\課題7\View\controller\person.php on line 20

    Warning: Array to string conversion in C:\xampp\htdocs\課題7\View\controller\person.php on line 20
    というエラーが出ました。

    ソースコードの書き方はあっていますか?
    <?php session_start();?>

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>PHP Sample Programs</title>
    <link rel="stylesheet" href="css/person.css">

    </head>
    <body>
    <table>
    <tr><th>単語</th><th>~は</th><th>~の</th><th>~に</th><th>~のもの</th></tr>
    <?php
    $pdo=new PDO('mysql:host=localhost;dbname=english word;charset=utf8',
    'staff', 'password');
    $sql=$pdo->prepare('select * FROM person_table where word like ? or mean like ? or word2 like ?
    or word3 like ? or word4 like ?' );
    $sql->execute(array(['%'.$_REQUEST['keyword'].'%'],['%'.$_REQUEST['keyword'].'%'],['%'.$_REQUEST['keyword'].'%']
    ,['%'.$_REQUEST['keyword'].'%'],['%'.$_REQUEST['keyword'].'%']));
    foreach ($sql as $row) {
    echo '<tr>';
    echo '<td>', $row['word'], '</td>';
    echo '<td>', $row['mean'], '</td>';
    echo '<td>', $row['word2'], '</td>';
    echo '<td>', $row['word3'], '</td>';
    echo '<td>', $row['word4'], '</td>';
    echo '</tr>';
    echo "\n";
    }
    ?>
    </table>
  8. 最後まで読みましょう。

    先ほども書いたように execute() には

    このように配列で渡す必要があります。

    array(
    ['%'.$_REQUEST['keyword'].'%'],
    ['%'.$_REQUEST['keyword'].'%'],
    ['%'.$_REQUEST['keyword'].'%'],
    ['%'.$_REQUEST['keyword'].'%'],
    ['%'.$_REQUEST['keyword'].'%']
    )
  9. @hj01

    Questioner

    すいません。
    execute()の()の中に
    array(
    ['%'.$_REQUEST['keyword'].'%'],
    ['%'.$_REQUEST['keyword'].'%'],
    ['%'.$_REQUEST['keyword'].'%'],
    ['%'.$_REQUEST['keyword'].'%'],
    ['%'.$_REQUEST['keyword'].'%']
    )
    を入れてはいけないんですか?
  10. ああ、失礼しました。寝ぼけたことを書いてしまいました。私が書いたものを入れたのが先の結果だったのですね。
    色々間違ってました。array()の中身はこちらでお願いします。
    array(
    '%'.$_REQUEST['keyword'].'%',
    '%'.$_REQUEST['keyword'].'%',
    '%'.$_REQUEST['keyword'].'%',
    '%'.$_REQUEST['keyword'].'%',
    '%'.$_REQUEST['keyword'].'%'
    )
  11. @hj01

    Questioner

    すいません。ありがとうございます。
    正しく動きました。

Your answer might help someone💌