В этой статье я хочу осветить такую тему как «загрузка и сохранение» файла (в нашем случае изображения) на сервере. Тема нужная и не редко встречается в процессе разработки.
Итак, приступим к постановке задачи: Необходимо создать две страницы, на одно будет присутствовать возможность создавать пользователя, на другой странице будет выведена информация о выбранном пользователе. Пользователь должен иметь имя, фамилию, логин, пароль и аватар(картинку).
В общем, тут все просто и понятно, практически все это мы уже делали в предыдущих статьях, единственное новшество – это картинка, которая должно храниться на сервере, и как-то привязана к конкретному пользователю. Проблема с картинкой решается очень просто, в форму которая, служит для создания пользователя, мы добавим одно поле, оно будет отвечать за загрузку файлов – это обыкновенный input, только с типом file. После того как форма будет заполнена и данные ее будут отправлены, мы сохраним картинку в какую-нибудь папку, а путь к картинке запишем в базу данных в таблицу с данными о пользователе.
Сначала давайте создадим таблицу в базе данных, назовем ее user, и пусть в ней будут следующие поля:
Id – первичный ключ
First_name – имя пользователя
Last_name – фамилия пользователя
Login –логин
Password – пароль
Img_file – поля для хранения пути до картинки
Ниже находится sql патч, который создаст нужную таблицу.
CREATE TABLE `user` ( `id` INT(10) NOT NULL AUTO_INCREMENT, `first_name` VARCHAR(255) NULL DEFAULT NULL, `last_name` VARCHAR(255) NULL DEFAULT NULL, `login` VARCHAR(255) NULL DEFAULT NULL, `password` VARCHAR(255) NULL DEFAULT NULL, `img_file` VARCHAR(255) NULL DEFAULT NULL, PRIMARY KEY (`id`) ) COLLATE='utf8_general_ci' ENGINE=InnoDB;
Таблица готова, можно приступать к разработке. Как и в предыдущей статье, давайте создадим файл db_connection.php, который будет отвечать за подключение к базе данных. Код этого файла:
<?php define("HOST", "localhost"); define("USER", "root"); define("PASSWORD", ""); define("DB_NAME", "mydb"); $db_connect = mysql_connect(HOST, USER, PASSWORD, TRUE); mysql_selectdb(DB_NAME,$db_connect); mysql_set_charset('utf8'); ?>
Теперь давайте создадим файл user_create.php, он будет отвечать за создание пользователя. Ниже исходный код этого фала:
<?php include("/db_connection.php"); // подключаемся с бд /* * Если был сабмит формы, * то проверяем данные и если все хорошо, * то записываем данные в базу данных */ $errorSubmit = false; // контейнер для ошибок if($_POST["user_create"]){ // тут нужно сделать проверку данных // я ее делать не буду чтобы не усложнять скрипт // а сразу сделаю запись в базе данных // единственной проверкой у нас будет, проверка расширения картинки if(isset($_FILES['img_file']) && $_FILES['img_file'] !=""){ // передали ли нам вообще файл или нет $whitelist = array(".gif", ".jpeg", ".png", ".jpg", ".bmp"); // список расширений, доступных для нашей аватарки // проверяем расширение файла //===>>> $error = true; //флаг, отвечающий за ошибку в расширении файла foreach ($whitelist as $item) { if(preg_match("/$item\$/i",$_FILES['img_file']['name'])) $error = false; } //<<<=== if($error){ // если формат не корректный, заполняем контейнер для ошибок $errorSubmit = 'Не верный формат картинки!'; }else{ // если формат корректный, то сохраняем файл // и все остальную информацию о пользователе // Файл сохранится в папку /files/ move_uploaded_file($_FILES["img_file"]["tmp_name"], "/files/".$_FILES["img_file"]["name"]); $path_file = "/files/".$_FILES["img_file"]["name"]; $sql = mysql_query(" INSERT INTO `user` (`first_name`, `last_name`, `login`, `password`, `img_file`) VALUES ('".$_POST['first_name']."', '".$_POST['last_name']."', '".$_POST['login']."', '".MD5($_POST['password'])."', '".$path_file."'); ") or die(mysql_error()); if($sql) echo "User created!"; // если все прошло хорошо и пользователь создан } // если картинка нам подходит сохраняем ее // и все запись о пользователе if(!$errorSubmit){ } } } ?> <form name="user_frm" method="POST" action="/user_create.php" enctype="multipart/form-data"> <table> <tr> <td>first_name</td> <td>last_name</td> <td>login</td> <td>password</td> <td>image file</td> </tr> <tr> <td><input type="text" value="" name="first_name"></td> <td><input type="text" value="" name="last_name"></td> <td><input type="text" value="" name="login"></td> <td><input type="text" value="" name="password"></td> <td><input type="file" value="" name="img_file"></td> </tr> </table> <input type="submit" value="create" name="user_create"> </form>
Единственное, что хочу добавить к коду это то, что папка files должна быть создана заранее, а также в атрибутах должно быть разрешено делать запись в эту папку. Вот и все, по сути задача решена, осталось только сделать вывод того что сохранилось в базу данных. Для этого создадим файл index.php. Исходный код файла:
<?php include("/db_connection.php"); // подключаемся с бд // получаем данные о пользователе по его id // id передадим в урле /index.php?id=1 // только перед испальзованием id в запросе, его нужно обязательно проверить $sql = mysql_query(" SELECT * FROM `user` WHERE `id` = ".$_GET['id']."; ") or die(mysql_error()); $row = mysql_fetch_assoc($sql); ?> <h1><?php echo $row['first_name']; ?></h1> <h1><?php echo $row['last_name']; ?></h1> <h1><?php echo $row['login']; ?></h1> <img src="<?php echo $row['img_file']; ?>"/>
На этом статья закончена. Исходник можно скачать тут.
помогите ошибка No database selected
Видимо, Вы не подключили файл с конфигурациями бд.
Попробуйте перенести код из файла db_connection.php в тот же скрипт. в котором у Вас находится весь код
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near » at line 2
выскакивает такая ошибка
Видимо где-то ошибка в SQL запросе, покажите запрос в котором случается ошибка
там просто после всех манипуляций надо в php фаеле с таким кодам
<img src=""/>
В поле для ввода ссылок, ввести путь до этого файла и в конце добавить Ваш сайт/index.php?id=1 но там надо под каким номером в БД попало под тем и писать например Ваш сайт/index.php?id=2…3 … и тп. и ток тогда появиться и имя пользователя и логин и картинка
не удобно и не доработана
Скачал исходники, ничего там не менял, просто запустил файл Index.php в Денвере. Показало ошибку: No database selected
Если в исходниках ошибка, значит автор должен её исправить.
Нехорошо, если люди тратят своё время на изучение неработающего скрипта…