Не определяется id редактируемой формы
Есть страница с записями (index.php). Также там есть кнопка, которая переводит на страницу редактирования с формой (update.php). Проблема в том, что при выводе через print_r($row['id]) оказалось, что там несколько форм, которые накладываются друг на друга. И чем больше пользователей, тем, соответственно, больше этих форм. Как мне получить id именно той записи, которую я хочу редактировать? Знаю, что есть метод $_GET['id], только не понимаю как это записать в виде кода
<?php
session_start();
if (isset($_SESSION['user'])) {
require('../layout/header_authed.php');
} else {
require('../layout/header.php');
}
require($_SERVER['DOCUMENT_ROOT'] . '/controllers/Services.php');
$db = new Services();
?>
<?php
if (isset($_SESSION['user'])) {
if ($_SESSION['user']->role_id <= 2) { ?>
<div class="buttons">
<div class="pages">
<div class="d-flex">
<ul class="data">
<li><a class="btn el2" id="add_button" href="/views/services/create.php">Добавить</a></li>
</ul>
</div>
</div>
</div>
<?php } ?>
<?php } ?>
<?php
$data = $db->getService();
foreach ($data as $key => $row) {
?>
<div class="card m-3 shadow" id="cards" style="border-radius: 8px">
<input name="id" value="<?= $row['id'] ?>" hidden>
<div class="card-body">
<h5 class="card-title" style="color: #a7d4fd"><?= $row['name']; ?></h5>
<div class="m-1">
<span class="card-subtitle" style="color: #83c4ff">Тип: </span>
<span class="card-text"><?= $row['type']; ?></span>
</div>
<div class="m-1">
<span class="card-subtitle" style="color: #83c4ff">Стоимость: </span>
<span class="card-text"><?= $row['price']; ?></span>
</div>
<div class="wrapper mt-3">
<?php
if (isset($_SESSION['user'])) {
if ($_SESSION['user']->role_id <= 2) { ?>
<div>
<form action="../../views/services/update.php?id=<?= $row['id']?>" method="post">
<label>
<button class="btn" type="submit" id="submit">Изменить</button>
</label>
</form>
</div>
<div>
<form action="../../middleware/service/deleteService.php" method="post">
<label>
<input name="id" value="<?php echo $row['id']; ?>" type="text" hidden required>
<button class="btn" type="submit" id="submit"
onclick="return confirm('Вы действительно хотите удалить данного пользователя?');">
Удалить
</button>
</label>
</form>
</div>
<?php } ?>
<?php } ?>
</div>
</div>
</div>
<?php } ?>
users/update.php:
<?php
session_start();
if (isset($_SESSION['user'])) {
if ($_SESSION['user']->role_id > 1) {
header('Location:../../index.php');
}
require('../../views/layout/header_authed.php');
} else {
require('../../views/layout/header.php');
}
require($_SERVER['DOCUMENT_ROOT'] . '/controllers/User.php');
$db = new User();
$data = $db->getUser();
foreach ($data as $row) { ?>
<pre>
<?php print_r($row['id']) ?>
</pre>
<div class="container mt-5" style="display: flex; align-items: start; justify-content: center;">
<form action="../../middleware/user/updateUser.php"
method="post"
class="d-flex flex-column justify-content-center align-items-center mt-3"
style="background: #2B5477; border-radius: 15px; border: 2px solid #a7d4fd;">
<input name="id" value="<?= $row['id'] ?>" hidden>
<h4 style="color:#abd7ff; margin: auto; padding: 25px">Изменение пользователя №<?= $row['id'] ?>: </h4>
<label class="mb-3" style="color: #abd7ff;">Имя пользователя:
<input id="type"
name="username"
type="search"
size="25"
class="form-control mt-2"
placeholder="Логин"
value="<?= $row['username'] ?>"
pattern="[a-zA-Z0-9]+$" required>
</label>
<label class="mb-5" style="color: #abd7ff;">Пароль:
<input id="type"
name="password"
type="search"
size="25"
class="form-control mt-2"
placeholder="Пароль"
value="<?= $row['password'] ?>"
pattern="[a-zA-Z0-9]+$" required>
</label>
<p>
<label for="role">
<select id="role" name="role_id"
style="border-radius: 8px; height: 40px; width: 206px; text-align: center;">
<option value="1">Администратор</option>
<option value="2?>">Сотрудник</option>
<option value="3">Пользователь</option>
</select>
</label>
</p>
<div class="mb-4 mt-3">
<button class="btn" id="submit" type="submit"
onclick="return confirm('Вы действительно хотите изменить данный сервис ? ');">Изменить
</button>
</div>
</form>
</div>
<?php } ?>
P.S.: Думаю, лучше будет добавить код контроллера User.php, чтобы легче было определить источник проблемы (к тому же, именно там лежит функция getUser().
Вот код:
<?php
require('DB.php');
class User extends DB
{
public function getUser()
{
return $this->DBAll('SELECT users.id, username, password, role_id, role_name from users, roles WHERE (role_id = roles.id) ORDER BY id ');
}
public function createUser($request)
{
$req = json_decode($request);
$username = $req->username;
$password = $req->password;
$role_id = $req->role_id;
$connect = $this->connect();
try {
$connect->beginTransaction();
$sql = $connect->prepare('INSERT INTO serving_comp_tech.users (username,password, role_id) values (:username,:password, :role_id)');
$sql->execute([
'username' => $username,
'password' => $password,
'role_id' => $role_id,
]);
$connect->commit();
return json_encode([
'message' => 'Пользователь добавлен'
]);
} catch (PDOException $e) {
$connect->rollBack();
return json_encode([
'message' => $e->getMessage()
]);
}
}
public function updateUser($request)
{
$req = json_decode($request);
$id = $req->id;
$username = $req->username;
$password = $req->password;
$role_id = $req->role_id;
$connect = $this->connect();
try {
$connect->beginTransaction();
$connect->exec("UPDATE users SET username='{$username}', password='{$password}', role_id='{$role_id}' WHERE id='{$id}'");
$connect->commit();
return json_encode([
'message' => 'Пользователь обновлён'
]);
} catch (PDOException $e) {
$connect->rollBack();
return json_encode([
'message' => $e->getMessage()
]);
}
}
public function deleteUser($request)
{
$req = json_decode($request);
return $this->transaction('DELETE from users where id=' . $req->id,
'Пользователь удален');
}
}
Ответы (1 шт):
Всё дело в том, что ты сам вызываешь все записи из БД вот здесь
foreach ($data as $row) { ?>
<pre>
<?php print_r($row['id']) ?>
</pre>
Попробуй получить id который тебе нужен для поиска и искать конкретно его.
Например: $id = $_GET['id'] и в цикле уже print_r($row[$id]).
Или просто поменять <?php print_r($row['id'])?> на <?php print_r($row[$_GET['id'])?> .
P.s. если не получится то у обращения к индексу $row попробуй поменять скобки на круглые
P.p.s. А можно вообще когда получаешь инфу из бд брать только нужную тебе запись, так будет оптимальнее всего
$data = $db->whereIn('id', [$_GET['id'])->get();
