В предыдущей статье мы создали форму авторизации и страницу с ограниченным доступом, на который мы выводили информацию о пользователе. Прошлый пример показывал, как можно получать информацию из база данных. В этой же статья я хочу показать, как можно создавать нового пользователя и как редактировать данные уже существующего пользователя.
Приступим, начнем с постановки задачи. Необходимо создать страницу с ограниченным доступом, на которой авторизованный пользователь сможет отредактировать свои данные – имя и фамилию. А также необходимо создать страницу, на которой, авторизованный пользователь сможет создать нового пользователя.
Задача ясна, начнем ее решать. Для начала давайте сделаем страницу, где можно будет отредактировать данные уже существующего пользователя. Для этих целей давайте создадим скрипт user_update.php. Ниже находится его код с подробными комментариями.
<?php session_start(); // константы 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'); //проверяем, авторизовал ли пользователь, // если нет, то редиректим его на авторизацию if(isset($_SESSION['login'])){ /* * Если был сабмит формы, * то проверяем данные и если все хорошо, * то записываем обновленные данные в базу данных */ // ===>>> if($_POST["user_update"]){ // тут нужно сделать проверку данных // я ее делать не буду чтобы не усложнять скрипт // а сразу сделаю обновление записи базе данных $sql = mysql_query(" UPDATE `user` SET `first_name`='".$_POST['first_name']."', `last_name`='".$_POST['last_name']."', `login`='".$_POST['login']."', `password`='".MD5($_POST['password'])."' WHERE `login`='".$_SESSION['login']."' LIMIT 1; ") or die(mysql_error()); $_SESSION['login'] = $_POST['login']; } // <<<=== // получаем из базы данных всю информацию о пользователе $sql = mysql_query(" SELECT * FROM `user` WHERE `login` = '".$_SESSION['login']."'; ") or die(mysql_error()); $row = mysql_fetch_assoc($sql); ?> <form name="user_frm" method="POST" action="/user_update.php"> <table> <tr> <td>id</td> <td>first_name</td> <td>last_name</td> <td>login</td> <td>password</td> </tr> <tr> <td><?php echo $row['id']; ?></td> <td><input type="text" value="<?php echo $row['first_name']; ?>" name="first_name"></td> <td><input type="text" value="<?php echo $row['last_name']; ?>" name="last_name"></td> <td><input type="text" value="<?php echo $row['login']; ?>" name="login"></td> <td><input type="text" value="" name="password"></td> <!--Выводить пароль, который храниться в бд нет смысла, он захеширован--> </tr> </table> <input type="submit" value="update" name="user_update"> </form> <?php }else{ header("Location: /login.php");exit; } ?>
Теперь давайте разберемся с созданием нового пользователя, для этого создадим скрипт user_create.php с вот таким кодом:
<?php session_start(); // константы 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'); //проверяем, авторизовал ли пользователь, // если нет, то редиректим его на авторизацию if(isset($_SESSION['login'])){ /* * Если был сабмит формы, * то проверяем данные и если все хорошо, * то записываем данные в базу данных */ // ===>>> if($_POST["user_create"]){ // тут нужно сделать проверку данных // я ее делать не буду чтобы не усложнять скрипт // а сразу сделаю запись в базе данных $sql = mysql_query(" INSERT INTO `user` (`first_name`, `last_name`, `login`, `password`) VALUES ('".$_POST['first_name']."', '".$_POST['last_name']."', '".$_POST['login']."', '".MD5($_POST['password'])."'); ") or die(mysql_error()); if($sql) echo "User created!"; // если все прошло хорошо и пользователь создан } // <<<=== ?> <form name="user_frm" method="POST" action="/user_create.php"> <table> <tr> <td>id</td> <td>first_name</td> <td>last_name</td> <td>login</td> <td>password</td> </tr> <tr> <td><?php echo $row['id']; ?></td> <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> </tr> </table> <input type="submit" value="create" name="user_create"> </form> <?php }else{ header("Location: /login.php");exit; } ?>
Вот и все, задача оказалась простой и реализовать ее можно довольно быстро!
Хочу обратить внимание на то, что во всех скриптах, рассматривается вариант того, что данные будут всегда приходить корректными. В реальной ситуации такого не бывает, поэтому не забудьте добавить проверки полученных из формы данных.
Извините, но данные о пользователе не записываются в БД! Прошу помочь мне советом)
Скрипт рабочий — я проверял. А соединение с бд есть?
Ну хорошо, создали мы формы авторизации, можем создавать , редактировать пользователей, а с практической точки зрения как приконектить эту авторизацию к сайту, чтобы при запросе любой странице сайта мы попадали сначала на форму авторизации??
Перед отображением страницы нужно делать проверку — авторизован пользователь или нет, если не авторизован, то кидать на авторизацию.
Привет! Почему в т.ч. появляется предупреждение: Предупреждение: если же нет() [функция.сессия-старт]: не удается отправить сессии кэш ограничитель — заголовки уже отправлены (выход начался в Y:\home\site1\www\user_update.php:1) в Y:\home\site1\www\user_update.php на линии 2
Привет! Проверьте, чтобы перед вызовом session_start(); не задавались ни какие заголовки