2013-06-29 4 views
0

Я новый программист PHP. Я создал страницу входа в систему, где я могу просмотреть список пользователей, которые вошли в систему. Я использую PDO для подключения базы данных. Проблема в том, что если я хочу удалить пользователя из списка, он удалит только последнего вставленного пользователя. Что я делаю неправильно? Может кто-то пожалуйста, помогите мне ...Как удалить пользователя из базы данных MySQL

Вот мой HTML код:

<form action="" method="post"> 
    <?php 
    foreach($rows as $row){ 
     $time = $row['time_out']; 
     echo " 
     <input type='text' value='$row[user_name]' name='user_name'> 
     <input type='text' value=' $row[course]' name='course'> 
     <input type='text' value=' $time'> 
     <input type='submit' value='submit' name='submit'> 
     <br>"; 
    } 
    ?> 
</form> 

if(isset($_POST['submit'])){ 
    //get course 
    $course = $_POST['course']; 

    //get user_name 
    $user_name = $_POST['user_name']; 

    //deleting user from the database 
    $database->delete($user_name); 

    //Redirect to current page 
    header('Location: tutor.php'); 
    exit; 
} 

Вот мой метод для получения зарегистрированного пользователя:

public function selectFromOnline() 
    { 
     $sql = $this->connection()->prepare("SELECT * FROM online"); 
     $sql->execute(); 
     return $sql->fetchAll(); 
    } 

Вот мой метод для удаления пользователя:

public function delete($user_name) 
    { 
     $sql = $this->connection()->prepare("DELETE FROM online WHERE user_name = :user_name"); 
     $sql->bindValue(':user_name', $user_name, PDO::PARAM_STR); 
     $sql->execute(); 
     return $sql; 
    } 
+0

Вопросы о проблемах с кодом, который вы написали, должна описать конкретную проблему: d включить действительный код для его воспроизведения. Вы не описываете свою проблему. См. [SSCCE.org] (http://sscce.org/) для руководства. – Kermit

+0

Посмотрите на HTML, который вы создаете. У каждого пользователя есть скрытое поле, называемое user_name; и вашему коду будет передан только один параметр с именем user_name, который будет последним, если у вас есть два поля с тем же именем, более ранние из них переписаны более поздними. – andrewsi

+1

В качестве быстрого исправления попробуйте включить теги

внутри цикла for, так что каждый пользователь имеет свою собственную форму, поэтому не будет никаких полей, которые могут быть переписаны. Кроме того, посмотрите, как вы можете сохранить все в одной форме, но переименуйте поле, чтобы все данные каждого пользователя имели уникальные имена в форме. – andrewsi

ответ

0

Проблема заключается в том, что каждый вход имеет одно и то же имя, поэтому вы ничего не получаете при попытке получить POST va сифилис. Попробуйте другой подход. Возможно, вы можете добавить новое поле (гиперссылка), которое выполняет действие перенаправления, и отправить параметры удаления действия с помощью GET.

Пример:

echo " 
    <input type='text' value='$row[user_name]' name='user_name'> 
    <input type='text' value=' $row[course]' name='course'> 
    <input type='text' value=' $time'> 
    <a href='Test.php?username=$row[user_name]&course=$row[course]'>delete</a>   
    <br>"; 

}

test.php это название вашей страницы PHP. Затем вы можете запросить базу данных с помощью значения GET:

$_GET["username"] 
+0

Можете, пожалуйста, привести пример. Спасибо .. –

+0

Я добавил код примера к моему ответу. С уважением. –

0

Извините, но я не понимаю ваш код, но я понял, ваша проблема, и здесь это мое решение с «mysqli_query» ....

<?php 
//Please set these veriables according to your values.... 
$host_name = "YOUR_DB_HOST_NAME";  //Normally 'localhost' 
$password = "YOUR_PASSWORD_FOR_MYSQL"; //your password 
$username = "YOUR_USERNAME_FOR_MYSQL"; //Normally Root 
$database_name = "NAME_OF_YOUR_DATABASE"; 
$connect = mysqli_connect($host_name, $username, $password, $database_name); 
if(!$connect){ 
    echo "Something is Wrong Please Check your host name, user name, password or  database name"; 
} 
?> 

<!--YOUR FORM STARTS-----------------------------------------------------> 
<!--DON'T FORGET TO SET ACTION TO #(ON THE SAME    PAGE)------------------------------------> 
<form action="#" method="post"> 
    <?php 
    foreach($rows as $row){ 
     $time = $row['time_out']; 
     //Any Two Input Fields Cant have same Name So... 
     echo " 
     <input type='text' value='$row[user_name]' name='user_name_display'> 
     <input type='text' value=' $row[course]' name='course'> 
     <input type='text' value=' $time'> 
     <input type='hidden' value='$row[user_name]' name='user_name'> 
     <input type='submit' value='submit' name='submit'> 
     <br>"; 
    } 
    ?> 
</form> 
<!--YOUR FORM ENDS-----------------------------------------------------> 

<?PHP 
if(isset($_POST['submit'])){ 
    //get course 
    $course = $_POST['course']; 

    //get user_name 
    $user_name = $_POST['user_name']; 

//Creating and running mysqli query 
$delete = "DELETE FROM online WHERE user_name='$user_name'"; 
$query = mysqli_query($connect, $delete); 

if($query){ 
    //Code to run when user is deleted 
    header("Location: tutor.php") 
}else{ 
    //Error to show when can't delete user 
    echo "Sorry Can't delete the user"; 
} 
} 
?> 

Просто забыть о некоторых и некоторые запятой незначительные ошибки (если есть), он будет работать Демонстративно .... Пожалуйста, не забывайте голосовать, если он работает ....

Смежные вопросы