Загрузка файла (php) два предупреждения

Я работаю над небольшой страницей, где я обновляю записи MySQL через страницу PHP, все функции работают хорошо, но я постоянно получаю предупреждения для неопределенного массива. Вот предупреждения:

Warning: Undefined array key "file" in C:\xampp\htdocs\crud\edit.php on line 11
Warning: Trying to access array offset on value of type null in C:\xampp\htdocs\crud\edit.php on line 11
Warning: Undefined array key "file" in C:\xampp\htdocs\crud\edit.php on line 22
Warning: Trying to access array offset on value of type null in C:\xampp\htdocs\crud\edit.php on line 22

Я просмотрел много подобных тем, но не смог исправить свою... Вот код edit.php

include 'db.php';

// File upload path
$targetDir = "uploads/";
$fileName = basename($_FILES["file"]["name"]);
$targetFilePath = $targetDir . $fileName;
$fileType = pathinfo($targetFilePath,PATHINFO_EXTENSION);

if (isset($_POST["submit"]) && !empty($_FILES["file"]["name"])){
}
    // Allow certain file formats
    $allowTypes = array('jpg','png','jpeg','gif','pdf','doc','xlsx');
    if (in_array($fileType, $allowTypes)){
    }
        // Upload file to server
        if (move_uploaded_file($_FILES["file"]["tmp_name"], $targetFilePath)){
        }

У меня также есть HTML для этого в <form:

<form name = "update_user" method = "post" action = "edit.php" enctype = "multipart/form-data" >
<tr>
                <td>Нов сертификат:</td>
                <td><input type = "file" name = "file" ></td>
</tr> 

У меня такое чувство, что я пропустил что-то очень простое.

----- обновлять ------- вот мой полный код: в один файл я положил php с html

// include database connection file
include_once("config.php");
//тук стартирам за фаил ъплоад
// Include the database configuration file
include 'db.php';

// File upload path
$targetDir = "uploads/";
$fileName = basename($_FILES["file"]["name"]);
$targetFilePath = $targetDir . $fileName;
$fileType = pathinfo($targetFilePath,PATHINFO_EXTENSION);

if (isset($_POST["submit"]) && !empty($_FILES["file"]["name"])){
}
    // Allow certain file formats
    $allowTypes = array('jpg','png','jpeg','gif','pdf','doc','xlsx');
    if (in_array($fileType, $allowTypes)){
    }
        // Upload file to server
        if (move_uploaded_file($_FILES["file"]["tmp_name"], $targetFilePath)){
        }
// край на фаил ъплоад

// Check if form is submitted for user update, then redirect to homepage after update
if (isset($_POST['update']))
{
    $id = $_POST['id'];
    $toolnr=$_POST['toolnr'];
    $status=$_POST['status'];
    $toolname=$_POST['toolname'];
    $serial=$_POST['serial'];
    $usedat=$_POST['usedat'];
    $owner=$_POST['owner'];
    $calibrated=$_POST['calibrated'];
    $nextcalibration=$_POST['nextcalibration'];
    $vendors=$_POST['vendors'];
    
    // update user data
    $result = mysqli_query($mysqli, "UPDATE tools SET toolnr='$toolnr',status='$status',toolname='$toolname',serial='$serial',usedat='$usedat',owner='$owner',calibrated='$calibrated',nextcalibration='$nextcalibration', vendors='$vendors', file_name = '$fileName' WHERE id='$id'");
    // Redirect to homepage to display updated user in list
    header("Location: index.php");
}

?>
<?php
// Display selected user data based on id
// Getting id from url
$id = $_GET['id'];
// Fetech user data based on id
$result = mysqli_query($mysqli, "SELECT * FROM tools WHERE id=$id");
while($user_data = mysqli_fetch_array($result))
{
    $toolnr = $user_data['toolnr'];
    $status = $user_data['status'];
    $toolname = $user_data['toolname'];
    $serial = $user_data['serial'];
    $usedat = $user_data['usedat'];
    $owner = $user_data['owner'];
    $calibrated = $user_data['calibrated'];
    $nextcalibration = $user_data['nextcalibration'];
    $vendors = $user_data['vendors'];
    $momenten = $user_data['file_name'];
}

?>
<html>
<head>
    <title>Актуализация</title>
    <link rel = "stylesheet" href = "https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" integrity = "sha384-xOolHFLEh07PJGoPkLv1IbcEPTNtaed2xpHsD9ESMhqIYd0nLMwNLD69Npy4HI+N" crossorigin = "anonymous">
    <center> <img src = "logo-ottobock.png" alt = "OttobockLogo"> </center>
    <hr> <br>
    <center> <img src = "notification.png" alt = "Warning"> </center>
    <center> <i> <p style = "color:red;"> В момента работите с най-високо ниво на достъп, моля бъдете внимателни. <br> Всички направени от Вас промени са необратими. <p> </i> </center>
</head>
<body>
    <br/><br/>
    <center> <form name = "update_user" method = "post" action = "edit.php" enctype = "multipart/form-data" >
        <table border = "0" class = "table table-striped" >
            <tr>
                <td>Номер</td>
                <td><input type = "text" name = "toolnr" class = "form-control" value=<?php echo $toolnr;?>></td>
            </tr>
            <tr>
                <td>Статус</td>
                <td>
                <select name = "status" id = "status" class = "form-control" required>
    <?php
        include "dbConn.php";  
        $records = mysqli_query($db, "SELECT status FROM tools WHERE id=$id UNION SELECT currentstatus FROM statuses");  

        while($data = mysqli_fetch_array($records))
        {
            echo "<option value='". $data['status'] ."'>" .$data['status'] ."</option>";  
        }   
    ?>  </select>
                </td>
            </tr>
            <tr>
                <td>Найменование</td>
                <td><input type = "text"  name = "toolname" class = "form-control" value = "<?php echo $toolname;?>"></td>
            </tr> <br>
            <tr>
                <td>Сериен номер</td>
                <td><input type = "text" name = "serial" class = "form-control" value = "<?php echo $serial;?>"></td>
            </tr>
            <tr>
                <td>Локация</td>
                <td> 
                <select name = "usedat" id = "usedat" class = "form-control" required>
    <?php
        include "dbConn.php";  
        $records = mysqli_query($db, "SELECT usedat FROM tools WHERE id=$id UNION SELECT locations From whereused");  
        while($data = mysqli_fetch_array($records))
        {
            echo "<option value='". $data['usedat'] ."'>" .$data['usedat'] ."</option>";  
        }   
    ?>  </select>
                </td>
            </tr>
            <tr>
                <td>Отговорник</td>
                <td>
                <select name = "owner" id = "owner" class = "form-control"  required>
    <?php
        include "dbConn.php";  
        $records = mysqli_query($db, "SELECT owner FROM tools WHERE id=$id UNION SELECT responsiblepersons From responsibles");  
        while($data = mysqli_fetch_array($records))
        {
            echo "<option value='". $data['owner'] ."'>" .$data['owner'] ."</option>";  
        }   
    ?>  </select>
                </td>
            </tr>
            <tr>
                <td>Калибриран на:</td>
                <td><input type = "date" name = "calibrated" class = "form-control" value=<?php echo $calibrated;?>></td>
            </tr>
            <tr>
                <td>Следваща</td>
                <td><input type = "date" name = "nextcalibration" class = "form-control"  value=<?php echo $nextcalibration;?>></td>
            </tr>
            <tr>
                <td>Сертификат</td>
                <td><?php echo "<a target = '_blank' href='http://10.171.2.15/crud/uploads/$momenten'> Свали </a>";?></td>
            </tr>
            <tr>
                <td>Нов сертификат:</td>
                <td><input type = "file" name = "file" ></td>
            </tr> 
            <tr>
                <td>Калибрира се при</td>
                <td>
                <select name = "vendors" id = "vendors" class = "form-control" required>
    <?php
        include "dbConn.php";  
        $records = mysqli_query($db, "SELECT vendors FROM tools WHERE id=$id UNION SELECT vendoren FROM vendors");  
        while($data = mysqli_fetch_array($records))
        {
            echo "<option value='". $data['vendors'] ."'>" .$data['vendors'] ."</option>";  
        }   
    ?>  </select>
                </td>
            </tr>
            <tr>
                <td><input type = "hidden" name = "id" value=<?php echo $_GET['id'];?>></td>
                <td><input type = "submit" name = "update"  class = "btn btn-success" value = "Запис">
                 <a href = "index.php" class = "btn btn-danger" >Отказ</a>  </td>
            </tr>
        </table>
    </form> </center>
</body>

пожалуйста, добавьте весь соответствующий код - код, которым вы поделились, неполный

Professor Abronsius 06.01.2023 09:23

Ваш HTML-код недействителен — у вас не может быть form в этом конкретном месте в таблице HTML. Форма должна либо полностью содержаться в одной ячейке таблицы (td), либо вся таблица должна полностью содержаться в форме!

Professor Abronsius 06.01.2023 09:25

Вы должны переместить весь код, который имеет дело с $_FILES и $_POST внутрь if (isset($_POST["submit"]) && !empty($_FILES["file"]["name"])){ }, иначе вы можете легко получить предупреждения во время загрузки страницы (до того, как форма будет отправлена), если код PHP находится в том же скрипте, что и HTML-форма.

ADyson 06.01.2023 09:32

Сообщение обновлено с полным кодом. У меня есть один edit.php внутри вместе с PHP и HTML. Пожалуйста, смотрите обновление.

Azim Feta 06.01.2023 09:38

@ADyson, я пробовал, но не работает... полный код смотрите в обновлении.

Azim Feta 06.01.2023 09:40
I have tried...где? То, что вы опубликовали, не показывает, что вы пытаетесь сделать то, что я предложил. Это утверждение if не содержит ровно ничего. Существует много кода, который требует существования $_FILES и/или $_POST, но большая его часть находится за пределами любого блока, который проверяет его существование. Если ваш код попытается использовать что-то, чего не существует, вы получите предупреждение об ошибке, точно такое же, как те, которые вы видите.
ADyson 06.01.2023 09:57

P.S. У вас даже нет name = "submit" в вашей форме, так что это должно быть if (isset($_POST["submit"]) && !empty($_FILES["file"]["name"])){ }

ADyson 06.01.2023 10:04

@ADyson спасибо за строгую поддержку. Теперь все работает хорошо после вашего руководства. Обновление поста с окончательным кодом.

Azim Feta 06.01.2023 12:23

Большой. Но, пожалуйста, не редактируйте вопрос, чтобы показать свое решение. Это относится к разделу ответов под этими комментариями. См. также Как ответить и тур, чтобы убедиться, что вы понимаете, как здесь работает формат вопросов и ответов. Кроме того, если вы опубликуете свое решение в качестве ответа, оно будет более заметным в результатах поиска (поскольку вопрос отображается в поисковой системе как имеющее решение), и вы можете получить одобрение от других пользователей, которые сочтут его полезным. Этого не может случиться, если вы сбиваете с толку рабочий код в вопросе. Спасибо :-)

ADyson 06.01.2023 12:30

Давайте продолжим обсуждение в чате.

Azim Feta 06.01.2023 12:35
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
10
56
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Выкладываю рабочий код: финальный исправлен код (только часть php). Проблема заключалась в том, что часть кода, отвечающая за загрузку файлов, находилась вне if statement

<?php

// include database connection file
include_once("config.php");

// Check if form is submitted for user update, then redirect to homepage after update
if (isset($_POST['update']))
{

    $id = $_POST['id'];
    $toolnr=$_POST['toolnr'];
    $status=$_POST['status'];
    $toolname=$_POST['toolname'];
    $serial=$_POST['serial'];
    $usedat=$_POST['usedat'];
    $owner=$_POST['owner'];
    $calibrated=$_POST['calibrated'];
    $nextcalibration=$_POST['nextcalibration'];
    $vendors=$_POST['vendors'];
    
// Include the database configuration file
include 'db.php';
$statusMsg = '';

// File upload path
$targetDir = "uploads/";
$fileName = basename($_FILES["file"]["name"]);
$targetFilePath = $targetDir . $fileName;
$fileType = pathinfo($targetFilePath,PATHINFO_EXTENSION);

if (isset($_POST["submit"]) && !empty($_FILES["file"]["name"])){

    // Allow certain file formats
    $allowTypes = array('jpg','png','jpeg','gif','pdf','doc','xlsx');
    if (in_array($fileType, $allowTypes)){
    }
    }
        // Upload file to server
        if (move_uploaded_file($_FILES["file"]["tmp_name"], $targetFilePath)){
        }

    // update user data
    $result = mysqli_query($mysqli, "UPDATE tools SET toolnr='$toolnr',status='$status',toolname='$toolname',serial='$serial',usedat='$usedat',owner='$owner',calibrated='$calibrated',nextcalibration='$nextcalibration', vendors='$vendors', file_name = '$fileName' WHERE id='$id'");
    // Redirect to homepage to display updated user in list
    header("Location: index.php");
}

?>

Другие вопросы по теме