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


(3 оценок, среднее: 3,67 из 5)
помогите ошибка 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
Если в исходниках ошибка, значит автор должен её исправить.
Нехорошо, если люди тратят своё время на изучение неработающего скрипта…