Отправка userid
через скрытое поле ввода в форме - ОГРОМНАЯ угроза безопасности.Любой может изменить это значение, например, с помощью инспектора Chrome или FireBug.Когда кто-то входит в систему;Вы должны хранить как минимум их user_id в сеансе.Вы также можете хранить больше информации в сеансе, чтобы вам не приходилось запрашивать базу данных при каждом запросе, например, отображать имя пользователя вошедшего в систему пользователя где-то на странице.
Я не знаю, как выобрабатывать входы в систему на данный момент, и я не знаю, как заполняется $loggedInUser
, но это должна быть переменная сеанса, например $_SESSION['user']['id']
.Таким образом, вы всегда будете знать, кто пользователь, не отправляя данные через форму;это настоящий запрет.
Убедитесь, что в верхней части каждой страницы стоит session_start()
, в идеале вы должны использовать шаблоны, и вам нужно всего лишь добавить session_start()
в начало index.php
.
И
$sql= "
INSERT INTO stories (author, author_id, story_name, story)
VALUES ('$author', '$author_id','$story_name', '$story')
";
Должно быть по крайней мере
$sql= "
INSERT INTO stories (author, author_id, story_name, story)
VALUES ('". $author ."', '". $author_id ."', '". $story_name ."', '". $story ."')
";
И я бы лично порекомендовал:
$q = "
INSERT INTO stories
SET author_id = ". $_SESSION['user']['id'] ." # This is an integer (I assume) so don't use apostrophe's
, story_name = '". mysql_real_escape_string($_POST['story_name']) ."'
, story = '". mysql_real_escape_string($_POST['story']) ."'
";
Удалить поле author
из таблицы.Просто используйте author_id
для ссылки на таблицу, в противном случае вы будете хранить дубликаты данных, и когда кто-то изменит свое имя автора, имя автора в историях будет устаревшим / неправильным / устаревшим.