У меня есть сайт, где пользователи могут зарегистрироваться, а затем войти в систему со своей регистрационной информацией, которая выводит их на страницу с формой на ней, и я хочу иметь возможность предварительно заполнить определенные части формы данными с момента их регистрации / входа в систему.
Я предположил, что поскольку функция входа в систему использует данные сеанса, я мог бы найти их адрес электронной почты и идентифицировать строку по указанному адресу электронной почты, а затем извлечь данные в полях, связанных с этой строкой. Я не могу найти пример того, как это работает.
Как только я смогу получить данные и заполнить поля, цель состоит в том, чтобы иметь 2 кнопки; одна для сохранения и обновления базы данных, чтобы пользователь мог позже вернуться и заполнить форму, а другая кнопка становится активной после того, как все поля заполнены, а затем отправляет данные для печати на странице подтверждения, а также добавляет значение в базу данных. поле, указывающее, что форма была заполнена, поэтому, когда пользователь снова войдет в систему, он увидит, что форма была заполнена и больше не может быть отправлена.
Я попытался заполнить одно из полей в качестве теста, добавив в него строку значения, но я не могу найти пример где-нибудь, чтобы показать, как это работает. Вот моя форма:
<div style="float:left; width:450px;">
<div style="float:left; padding-right:7px; padding-bottom:7px; width:35px;"> </div>
<div style="float:left; padding-right:7px; padding-bottom:7px; width:187px;">SET PART #</div>
<div style="float:left; padding-right:7px; padding-bottom:7px; width:192px;">INSTALL DATE</div>
<div style="float:left; padding-right:7px; padding-bottom:7px; width:35px;">1.</div>
<div style="float:left; padding-right:7px; padding-bottom:7px; width:187px;"><input type="text" id="part1" value="<?php echo $_GET['first_name'];?>"> </div>
<div style="float:left; padding-right:7px; padding-bottom:7px; width:192px;"><input type="text" id="part1-install-date"></div>
<div style="float:left; padding-right:7px; padding-bottom:7px; width:35px;">2.</div>
<div style="float:left; padding-right:7px; padding-bottom:7px; width:187px;"><input type="text" id="part2"></div>
<div style="float:left; padding-right:7px; padding-bottom:7px; width:192px;"><input type="text" id="part2-install-date"></div>
<div style="float:left; padding-right:7px; padding-bottom:7px; width:35px;">3.</div>
<div style="float:left; padding-right:7px; padding-bottom:7px; width:187px;"><input type="text" id="part3"></div>
<div style="float:left; padding-right:7px; padding-bottom:7px; width:192px;"><input type="text" id="part3-install-date"></div>
<div style="float:left; padding-right:7px; padding-bottom:7px; width:35px;">4.</div>
<div style="float:left; padding-right:7px; padding-bottom:7px; width:187px;"><input type="text" id="part4"></div>
<div style="float:left; padding-right:7px; padding-bottom:7px; width:192px;"><input type="text" id="part4-install-date"></div>
<div style="float:left; padding-right:7px; padding-bottom:7px; width:35px;">5.</div>
<div style="float:left; padding-right:7px; padding-bottom:7px; width:187px;"><input type="text" id="part5"></div>
<div style="float:left; padding-right:7px; padding-bottom:7px; width:192px;"><input type="text" id="part5-install-date"></div>
<div style="float:left; padding-right:7px; padding-bottom:7px; width:35px;">6.</div>
<div style="float:left; padding-right:7px; padding-bottom:7px; width:187px;"><input type="text" id="part6"></div>
<div style="float:left; padding-right:7px; padding-bottom:7px; width:192px;"><input type="text" id="part6-install-date"></div>
<div style="float:left; padding-right:7px; padding-bottom:7px; width:35px;">7.</div>
<div style="float:left; padding-right:7px; padding-bottom:7px; width:187px;"><input type="text" id="part7"></div>
<div style="float:left; padding-right:7px; padding-bottom:7px; width:192px;"><input type="text" id="part7-install-date"></div>
<div style="float:left; padding-right:7px; padding-bottom:7px; width:35px;">8.</div>
<div style="float:left; padding-right:7px; padding-bottom:7px; width:187px;"><input type="text" id="part8"></div>
<div style="float:left; padding-right:7px; padding-bottom:7px; width:192px;"><input type="text" id="part8-install-date"></div>
<div style="float:left; padding-right:7px; padding-bottom:7px; width:35px;">9.</div>
<div style="float:left; padding-right:7px; padding-bottom:7px; width:187px;"><input type="text" id="part9"></div>
<div style="float:left; padding-right:7px; padding-bottom:7px; width:192px;"><input type="text" id="part9-install-date"></div>
<div style="float:left; padding-right:7px; padding-bottom:7px; width:35px;">10.</div>
<div style="float:left; padding-right:7px; padding-bottom:7px; width:187px;"><input type="text" id="part10"></div>
<div style="float:left; padding-right:7px; padding-bottom:7px; width:192px;"><input type="text" id="part10-install-date"></div>
<div style="float:left; padding-right:7px; padding-bottom:7px; width:35px;"> </div>
<div style="float:left; padding-right:7px; padding-bottom:7px; width:187px;"><input type="submit" name="save" value="Save"></div>
<div style="float:left; padding-right:7px; padding-bottom:7px; width:192px;"><input class="send" id="register" type="submit" value="Submit" disabled="disabled"></div>
</form></div>
Обновить:
Я попробовал этот метод:
<?php
if(isset($_SESSION)){
$userEmail=$_SESSION['email'];
$userData = fetch_assoc(query("SELECT * FROM login WHERE email = '$userEmail'"));
}
$link = mysqli_connect('localhost','username','password','database'); //TODO: your connection here
function query($sql) {
return mysqli_query($link, $sql);
}
function fetch_assoc($query) {
return mysqli_fetch_assoc($query);
}
?>
и добавил это значение к одному из входных данных формы:
value="<?= $userData['first_name'] ?>">
и теперь я получаю 2 ошибки:
Предупреждение: mysqli_query () ожидает, что параметр 1 будет mysqli, значение NULL указано в этой строке:
return mysqli_query($link, $sql);
и другая ошибка:
Предупреждение: mysqli_fetch_assoc () ожидает, что параметр 1 будет иметь значение mysqli_result, значение NULL указано в этой строке:
return mysqli_fetch_assoc($query);
Если у вас уже есть база данных MySQL и она заполнена данными, я бы порекомендовал прочитать о PHP PDO:
http://php.net/manual/en/book.pdo.php
Более конкретно, посмотрите, как подключиться к вашей базе данных:
http://php.net/manual/en/pdo.connections.php
И после того, как вы настроите соединение, запросите информацию в вашей базе данных:
http://php.net/manual/en/pdo.prepared-statements.php
Особенно посмотрите на пример № 3.
Пример получения вашего пользователя:
$user = <INSERT USER>;
$pass = <INSERT PASS>;
$dbh = new PDO('mysql:host=localhost;dbname=<DATABASE NAME>', $user, $pass);
$stmt = $dbh->prepare("SELECT * FROM login WHERE email = :userEmail");
$stmt->bindParam(':userEmail', $userEmail);
if ($stmt->execute()) {
$user = $stmt->fetch(PDO::FETCH_ASSOC);
// now you can get your user details, for example, $user['username'] or however you have it set up in your database
}
Это не может быть добавлено в комментарии.
Чтобы ответить на вашу часть сессии для данных.
в вашем логине:
$_SESSION['email']=$_POST['email']; //make sure not to assign any weird characters.. (SQL-INJECTION)
и для получения ваших данных:
if(isset($_SESSION)){
$userEmail=$_SESSION['email'];
echo $userEmail;
//and for selecting ofc you would use the value..
}
Прежде всего вам нужно использовать поле (или поля) в качестве первичного ключа в вашей базе данных. Вы упоминаете, что вы можете использовать поле электронной почты для этого, но убедитесь, что поле установлено как уникальное.
Затем вы можете записать значение сеанса электронной почты и получить базу данных для остальных данных:
if(isset($_SESSION)){
$userEmail=$_SESSION['email'];
$userData = fetch_assoc(query("SELECT * FROM your_table WHERE email = '$userEmail'"));
}
Обратите внимание, что вы должны определить fetch_assoc
а также query
методы в зависимости от вашего способа подключения к базе данных. Что-то вроде:
global $link = mysqli_connect('localhost','username','password','database'); //TODO: your connection here
function query($sql) {
return mysqli_query($link, $sql);
}
function fetch_assoc($query) {
return mysqli_fetch_assoc($query);
}
Получив это, вы добавляете в каждый вход соответствующее значение:
<input type="text" id="part2" value="<?= $userData['lastName'] ?>"/>
И так далее.
Также рассмотрите возможность использования классов вместо повторения кода в стилях.