Я создаю сайт, на котором пользователи создают профили и проекты (стартапы, исследования, изобретения и т. Д.), А также делятся ими и общаются с другими для ценного обмена.
Я начал сайт некоторое время назад с другом, и с тех пор мы перестали работать над ним вместе. Он написал все php, а я сделал весь интерфейс. Сейчас я занимаюсь обоими, и концепция немного изменилась. Это означает, что я адаптирую много кода, который он уже написал.
Когда пользователи публикуют новый проект, существует определенная справочная информация, которую необходимо опубликовать в нем. Поэтому, когда они создают новое сообщение, я хочу сохранить их идентификатор. Таким образом, когда отображается их сообщение, оно также показывает соответствующую информацию профиля пользователя.
Как правильно хранить (и / или POST) их идентификатор пользователя при отправке формы?
(Я извиняюсь, я довольно плохо знаком с PHP. Делая все возможное с языком.)
Вот часть кода (не все нужно, я знаю)
<?php
require_once("../includes/config.php");
require_once("../assets/classes/projects.php");
$x = new projects();
if(isset($_SESSION['username']))
{
$_SESSION['logged_in'] = 1;
}
$dbh = config::get();
$checkCountQ = $dbh->prepare("SELECT cork_user_notes.tf_index FROM `cork_user_notes` INNER JOIN `cork_users` ON cork_user_notes.tf_index = cork_users.tf_index WHERE cork_users.tf_username = :un");
$checkCountQ->bindParam(":un", $_GET['user']);
$checkCountQ->execute();
$checkCountR = $checkCountQ->rowCount();
?>
<form action="addProjects.php" method="POST">
<tbody>
<tr>
<td>
Enter your project name
</td>
<td>
<input type="text" name="title" placeholder="project name">
</td>
</tr>
<tr>
<td>
Enter your project's category
</td>
<td>
<select name="category">
<option value="1">Startup</option>
<option value="2">Software</option>
<option value="3">Hardware</option>
<option value="4">Research</option>
<option value="5">Discovery</option>
<option value="6">Invention</option>
</select>
</td>
</tr>
Разрешение пользователю изменять свои user_id
не безопасно для ваших записей, потому что пользователь может выдавать себя за кого-то другого. Здесь нет user_id
в вашем коде только их username
который, если уникален, может работать так же хорошо. Чтобы сделать это эффективно, может быть лучше передать значение в скрытом поле формы в дополнение к хешированному полю, которое содержит значение, известное только вам, для проверки на другой стороне:
<?php
print "<input type=\"hidden\" name=\"uid\" value=\"".$_SESSION['username']."\">";
print "<input type=\"hidden\" name=\"uidh\"value=\"".md5($_SESSION['username']."Something that only you know")."\">";
?>
С другой стороны вы проверяете хеш.
if (!empty($_POST['uid'])&&!empty($_POST['uidh'])
&&$_POST['uid']==md5($_POST['uidh']."Something that only you know")){
//then they're okay
} else {
//fail spectacularly at their attempt
}
Если ваш сервер настроен для обработки сеансов с cookie-файлами, cookie-файлы небезопасны и им нельзя доверять.
Для проверки сеансов вы хотели бы хэшировать данные с уникальным ключом, известным только вам.
Почему значение идентификатора пользователя должно быть отправлено из формы вообще?
У вас есть аутентифицированный пользователь, у вас есть идентификатор пользователя на стороне сервера в какой-либо форме или стиле (возможно, сохраненный в сеансе или что-то подобное). Используйте это при создании проекта и сделайте не принять предоставленный пользователем идентификатор пользователя.
Два способа сделать это.
Вы вводите идентификатор пользователя, когда пользователь входит в систему, как это
$_SESSION['userid'] = $id;
который вы можете впоследствии использовать в любом месте на сайте, как это может быть при вставке
создать скрытое поле в форме для хранения идентификатора пользователя
<input type="hidden" name="id" value="<?php echo $_SESSION['userid']; ?>" />
Вы можете получить это с $_POST['id']
когда кнопка отправки isset.