Простой пример работы с базой данный в php. Часть 4. Аватар пользователя

В этой статье я хочу осветить такую тему как «загрузка и сохранение» файла (в нашем случае изображения) на сервере. Тема нужная и не редко встречается в процессе разработки.
Итак, приступим к постановке задачи: Необходимо создать две страницы, на одно будет присутствовать возможность создавать пользователя, на другой странице будет выведена информация о выбранном пользователе. Пользователь должен иметь имя, фамилию, логин, пароль и аватар(картинку).

В общем, тут все просто и понятно, практически все это мы уже делали в предыдущих статьях, единственное новшество – это картинка, которая должно храниться на сервере, и как-то привязана к конкретному пользователю. Проблема с картинкой решается очень просто, в форму которая, служит для создания пользователя, мы добавим одно поле, оно будет отвечать за загрузку файлов – это обыкновенный 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']; ?>"/>

На этом статья закончена. Исходник можно скачать тут.

Рассказать друзьям:


Простой пример работы с базой данный в php. Часть 4. Аватар пользователя: 6 комментариев

    1. Видимо, Вы не подключили файл с конфигурациями бд.
      Попробуйте перенести код из файла db_connection.php в тот же скрипт. в котором у Вас находится весь код

  1. 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
    выскакивает такая ошибка

    1. Видимо где-то ошибка в SQL запросе, покажите запрос в котором случается ошибка

  2. там просто после всех манипуляций надо в php фаеле с таким кодам

    <img src=""/>

    В поле для ввода ссылок, ввести путь до этого файла и в конце добавить Ваш сайт/index.php?id=1 но там надо под каким номером в БД попало под тем и писать например Ваш сайт/index.php?id=2…3 … и тп. и ток тогда появиться и имя пользователя и логин и картинка
    не удобно и не доработана

  3. Скачал исходники, ничего там не менял, просто запустил файл Index.php в Денвере. Показало ошибку: No database selected
    Если в исходниках ошибка, значит автор должен её исправить.
    Нехорошо, если люди тратят своё время на изучение неработающего скрипта…

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*