Я работаю над небольшой страницей, где я обновляю записи 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>
Ваш HTML-код недействителен — у вас не может быть form в этом конкретном месте в таблице HTML. Форма должна либо полностью содержаться в одной ячейке таблицы (td), либо вся таблица должна полностью содержаться в форме!
Вы должны переместить весь код, который имеет дело с $_FILES и $_POST внутрь if (isset($_POST["submit"]) && !empty($_FILES["file"]["name"])){ }, иначе вы можете легко получить предупреждения во время загрузки страницы (до того, как форма будет отправлена), если код PHP находится в том же скрипте, что и HTML-форма.
Сообщение обновлено с полным кодом. У меня есть один edit.php внутри вместе с PHP и HTML. Пожалуйста, смотрите обновление.
@ADyson, я пробовал, но не работает... полный код смотрите в обновлении.
I have tried...где? То, что вы опубликовали, не показывает, что вы пытаетесь сделать то, что я предложил. Это утверждение if не содержит ровно ничего. Существует много кода, который требует существования $_FILES и/или $_POST, но большая его часть находится за пределами любого блока, который проверяет его существование. Если ваш код попытается использовать что-то, чего не существует, вы получите предупреждение об ошибке, точно такое же, как те, которые вы видите.
P.S. У вас даже нет name = "submit" в вашей форме, так что это должно быть if (isset($_POST["submit"]) && !empty($_FILES["file"]["name"])){ }
@ADyson спасибо за строгую поддержку. Теперь все работает хорошо после вашего руководства. Обновление поста с окончательным кодом.
Большой. Но, пожалуйста, не редактируйте вопрос, чтобы показать свое решение. Это относится к разделу ответов под этими комментариями. См. также Как ответить и тур, чтобы убедиться, что вы понимаете, как здесь работает формат вопросов и ответов. Кроме того, если вы опубликуете свое решение в качестве ответа, оно будет более заметным в результатах поиска (поскольку вопрос отображается в поисковой системе как имеющее решение), и вы можете получить одобрение от других пользователей, которые сочтут его полезным. Этого не может случиться, если вы сбиваете с толку рабочий код в вопросе. Спасибо :-)
Давайте продолжим обсуждение в чате.






Выкладываю рабочий код:
финальный исправлен код (только часть 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");
}
?>
пожалуйста, добавьте весь соответствующий код - код, которым вы поделились, неполный