Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, bool given in?
Проблема в неспособности произвести отладку и недостаточном знании php"SELECT * FROM `persons` WHERE fname='".$fname."'"<?= $r['firstname']; ?>
Так fname или firstname?
PS. sql инъекций не существует, подготовленные запросы придумали масоны чтоб усложнить жизнь разработчикам. Извините, накипело
Подскажите, пожалуйста, в чём проблема?
В ДНК. Шутка.
Проблема в чудовищном пещерном коде, который до сих пор преподают во всяких хтмлакадемиях и прочих видео с ютуба.
Ну то есть основная причина - это неверное имя поля, как правильно заметили в соседнем ответе, но при правильно настроенном пхп не пришлось бы гадать. при соединении надо сказать mysqli чтобы сообщала обо всех ошибках. Ну и сам запрос надо исполняьт не так как у тебя, а правильно
Сначала делаем отдельный файл mysqli.php и пишем в него код соединения. И это не одна строчка.
Код берем отсюда, подставляем свои значения.if (isset($_POST['search'])) {
    require 'mysqli.php';
    $stmt= $mysqli->prepare("SELECT * FROM `persons` WHERE firstname=?");
    $stmt->bind_param("s", $_POST['fname']);
    $stmt->execute();
    $result = $stmt->get_result();
    while($r = mysqli_fetch_assoc($result)){ ?>
                    <tr>
                          <td><?= $r['id']; ?></td>
                          <td><?= $r['firstname']; ?></td>
                          <td><?= $r['lastname']; ?></td>
                          <td><?= $r['age']; ?></td>
                          <td><?= $r['gender']; ?></td>
                          <td><?= $r['city']; ?></td>
                      </tr>
            	<?php
   		}
       	} ?>