Top.Mail.Ru
Ответы
Аватар пользователя
4 месяца назад
от

NULL Warning: Trying to access array offset on value of type null in D:\Ampps\www\магазин\pr.php on line 19

123456789101112131415161718192021222324252627
 <?php 
    include("application/db.php");
    $id = $_GET['id'];
    $product_query = 'SELECT * FROM merchendise WHERE `id` = "$id" ';
    $result = mysqli_query($conn, $product_query) or die(mysql_error() ."<br/>". $sql);
    $data = mysqli_fetch_row($result);
    var_dump($data);
    
   
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <?php echo($data['name']); ?>
                           

   
           

</html>

хотя я проверял id выводится правильно 
Только авторизированные пользователи могут оставлять свои ответы
Дата
Популярность
Аватар пользователя
Новичок
4мес
123456789101112131415161718192021222324252627282930313233
 <?php  
    include("application/db.php"); 
    $id = $_GET['id']; 
 
    // Используйте параметризованный запрос для безопасности. 
    $stmt = $conn->prepare('SELECT * FROM merchendise WHERE id = ?'); 
    $stmt->bind_param('i', $id); // Привязка параметра $id как целое число 
    $stmt->execute(); 
    $result = $stmt->get_result(); 
 
    $data = $result->fetch_assoc(); // Получение ассоциативного массива 
 
    if ($data) { 
        var_dump($data); 
    } else { 
        echo "Товар не найден!"; 
    } 
?> 
<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
    <title>Document</title> 
</head> 
<body> 
    <?php if ($data): ?> 
        <h1><?php echo htmlspecialchars($data['name']); ?></h1> 
    <?php else: ?> 
        <p>Товар с ID <?php echo htmlspecialchars($id); ?> не найден.</p> 
    <?php endif; ?> 
</body> 
</html> 

Вот так будет правильно!

Аватар пользователя
Высший разум
4мес

Замени mysqli_fetch_row на mysqli_fetch_assoc.

mysqli_fetch_row возвращает массив с ЦЕЛОЧИСЛЕННЫМ индексами ($data[0], $data[1] и т.д.). А чтобы получить массив с индексами - именами полей таблицы ($data['name']), используется mysqli_fetch_assoc.

Круглые скобки после echo не нужны: echo - оператор, а не вызов функции:

1
 <?php echo $data['name']; ?> 

А ещё лучше в таком коде вообще не использовать echo, а применять специальный тег:

1
 <?= $data['name'] ?> 

https://www.php.net/manual/ru/language.basic-syntax.phptags.php