Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 06.07.2016
Сообщений: 12

Undefined index и ошибка в запросе к БД (из книги Мориссона)

25.07.2016, 20:49. Показов 1063. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Парни, подскажите в чем может быть проблема. Данный код взят и частично изменен из книги Мориссона "Изучаем PHP и Mysql", глава 7 (Приложение "Несоответствия").
Вот код, который должен менять профиль пользователя:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
<?php
require_once ('login.php');
?>
<!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <title>Изменение профиля</title>
    <link rel="stylesheet" type="text/css" href="style.css" />
</head>
<body>
<h3>Изменение профиля:</h3>
<?php
ini_set('display_errors','On');
error_reporting( E_ALL );
require_once ('appvar.php');
require_once ('connectvar.php');
 
$dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME);
 
if (isset($_POST['submit'])) {
    //Получение данных методом POST о юзере
    $first_name = mysqli_escape_string($dbc, trim($_POST['firstname']));
    $last_name = mysqli_escape_string($dbc, trim($_POST['lastname']));
    $gender = mysqli_escape_string($dbc, trim($_POST['gender']));
    $birth_date = mysqli_escape_string($dbc, trim($_POST['birth_date']));
    $city = mysqli_escape_string($dbc, trim($_POST['city']));
    $state = mysqli_escape_string($dbc, trim($_POST['state']));
    $old_picture = trim($_POST['old_picture']);
    $new_picture = $_POST['new_picture'];
    $new_picture_type = $_FILES['new_picture']['type'];
    $new_picture_size = $_FILES['new_picture']['size'];
    list($new_picture_width, $new_picture_height) = getimagesize($_FILES['new_picture']['tmp_name']);
    $error = false;
    //Проверка и перемещение файла, если все ок
    if (!empty($new_picture)) {
        if((($new_picture_type == 'image/gif') || ($new_image_type == 'image/png') || ($new_picture_type == 'image/jpeg') || ($new_picture_type == 'image/pjpeg')) && ($new_picture_size > 0) && ($new_picture_size <= MM_MAXFILESIZE) && ($new_picture_width <= MM_MAXIMGWIDTH) && ($new_picture_height <= MM_MAXIMGHEIGHT )) {
            if ($_FILE['file']['error'] == 0) {
                //Перемещение файла в целевую папку
                $target = MM_UPLOADPATH .$new_picture;
                if (move_uploaded_file($_FILES['new_picture']['tmp_name'], $target)) {
                    //Если перемещение файла произошло успешно - удалить старый файл
                    if(!empty($old_picture) && ($old_picture != $new_picture)) {
                        @unlink(MM_UPLOADPATH . $old_picture);
                    }
                }
                else {
                    //Закачка нового файла провалилась, удаление временного файла и установка ошибки
                    @unlink($_FILES['new_picture']['tmp_name']);
                    $error = true;
                    echo '<p class="error">SORRY, problem to upload file.</p>';
                }
            }
        }
        
        else {
            //Если файл не валиден, удаление временной версии и установка ошибки
            @unlink($_FILES['new_picture']['tmp_name']);
            $error = true;
            echo '<p class="error">Your picture must be a GIF/PNG/JPEG format, no greater than '.(MM_MAXFILESIZE / 1024).' KB and '.MM_MAXIMGWIDTH .'x' .MM_MAXIMGHEIGHT.' pixels in size.</p>';
            if (($new_picture_type != 'image/gif') || ($new_image_type != 'image/png') || ($new_picture_type != 'image/jpeg') || ($new_picture_type != 'image/pjpeg')) {
                echo '<p>WRONG TYPE OF FILE</p>';
            }
            if ($new_picture_size <= 0) {
                echo '<p>EMPTY SIZE</p>';
            }
            if ($new_picture_size > MM_MAXFILESIZE) {
                echo '<p>ПРЕВЫШЕН РАЗМЕР ФАЙЛА</p>';
            }
            if ($new_picture_width > MM_MAXIMGWIDTH) {
                echo '<p>ПРевышена максимальная ширина изображения</p>';
            }
            if ($new_picture_height > MM_MAXIMGHEIGHT) {
                echo '<p>Превышена высота файла</p>';
            }
        }
    }
    //Обновление профиля в базе данных
    if (!$error) {
        if(!empty($first_name) && !empty($last_name) && !empty($gender) && !empty($birth_date) && !empty($city) && !empty($state)) {
            if (!empty($new_picture)) {
                $query = "UPDATE ch51 SET first_name = '$first_name', last_name = '$last_name', gender = '$gender', birth_date = '$birth_date', city = '$city', state = '$state', picture = '$new_picture' WHERE user_id = '$user_id'";
            }
            else {
                $query = "UPDATE ch5 SET first_name = '$first_name', last_name ='$last_name', gender = '$gender', birth_date = '$birth_date', city = $city, state = '$state' WHERE user_id = '$user_id'";
            }
            $result = mysqli_query($dbc, $query)
            or die(mysql_errno() . ": " . mysql_error(). "\n");
 
 
            //Подтверждение, что все ок
            echo '<p>Все данные обновлены!</p>';
            mysqli_close($dbc);
            exit();
        }
        else {
            echo '<p class="error">Введите все данные профиля</p>';
        }
    }
} //Конец проверки данных
else {
    //ПОлучение данных из БД
    $query = "SELECT first_name, last_name, gender, birth_date, city, state, picture FROM ch5 WHERE user_id = '$user_id'";
    $data = mysqli_query($dbc, $query)
    or die('ОШИБКА ПОДКЛЮЧЕНИЯ К БД'.mysqli_error());
    $row = mysqli_fetch_array($data);
 
    if($row != NULL) {
        $first_name = $row['first_name'];
        $last_name = $row['last_name'];
        $gender = $row['gender'];
        $birth_date = $row['birth_date'];
        $city = $row['city'];
        $state = $row['state'];
        $old_picture = $row['picture'];
    }
    else {
        echo '<p>Возникла непредвиденная ошибка!</p>';
    }
}
mysqli_close($dbc);
?>
<form enctype="multipart/form-data" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
    <input type="hidden" name="MAX_FILE_SIZE" value="<?php echo MM_MAXFILESIZE; ?>" />
    <fieldset>
        <legend>Персональная информация</legend>
        <label for="firstname">Имя: </label>
        <input type="text" id="firstname" name="firstname" value="<?php if (!empty($first_name)) echo $first_name; ?>" /><br />
        <label for="lastname">Фамилия: </label>
        <input type="text" id="lastname" name="lastname" value="<?php if (!empty($last_name)) echo $last_name; ?>" /><br />
        <label for="gender">Пол: </label>
        <input type="text" id="gender" name="gender" value="<?php if (!empty($gender)) { echo $gender;} ?>" /><br />
        <label for="birth_date">Дата рождения: </label>
        <input type="text" id="birthdate" name="birth_date" value="<?php if (!empty($birth_date)) echo $birth_date; ?>" /><br />
        <label for="city">Город:</label>
        <input type="text" id="city" name="city" value="<?php if (!empty($city)) {echo $city;} ?>" /><br />
        <label for="state">Штат\область: </label>
        <input type="text" id="state" name="state" value="<?php if (!empty($state)) { echo $state;}?>" /><br />
        <input type="hidden" name="old_picture" value="<?php if (!empty($old_picture)) {echo $old_picture;} ?>" /> <br />
        <label for="new_picture">Портрет:</label>
        <input type="file" id="new_picture" name="new_picture" />
        <?php if (!empty($old_picture)) {
            echo '<img class="profile" src="' . MM_UPLOADPATH . $old_picture . '" alt="PROFILE PICTURE" />';
            }
        ?>
        <input type="submit" value="Save Profile" name="submit" />
    </fieldset>
</form>
<?php 
echo $new_picture;
echo $old_picture;
echo $new_picture_size;
echo $new_picture_type;
?>
</body>
</html>
В результате выполнения этого кода у меня ошибка:
Notice: Undefined index: new_picture in /home/e/.../editprofile.php on line 30

т.е. как я понимаю "new_picture" он не видет в бд, хотя должен брать данные из формы <input type="file" id="new_picture" name="new_picture" /> . Плюс строкой выше (29) есть такая же по сути переменная $old_picture, с которой нет таких проблем, правда ее значение передается таким образом:
<input type="hidden" name="old_picture" value="<?php if (!empty($old_picture)) {echo $old_picture;} ?>" />

И new_picture и old_picture - таких колонок нет в бд если что, и судя по книге и не должно быть (скрин бд в аттаче).
Скорее всего, так как сервер не видет значение $new_picture, то и возникает ошибка в запросе:
$query = "UPDATE ch51 SET first_name = '$first_name', last_name = '$last_name', gender = '$gender', birth_date = '$birth_date', city = '$city', state = '$state', picture = '$new_picture' WHERE user_id = '$user_id'";

где происходит передача пустого значения... Но я могу и ошибаться.

Собственно, вопросы:
1) Почему $new_picture - не присваивается значение? И что нужно, чтобы исправить это.
2) Почему не загружается/не перемещается в нужную директорию файл
3) В коде есть строка:
$result = mysqli_query($dbc, $query)
or die(mysql_errno() . ": " . mysql_error(). "\n");

Почему она не показывает ошибку в запросе? Кусок кода взят с этого или похожего форума.
Заранее спасибо неравнодушным.
Миниатюры
Undefined index и ошибка в запросе к БД (из книги Мориссона)  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.07.2016, 20:49
Ответы с готовыми решениями:

Ошибка Undefined index:
Notice: Undefined index: b_tech_id in D:\OpenServer\domains\localhost\includes\app\class\queuemanager.php on line 273 Warning: Cannot...

Ошибка Undefined index
Не понимаю в чем проблема... Сама ошибка: Notice: Undefined index: name in /storage/ssd4/051/11700051/public_html/registration.php on...

Ошибка Undefined index =(
Добрый день всем! у меня такая проблема возникла выдает ошибку! Notice: Undefined index: shpPassword in buy_result.php on line 18 bad...

2
Фрилансер
Эксперт PythonЭксперт JSЭксперт PHP
 Аватар для Azdeman
1871 / 1362 / 604
Регистрация: 12.01.2011
Сообщений: 5,470
25.07.2016, 20:57
Цитата Сообщение от Парацетомол Посмотреть сообщение
$new_picture = $_POST['new_picture'];
Файл у вас в суперглобальном массиве $_FILES, а не в $_POST. При отправке даже можете посмотреть
PHP
1
print_r($_FILES); //выведет массив ключи которого как раз и будут name,type,size вашего файла
PHP
1
$new_picture =  $_FILES['new_picture']['name'];
1
0 / 0 / 0
Регистрация: 06.07.2016
Сообщений: 12
26.07.2016, 07:56  [ТС]
Да, все верно... не внимателен был, еще в нескольких местах переменные с ошибкой написал.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.07.2016, 07:56
Помогаю со студенческими работами здесь

Ошибка Undefined index
У меня есть код php который запрашивает у глобального массив $_GET - ячейку id - но ее нету - и это нормально - но как избавиться от ошибки...

Ошибка Undefined index
Здравствуйте! Не можете подсказать, почему PHP &quot;ругается&quot; на эти 6 строк? $year = $_POST ; $month = $_POST ; $daycur = $_POST ; ...

Ошибка - Notice: Undefined index
Приветствую:) есть форма для регистрации и авторизации. Регистрация работает, а вот с авторизацией проблемка небольшая, выдает ошибки,...

Ошибка Notice: Undefined index:
Помогите пожалуйста, у меня форма обратной связи выдает вот такие ошибки: Notice: Undefined index: email in...

ошибка Notice: Undefined index
поменял на серваке версию php после чего появились такие вот сообщения Notice: Undefined index: login_1 in E:\server\ck\www\index.php...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru