VladimirBuzin
Member
- Регистрация
- 18.03.2018
- Сообщения
- 19
Добрый день! Я пишу сайт для стоматологического кабинета, и у меня возникли проблемы с загрузкой изображений. Все имена полей формы и индексы массива POST прописаны верно, но почему-то сервер "жалуется" на неверно названный индекс image. Данные передавал напрямую, без всяких AJAX, но почему изображение не считалось?
doctor_insert.php
<?PHP
include_once 'connect_pdo.php';
$statement = $connection->query('SELECT * FROM speciality');
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>Добавление нового врача</title>
<link rel="shortcut icon" href="images/toothdoctor_diente_10728.ico" type="image/x-icon">
<link rel="stylesheet" href="css/style_2.css">
<link rel="stylesheet" href="css/window-style.css" type="text/css" media="all">
<script src="js/jquery-1.3.2.min.js" type="text/javascript"></script>
</head>
<body>
<div class="page-wrapper">
<form class="sign-up" action="insert_doctor.php" method="POST" id="doctor_insert" enctype=”multipart/form-data”>
<h1 class="sign-up-title">Добавление нового врача</h1>
<input type="text" name="surname" size="30" class="sign-up-input" pattern="[А-Яа-яЁё]{2,30}" placeholder="Фамилия" title="Введите фамилию на русском языке, от 2 до 30 букв без пробелов" maxlength="30" required>
<input type="text" name="name" size="30" class="sign-up-input" pattern="[А-Яа-яЁё]{2,30}" placeholder="Имя" title="Введите имя на русском языке, от 2 до 30 букв без пробелов" maxlength="30" required>
<input type="text" name="patronymic" size="30" class="sign-up-input" pattern="[А-Яа-яЁё]{7,30}" placeholder="Отчество" title="Введите отчество на русском языке, от 7 до 30 букв без пробелов" maxlength="30" required>
Добавить фотографию:<br />
<input type="file" name="image" class="sign-up-input" required><br />
<select name="med_spec" class="sign-up-input" required>
<option>Выберите область медицины</option>
<?PHP
while($row = $statement->fetch(PDO::FETCH_ASSOC)) {
echo '<option value="'.$row["spec_id"].'">'.$row["medspec"].'</option>';
}
echo '</select>';
?>
<input type="submit" value="Добавить" class="sign-up-button">
</form>
<div class="about">
<p class="about-links">
<a href="#" onclick="history.back();return false;">Назад</a>
</p>
<p class="about-author">
©2018 Corporation Buzin-Tech by VovaBuzin •
</p>
</div>
</div>
<div class="modal-wrapper">
<div class="modal">
<div class="head">
<a class="btn-close trigger" href="#">
<i class="fa fa-times" aria-hidden="true"></i>
</a>
</div>
<div class="content">
<div class="good-job">
<i class="fa fa-thumbs-o-up" aria-hidden="true"></i>
<h1></h1>
</div>
</div>
</div>
</div>
</body>
</html>
insert_doctor.php
<?php
include_once 'connect_pdo.php';
if (!empty($_POST)) {
$familija=$_POST['surname'];
$familija = str_replace(' ', '', $familija);
$imja=$_POST['name'];
$imja = str_replace(' ' ,'', $imja);
$otchestvo=$_POST['patronymic'];
$otchestvo = str_replace(' ' ,'', $otchestvo);
$image=$_FILES['image']['name'];
$image = str_replace(' ', '', $image);
$medspec_id = @intval($_POST['med_spec']);
if((isset($_FILES)) && ($_FILES['image']['error'] == 0) && (($_FILES['image']['type'] == 'image/gif') || ($_FILES['image']['type'] == 'image/jpeg') || ($_FILES['image']['type'] == 'image/png'))){
if (move_uploaded_file($_FILES['image']['tmp_name'], $_SERVER['DOCUMENT_ROOT'].'/images/'.$_FILES['image']['name'])) {
$statement = $connection->query('SELECT COUNT(*) FROM doctor');
$new_doctor_id = $statement->fetchColumn() + 1;
$statement = $connection->prepare("INSERT INTO doctor VALUES
docnum, :lastname, :firstname,
tchestvo,
hoto, :med_spec)");
$statement->bindParam(':docnum', $new_doctor_id);
$statement->bindParam(':lastname', $familija);
$statement->bindParam(':firstname', $imja);
$statement->bindParam('
tchestvo', $otchestvo);
$statement->bindParam('
hoto', $image);
$statement->bindParam(':med_spec', $medspec_id);
$statement->execute();
echo "Новый врач добавлен!<br />Файл корректен и был успешно загружен!";
} else {
echo "Возможная атака с помощью файловой загрузки!";
}
} else {
echo 'Ошибка передачи изображения';
}
} else {
echo 'Данные не получены!';
}
?>
При попытке загрузить изображение сервер выдал ошибки:
; Whether to allow HTTP file uploads.
; http://php.net/file-uploads
file_uploads=On
; Temporary directory for HTTP uploaded files (will use system default if not
; specified).
; http://php.net/upload-tmp-dir
upload_tmp_dir="\xampp\tmp"
; Maximum allowed size for uploaded files.
; http://php.net/upload-max-filesize
upload_max_filesize=2M
Если ошибка в файле с формой, то в чём там дело? Про enctype я не забыл. Дело здесь случайно не в multiple? Или папку с сайтом нужно помещать не напрямую в htdocks, а в папку, лежащую в этой категории (как матрёшка)? Или могут быть у главной папки XAMPP какие-то ограничения по загрузке, созданию, чтению и записи файлов? Извините, но сайт на локалхосте, а собственного домена у меня нет. Так что придётся разворачивать архивы во вложениях.
doctor_insert.php
<?PHP
include_once 'connect_pdo.php';
$statement = $connection->query('SELECT * FROM speciality');
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>Добавление нового врача</title>
<link rel="shortcut icon" href="images/toothdoctor_diente_10728.ico" type="image/x-icon">
<link rel="stylesheet" href="css/style_2.css">
<link rel="stylesheet" href="css/window-style.css" type="text/css" media="all">
<script src="js/jquery-1.3.2.min.js" type="text/javascript"></script>
</head>
<body>
<div class="page-wrapper">
<form class="sign-up" action="insert_doctor.php" method="POST" id="doctor_insert" enctype=”multipart/form-data”>
<h1 class="sign-up-title">Добавление нового врача</h1>
<input type="text" name="surname" size="30" class="sign-up-input" pattern="[А-Яа-яЁё]{2,30}" placeholder="Фамилия" title="Введите фамилию на русском языке, от 2 до 30 букв без пробелов" maxlength="30" required>
<input type="text" name="name" size="30" class="sign-up-input" pattern="[А-Яа-яЁё]{2,30}" placeholder="Имя" title="Введите имя на русском языке, от 2 до 30 букв без пробелов" maxlength="30" required>
<input type="text" name="patronymic" size="30" class="sign-up-input" pattern="[А-Яа-яЁё]{7,30}" placeholder="Отчество" title="Введите отчество на русском языке, от 7 до 30 букв без пробелов" maxlength="30" required>
Добавить фотографию:<br />
<input type="file" name="image" class="sign-up-input" required><br />
<select name="med_spec" class="sign-up-input" required>
<option>Выберите область медицины</option>
<?PHP
while($row = $statement->fetch(PDO::FETCH_ASSOC)) {
echo '<option value="'.$row["spec_id"].'">'.$row["medspec"].'</option>';
}
echo '</select>';
?>
<input type="submit" value="Добавить" class="sign-up-button">
</form>
<div class="about">
<p class="about-links">
<a href="#" onclick="history.back();return false;">Назад</a>
</p>
<p class="about-author">
©2018 Corporation Buzin-Tech by VovaBuzin •
</p>
</div>
</div>
<div class="modal-wrapper">
<div class="modal">
<div class="head">
<a class="btn-close trigger" href="#">
<i class="fa fa-times" aria-hidden="true"></i>
</a>
</div>
<div class="content">
<div class="good-job">
<i class="fa fa-thumbs-o-up" aria-hidden="true"></i>
<h1></h1>
</div>
</div>
</div>
</div>
</body>
</html>
insert_doctor.php
<?php
include_once 'connect_pdo.php';
if (!empty($_POST)) {
$familija=$_POST['surname'];
$familija = str_replace(' ', '', $familija);
$imja=$_POST['name'];
$imja = str_replace(' ' ,'', $imja);
$otchestvo=$_POST['patronymic'];
$otchestvo = str_replace(' ' ,'', $otchestvo);
$image=$_FILES['image']['name'];
$image = str_replace(' ', '', $image);
$medspec_id = @intval($_POST['med_spec']);
if((isset($_FILES)) && ($_FILES['image']['error'] == 0) && (($_FILES['image']['type'] == 'image/gif') || ($_FILES['image']['type'] == 'image/jpeg') || ($_FILES['image']['type'] == 'image/png'))){
if (move_uploaded_file($_FILES['image']['tmp_name'], $_SERVER['DOCUMENT_ROOT'].'/images/'.$_FILES['image']['name'])) {
$statement = $connection->query('SELECT COUNT(*) FROM doctor');
$new_doctor_id = $statement->fetchColumn() + 1;
$statement = $connection->prepare("INSERT INTO doctor VALUES
$statement->bindParam(':docnum', $new_doctor_id);
$statement->bindParam(':lastname', $familija);
$statement->bindParam(':firstname', $imja);
$statement->bindParam('
$statement->bindParam('
$statement->bindParam(':med_spec', $medspec_id);
$statement->execute();
echo "Новый врач добавлен!<br />Файл корректен и был успешно загружен!";
} else {
echo "Возможная атака с помощью файловой загрузки!";
}
} else {
echo 'Ошибка передачи изображения';
}
} else {
echo 'Данные не получены!';
}
?>
При попытке загрузить изображение сервер выдал ошибки:
В файле php.ini разрешена загрузка файлов, а также прописаны временная папка и максимальный размер. Я думаю, что там всё хорошо.Notice: Undefined index: image in C:\xampp\htdocs\stomkab\insert_doctor.php on line 10
Notice: Undefined index: image in C:\xampp\htdocs\stomkab\insert_doctor.php on line 13
Notice: Undefined index: image in C:\xampp\htdocs\stomkab\insert_doctor.php on line 13
; Whether to allow HTTP file uploads.
; http://php.net/file-uploads
file_uploads=On
; Temporary directory for HTTP uploaded files (will use system default if not
; specified).
; http://php.net/upload-tmp-dir
upload_tmp_dir="\xampp\tmp"
; Maximum allowed size for uploaded files.
; http://php.net/upload-max-filesize
upload_max_filesize=2M
Если ошибка в файле с формой, то в чём там дело? Про enctype я не забыл. Дело здесь случайно не в multiple? Или папку с сайтом нужно помещать не напрямую в htdocks, а в папку, лежащую в этой категории (как матрёшка)? Или могут быть у главной папки XAMPP какие-то ограничения по загрузке, созданию, чтению и записи файлов? Извините, но сайт на локалхосте, а собственного домена у меня нет. Так что придётся разворачивать архивы во вложениях.
Вложения
-
5 КБ Просмотры: 59
-
4,1 МБ Просмотры: 54