Как сохранить (и / или POST) идентификатор пользователя, когда его форма POSTed?

Я создаю сайт, на котором пользователи создают профили и проекты (стартапы, исследования, изобретения и т. Д.), А также делятся ими и общаются с другими для ценного обмена.

Я начал сайт некоторое время назад с другом, и с тех пор мы перестали работать над ним вместе. Он написал все 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>

0

Решение

Разрешение пользователю изменять свои 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-файлы небезопасны и им нельзя доверять.

Для проверки сеансов вы хотели бы хэшировать данные с уникальным ключом, известным только вам.

0

Другие решения

Почему значение идентификатора пользователя должно быть отправлено из формы вообще?

У вас есть аутентифицированный пользователь, у вас есть идентификатор пользователя на стороне сервера в какой-либо форме или стиле (возможно, сохраненный в сеансе или что-то подобное). Используйте это при создании проекта и сделайте не принять предоставленный пользователем идентификатор пользователя.

0

Два способа сделать это.

  1. Вы вводите идентификатор пользователя, когда пользователь входит в систему, как это

     $_SESSION['userid'] = $id;
    

который вы можете впоследствии использовать в любом месте на сайте, как это может быть при вставке

  1. создать скрытое поле в форме для хранения идентификатора пользователя

    <input type="hidden" name="id" value="<?php echo $_SESSION['userid']; ?>" />
    

Вы можете получить это с $_POST['id'] когда кнопка отправки isset.

-1
По вопросам рекламы [email protected]