95473


PHPで下記の2つのエラーが出ます。

[code]

    Warning: Undefined variable $row in C:\xampp\htdocs\Portfolio\news_table.php on line 88
    
    Warning: foreach() argument must be of type array|object, null given in C:\xampp\htdocs\Portfolio\news_table.php on line 88
    
[/code]

まず、1つ目は88行目の$rowが未定義変数と思っています。  
それに伴い、2つ目のエラーが出ていると思っています。

従って、ソースコードの68行目で、isset($row)をして定義したつもりなのですが、エラーが消えません。  
念のため、「検索」をクリックしましたが、それでもエラーは消えません。

エラー原因の究明にご協力いただければ幸いです。  
ソースコードを添付します。

[code]

    <?php
    try{
        require_once("db_connect.php");
        $pdo = new PDO("mysql:host=$SERV;dbname=$DB;charset=$CHAR",$USER,$PASS);
    }
    catch(PDOException $e){echo "次がエラーの内容です。;" .$e->getMessage();
    }
    ?>
    <!doctype html>
    <html lang=ja>
        <head>
            <meta charset="utf-8">
            <title>News一覧</title>
            <meta name="description" content="Salon Yuri-rinの管理者ページ">
            <!--リセットcss-->
            <link rel="stylesheet" href="https://unpkg.com/ress/dist/ress.min.css">
            <!--css-->
            <link rel="stylesheet" href="css/news_style.css">
            <!--レスポンシブ対応-->
            <meta name="viwport" content="width=device-width, initial-scale=1">
            <!--Googleフォント-->
            <link href="https://fonts.googleapis.com/css2?family=Sawarabi+Gothic&display=swap" rel="stylesheet">
            <link href="https://fonts.googleapis.com/css2?family=Shippori+Mincho:wght@500&display=swap" rel="stylesheet">
        </head>
        <body>
            <h1>News一覧</h1>
            <table class="search_table">
            <form class="conditions" id="conditions" action="news_table.php" method="post">
                <tr>
                    <td><label for="sdate">日付</label></td>
                    <td><input type="date" name="sdate" id="sdate"></td>
                    <td><label for="edate">～</label></td>
                    <td><input type="date" name="edate" id="edate"></td>
                </tr>
                <tr>
                    <td><label for="title">タイトル</label></td>
                    <td><input type="text" name="title" id="title"></td>
                    <td><label>内容</label></td>
                    <td><input type="text" name="content" id="title"></td>
                </tr>
                <tr>    
                    <td><label>ステータス</label></td>
                    <td>
                        <select name="status" id="status">
                            <option value="0">未公開</option>
                            <option value="1">公開</option>
                        </select>
                    </td>
                </tr>
            </form>
            </table>
            <button type="submit" form="conditions"　name="search_button" value="検索" class="search_button">検索</button>
            <table class="tablehead">
                <tr>
                    <th class="header">日付</th>
                    <th class="header">タイトル</th>
                    <th class="header">内容</th>
                    <th class="header">公開ステータス</th>
                    <th class="header2">
                        <form class="create" action="news_create.php">
                            <button type="submit" name="button" value="登録" class="button_a">登録</button>
                        </form>
                    </th>
                    <th class="header2"></th>
                </tr>
            </table>
            <?php
                if(isset($_REQUEST['sdate']) && isset($_REQUEST['edate']) && isset($_REQUEST['title']) && isset($_REQUEST['content']) && isset($_REQUEST['status']) && isset($row) &&
                    isset($_POST['search_button'])){
                $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
                $sql =
                    ('select * from news where 
                        (pub_date >= ? and pub_date <= ?)
                        and title like ?
                        and content like ?
                        and status = ?');
                $stmt = $pdo->prepare($sql);
                $stmt ->execute(
                    [htmlspecialchars(date_format(date_create($_REQUEST['sdate']),'Y-m-d'), ENT_QUOTES | ENT_HTML5, 'UTF-8'),
                    htmlspecialchars(date_format(date_create($_REQUEST['edate']),'Y-m-d'), ENT_QUOTES | ENT_HTML5, 'UTF-8'),
                    htmlspecialchars($_REQUEST['title'], ENT_QUOTES | ENT_HTML5, 'UTF-8'),
                    htmlspecialchars($_REQUEST['content'], ENT_QUOTES | ENT_HTML5, 'UTF-8'),
                    htmlspecialchars($_REQUEST['status'], ENT_QUOTES | ENT_HTML5, 'UTF-8'),]);
                $stmt->bindvalue(":title", "%" . $_REQUEST['title'] . "%", PDO::PARAM_STR);
                $stmt->bindvalue(":content", "%" . $_REQUEST['content'] . "%", PDO::PARAM_STR);
                $row = $stmt->fetchAll(PDO::FETCH_ASSOC);}?>
    
                <?php foreach($row as $data):?>
                <form action="?" method="post" class = "newstblform">
                    <div class = "table1">
                        <table class="newstable">
                            <tr>
                                <input type="hidden" name="seq" value="<?=htmlspecialchars($data['id'], ENT_QUOTES | ENT_HTML5, 'UTF-8')?>" id="seq">
                            <td class="dt">
                                <input type="text" name="pub_date" value="<?=htmlspecialchars($data['pub_date'], ENT_QUOTES | ENT_HTML5, 'UTF-8')?>" id="sei" readonly="readonly">
                            </td>
                            <td class="dt">
                                <input type="text" name="title" value="<?=htmlspecialchars($data['title'], ENT_QUOTES | ENT_HTML5, 'UTF-8')?>" id=mei readonly="readonly">
                            </td>
                            <td class="dt">
                                <input type="text" name="content" value="<?=htmlspecialchars($data['content'], ENT_QUOTES | ENT_HTML5, 'UTF-8')?>" id="sei_kana">
                            </td>
                            <td class="dt">
                                <input type="text" name="status" value="<?=htmlspecialchars($data['status'], ENT_QUOTES | ENT_HTML5, 'UTF-8')?>" id="sei_kana">
                            </td>
                            <td class="bt">
                                <input type="submit" name=button value="修正" formaction="news_update.php" class="button_a">
                            </td>
                            <td class="bt">
                                <input type="submit" name=button value="削除" formaction="news_delete_conf.php" class="button_a">
                            </td>
                            </tr>
                        </table>
                    </div>
                </form>
                <?php endforeach; ?>
        </body>
    </html>
    
[/code]


CC BY-SA 4.0
2023-06-27T00:26:30.047
95387
2023-07-05T04:01:02.363
2023-06-27T00:43:52.917
3060
58703
question
php
PHPでUndefined variableエラー


本件、原因わかりました。  
$STMTの指定に問題があり、SQLが実行できずに$rowがnullのままでした。  
聞く前に自分で調査することが沢山ありました。  
本件を確認いただいた方、調査いただいた方、お騒がせして申し訳ありません。  
現在、別のエラーで悩んでいますが、そちらは別途質問させていただき、本件はクローズします。


CC BY-SA 4.0
2023-07-05T04:01:02.363
95473
2023-07-05T04:01:02.363
58703
95387
answer