0 / 0 / 0
Регистрация: 06.07.2016
Сообщений: 12
1

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

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

Author24 — интернет-сервис помощи студентам
Парни, подскажите в чем может быть проблема. Данный код взят и частично изменен из книги Мориссона "Изучаем 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.07.2016, 20:49
Ответы с готовыми решениями:

Ошибка Undefined index:
Notice: Undefined index: b_tech_id in...

Ошибка Undefined index
Не понимаю в чем проблема... Сама ошибка: Notice: Undefined index: name in...

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

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

2
Фрилансер
Эксперт JSЭксперт HTML/CSSЭксперт PHP
1846 / 1342 / 599
Регистрация: 12.01.2011
Сообщений: 5,432
25.07.2016, 20:57 2
Цитата Сообщение от Парацетомол Посмотреть сообщение
$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  [ТС] 3
Да, все верно... не внимателен был, еще в нескольких местах переменные с ошибкой написал.
0
26.07.2016, 07:56
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.07.2016, 07:56
Помогаю со студенческими работами здесь

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

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

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

ошибка Notice: Undefined index
поменял на серваке версию php после чего появились такие вот сообщения Notice: Undefined index:...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru