2015-08-11 3 views
0

Ниже приведен код, указанный на одном файле с именем 'useraccount.php' на моем веб-сайте. Как и в настоящее время, эта страница имеет форму для зарегистрированного администратора, чтобы добавить новую учетную запись пользователя, а также таблицу ниже, которая отображает существующие учетные записи уже в базе данных. Я хочу добавить кнопку «удалить» для каждой существующей учетной записи и попробовать различные способы ее включения, но пока не найти решение, которое работает. Если кто-то может поделиться со мной опытом, я бы очень признателен. Мне нужно знать, как настроить кнопку, чтобы переносить переменную номера строки базы данных, чтобы php мог распознать, какую строку удалить, а также где и как безопасно выполнять запрос удаления в 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

в Displays существующих учетных записей пользователей, в форме, несколько вещей с '$ id' вам иметь его в форме действия, также 2 скрытые входы на конце с' имя = "ID" ' поэтому используйте либо вход (только 1) и удалите '? id = ' или keep '? id = ' и удалите оба входа с помощью 'name =" id "' – Shehary

+0

Спасибо за ваше время! Я удалил два скрытых поля с именем 'name =" id "' и оставил '; id = ' В действии формы. Однако он по-прежнему не удаляет запись из базы данных. Можете ли вы просмотреть раздел в php, где я отметил '// BEGIN USER DELETE FUNCTION', чтобы увидеть, что я могу оставить там. Я не уверен, что еще может быть. –

ответ

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

Благодарим вас за ответ! Я пробовал это, и когда я нажимаю кнопку «Удалить пользователя», по какой-то причине он по-прежнему не удаляет его из базы данных. Это довольно просто возвращается на страницу без выполнения запроса на удаление. –

+0

В этом случае попробуйте поместить некоторые строки отладки: if (isset ($ _ SESSION ['adminaccess'])) // если пользователь имеет admin priviledge { $ id = isset ($ _ POST ['id'])? Intval ($ _POST [ 'ID']): 0; эха '' если ($ ID> 0) // если действительный идентификатор для удаления размещен { $ запроса =" DELETE FROM пользователей, где ID = «». $ ID. "'"; эхо' ' попробовать { $ STMT = $ db-> подготовить ($ запроса); $ stmt-> execute(); } catch (PDOException $ ex) { die ("Не удалось выполнить запрос:". $ Ex-> getMessage()); } } } –

+0

Извините, это немного сложно отформатировать код в комментариях. Попробуйте добавить некоторые строки отладки (например, echo '' или echo ' и посмотреть, какое сообщение вы получите. Затем вы можете указать, какая часть PHP-код был выполнен. –