PHP страница поиска возвращает ошибку, но функция поиска работает - PullRequest
0 голосов
/ 11 июля 2020

Я создал страницу поиска, которая будет искать столбцы в таблице сообщений в базе данных. Когда я go перехожу на страницу поиска, я получаю сообщение об ошибке Notice: Undefined index: search in /app/public/search.php, но поиск будет работать, если я найду слово, которое существует в базе данных. Я ожидал ошибки, поскольку $search не будет распознан, пока форма не будет отправлена. Вот код.

<form class="form-inline" action="search.php" method="post">
    <input class="form-control" type="text" name="search" placeholder="Search"><br>
    <button class="btn btn-primary" type ="submit">Submit</button>
</form>
<?php
    $search = $_POST['search'];

    $sql = "SELECT * FROM posts WHERE post LIKE '%$search%' OR title LIKE '%$search%' OR datetime LIKE '%$search%'";
    $stmt = $pdo->prepare($sql);
    $stmt->execute();
    $posts = $stmt->fetchAll();
    $postCount = $stmt->rowCount();

    if ($postCount < 1) {
        flash('no_posts_found', '<h3>No Posts Found</h3>', 'lead');
    }
?>

<?php foreach($posts as $post) : ?>
    <div class="card my-4">
        <img class="img-fluid card-img-top" src="uploads/<?php echo htmlentities($post->image);  ?>" alt="post image">
        <div class="card-body">
            <h2 class="card-title"><a href="post.php?id=<?php echo $post->id; ?>"><?php echo htmlentities($post->title); ?></a></h2>
            <small>Created on <?php echo htmlentities($post->datetime); ?> by <?php echo htmlentities($post->author); ?></small>
            <span class="float-right badge badge-dark">20 Comments</span>
            <hr>
            <p><?php echo htmlentities(mb_strimwidth($post->post, 0, 150, '...')); ?></p>
            <a class="btn btn-primary float-right" href="post.php?id=<?php echo htmlentities($post->id); ?>">Read More<i class="fas fa-angle-double-right ml-1"></i></a>
        </div>
    </div>
<?php endforeach; ?>
</div>

Я пробовал использовать if(isset($_POST['search'])), который останавливает ошибку, но затем получаю сообщение Undefined variable: posts in /app/public/search.php. Вот код:

<?php if(isset($_POST['search'])) {
    $search = $_POST['search'];

    $sql = "SELECT * FROM posts WHERE post LIKE '%$search%' OR title LIKE '%$search%' OR datetime LIKE '%$search%'";
    $stmt = $pdo->prepare($sql);
    $stmt->execute();
    $posts = $stmt->fetchAll();
    $postCount = $stmt->rowCount();

    if ($postCount < 1) {
        flash('no_posts_found', '<h3>No Posts Found</h3>', 'lead');
    }
}
?>

<?php foreach($posts as $post) : ?>
    <div class="card my-4">
        <img class="img-fluid card-img-top" src="uploads/<?php echo htmlentities($post->image);  ?>" alt="post image">
        <div class="card-body">
            <h2 class="card-title"><a href="post.php?id=<?php echo $post->id; ?>"><?php echo htmlentities($post->title); ?></a></h2>
            <small>Created on <?php echo htmlentities($post->datetime); ?> by <?php echo htmlentities($post->author); ?></small>
            <span class="float-right badge badge-dark">20 Comments</span>
            <hr>
            <p><?php echo htmlentities(mb_strimwidth($post->post, 0, 150, '...')); ?></p>
            <a class="btn btn-primary float-right" href="post.php?id=<?php echo htmlentities($post->id); ?>">Read More<i class="fas fa-angle-double-right ml-1"></i></a>
        </div>
    </div>
<?php endforeach; ?>
</div>

Я пытаюсь понять, что делаю не так. Кто-нибудь может указать мне, пожалуйста, верное направление?

1 Ответ

1 голос
/ 11 июля 2020

Эта ошибка возникла из-за foreach l oop. Добавьте isset и пустую проверку для foreach l oop в.

<?php if( isset($posts) && !empty($posts) ) { foreach($posts as $post) : ?>
    <div class="card my-4">
        <img class="img-fluid card-img-top" src="uploads/<?php echo htmlentities($post->image);  ?>" alt="post image">
        <div class="card-body">
            <h2 class="card-title"><a href="post.php?id=<?php echo $post->id; ?>"><?php echo htmlentities($post->title); ?></a></h2>
            <small>Created on <?php echo htmlentities($post->datetime); ?> by <?php echo htmlentities($post->author); ?></small>
            <span class="float-right badge badge-dark">20 Comments</span>
            <hr>
            <p><?php echo htmlentities(mb_strimwidth($post->post, 0, 150, '...')); ?></p>
            <a class="btn btn-primary float-right" href="post.php?id=<?php echo htmlentities($post->id); ?>">Read More<i class="fas fa-angle-double-right ml-1"></i></a>
        </div>
    </div>
<?php endforeach; } ?>
...