mysql — кнопка «Удалить» для удаления переполнения стека записей пользователя

Приведенный ниже код находится в одном файле с именем «useraccount.php» на моем веб-сайте. В настоящее время эта страница имеет форму для входа в систему администратора, чтобы добавить новую учетную запись пользователя, а также таблицу ниже, в которой отображаются существующие учетные записи, уже находящиеся в базе данных. Я хочу добавить кнопку «Удалить» для каждой существующей учетной записи и пробовал различные способы ее включения, но пока не нашел решения, которое работает. Если кто-то может поделиться со мной своим опытом, я был бы очень признателен. Мне нужно знать, как настроить кнопку для переноса переменной номера строки базы данных, чтобы php мог распознать, какую строку удалить, а также где и как безопасно выполнить запрос на удаление в php. Заметки в коде показывают мою частичную попытку.

<?php

require("connect.php");

if(empty($_SESSION['user']) || empty($_SESSION['adminaccess']))
{
header("Location: login.php");
die("Redirecting to login.php");
}

//BEGIN DATA FETCHING TO DISPLAY CURRENT USERS
$query = "SELECT
id,
username,
display_name,
email,
admin
FROM users
";

try
{
$stmt = $db->prepare($query);
$stmt->execute();
}
catch(PDOException $ex)
{
die("Failed to run query: " . $ex->getMessage());
}

$rows = $stmt->fetchAll();
//END DATA FETCHING TO DISPLAY CURRENT USERS



//BEGIN USER DELETE FUNCTION
//IM NOT SURE HOW TO SET THIS UP, OR IF IT'S EVEN IN THE RIGHT PLACE

$id = isset($_POST['id'])?intval($_POST['id']):0;
if($id>0) { $query = "DELETE FROM users WHERE id = '$id'";
}
//END USER DELETE FUNCTION



//BEGIN FOR ADD NEW USER
if(!empty($_POST))
{
if(empty($_POST['username']))
{
header("Location: useraccounts.php");
die("Redirecting to: useraccounts.php");
$error = "Please enter a username.";
}

if(empty($_POST['password']))
{
header("Location: useraccounts.php");
die("Redirecting to: useraccounts.php");
$error = "Please enter a password.";
}

if(!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL))
{
header("Location: useraccounts.php");
die("Redirecting to: useraccounts.php");
$error = "Invalid E-Mail Address";
}

$query = "SELECT
1
FROM users
WHERE
username = :username
";

$query_params = array(
':username' => $_POST['username']
);

try
{
$stmt = $db->prepare($query);
$result = $stmt->execute($query_params);
}
catch(PDOException $ex)
{
die("Failed to run query: " . $ex->getMessage());
}

$row = $stmt->fetch();

if($row)
{
header("Location: useraccounts.php");
die("Redirecting to: useraccounts.php");
$error = "This username is already in use";
}

$query = "SELECT
1
FROM users
WHERE
email = :email
";

$query_params = array(
':email' => $_POST['email']
);

try
{
$stmt = $db->prepare($query);
$result = $stmt->execute($query_params);
}
catch(PDOException $ex)
{
die("Failed to run query: " . $ex->getMessage());
}

$row = $stmt->fetch();

if($row)
{
header("Location: useraccounts.php");
die("Redirecting to: useraccounts.php");
$error = "This email address is already registered";
}

$query = "INSERT INTO users (
username,
display_name,
password,
salt,
email,
admin
) VALUES (
:username,
:display_name,
:password,
:salt,
:email,
:admin
)
";

$salt = dechex(mt_rand(0, 2147483647)) . dechex(mt_rand(0, 2147483647));

$password = hash('sha256', $_POST['password'] . $salt);

for($round = 0; $round < 65536; $round++)
{
$password = hash('sha256', $password . $salt);
}

$query_params = array(
':username' => $_POST['username'],
':display_name' => $_POST['display_name'],
':password' => $password,
':salt' => $salt,
':email' => $_POST['email'],
':admin' => $_POST['admin']
);

try
{
$stmt = $db->prepare($query);
$result = $stmt->execute($query_params);
}
catch(PDOException $ex)
{
die("Failed to run query: " . $ex->getMessage());
}

header("Location: useraccounts.php");
die("Redirecting to useraccounts.php");
}
?>
<h3>Add an Account</h3>
<form action="useraccounts.php" method="post">
<p class="label">Username:</p>
<input class="text" type="text" name="username" value="" />
<p class="label">Display Name(s):</p>
<input class="text" type="text" name="display_name" value="" />
<p class="label">E-Mail:</p>
<input class="text" type="text" name="email" value="" />
<p class="label">Password:</p>
<input class="text" type="password" name="password" value="" />
<p class="label">Admin Account?</p>
<input type="radio" id="r1" name="admin" value="0" checked="checked" /><label for="r1"><span></span>No</label>
<input type="radio" id="r2" name="admin" value="1" /><label for="r2"><span></span>Yes</label></br>
<p class="error"><?php echo $error; ?></p>
<button class="contact" type="submit" name="submit">Create Account</button>
</form>
<h3>Current Accounts List</h3>
<table class="parent-accounts">
<tr>
<th><h4>ID</h4></th>
<th><h4>Username</h4></th>
<th><h4>Display Name(s)</h4></th>
<th><h4>E-Mail Address</h4></th>
<th><h4>Admin</h4></th>
</tr>
<?php foreach($rows as $row): ?>
<form action="useraccounts.php?id=<?php echo $id['id'];?>" method="post">
<tr>
<td><?php echo $row['id']; ?></td>
<td><?php echo htmlentities($row['username'], ENT_QUOTES, 'UTF-8'); ?></td>
<td><?php echo htmlentities($row['display_name'], ENT_QUOTES, 'UTF-8'); ?></td>
<td><?php echo htmlentities($row['email'], ENT_QUOTES, 'UTF-8'); ?></td>
<td><?php echo htmlentities($row['admin'], ENT_QUOTES, 'UTF-8'); ?></td>
<td><input type="submit" name="submit" value="Delete User" /></td>
</tr>
</form>
<?php endforeach; ?>
</table>

0

Решение

‘id’ публикуется в форме, и ваш запрос удаления пользователя выглядит нормально. Вам необходимо выполнить запрос. И, возможно, убедитесь, что вы обрабатываете запрос на удаление перед загрузкой текущих пользователей.

<?php

require("connect.php");

if(empty($_SESSION['user']) || empty($_SESSION['adminaccess']))
{
header("Location: login.php");
die("Redirecting to login.php");
}

//BEGIN USER DELETE FUNCTION
//IM NOT SURE HOW TO SET THIS UP, OR IF IT'S EVEN IN THE RIGHT PLACE
if(isset($_SESSION['adminaccess']))  //if user has admin privilege
{
$id = isset($_POST['id'])?intval($_POST['id']):0;
if($id>0)  //if valid id for deleting is posted
{
$query = 'DELETE FROM users WHERE id = '.$id;
echo '<script>alert("Query: '.$query.'");</script>';  //debug line, remove this later
try
{
$stmt = $db->prepare($query);
$stmt->execute();
}
catch(PDOException $ex)
{
die("Failed to run query: " . $ex->getMessage());
}
}
else
{
echo '<script>alert("Invalid ID: '.$id.'");</script>';  //debug line, remove this later
}
}
else
{
echo '<script>alert("No admin access privilege.");</script>';  //debug line, remove this later
}
//END USER DELETE FUNCTION

//BEGIN DATA FETCHING TO DISPLAY CURRENT USERS
$query = "SELECT
id,
username,
display_name,
email,
admin
FROM users
";

try
{
$stmt = $db->prepare($query);
$stmt->execute();
}
catch(PDOException $ex)
{
die("Failed to run query: " . $ex->getMessage());
}

$rows = $stmt->fetchAll();
//END DATA FETCHING TO DISPLAY CURRENT USERS

..........


?>
0

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

Других решений пока нет …

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