Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Usunięcie użytkownika bazy i bazy MySQL
Forum PHP.pl > Forum > PHP
easyshare
Witam, walczę ze skryptem do usuwania użytkownika bazy danych i samej bazy danych. Po pomyślnym przeprowadzeniu usunięcia tych elementów do bazy mają dodać się odpowiednie wpisy w tabelach db_name db_user db_status . Jak na razie skrypt usuwa jedynie użytkownika :/

  1. <?php
  2. if (isset($_POST['submit3'])) { // Obsługa formularza.
  3.    $query = "SELECT db_status, db_name, db_user FROM users WHERE user_id=$_SESSION[user_id]";
  4.    $result = mysql_query($query);
  5.    if(mysql_num_rows($result) > 0) {
  6.        while($db = mysql_fetch_assoc($result)) {    
  7.        $db_status = $db['db_status'];
  8.        $db_name = $db['db_name'];
  9.        $db_user = $db['db_user'];
  10. }
  11. } else {
  12. echo "Wystąpił błąd systemowy.";
  13. }
  14. }
  15.  
  16. if ($db_name && $db_user && $db_status ) {
  17.    $query = "DROP USER '$db_name'@'localhost'";
  18.    $result = @mysql_query($query);
  19.        if(mysql_affected_rows() > 0) {
  20.        $query = "DROP DATABASE IF EXIST '$db_name'";
  21.        $result = @mysql_query($query);
  22.            if(mysql_num_rows() > 0) {
  23.            $query = "UPDATE users SET db_status='0' WHERE user_id=$_SESSION[user_id]";
  24.            $result = @mysql_query($query);
  25.                }
  26. }
  27. }
  28. ?>
hateman
a istnieje w bazie tabela o nazwie $db_name?

Jak nie ma to skrypt nie przechodzi dalej
Jak jest to powinno usuwać i popraw jeszcze jedną linijkę
w Twoim przykładnie nr 23

  1. <?php
  2. if ($db_name && $db_user && $db_status ) {
  3.    $query = "DROP USER '$db_name'@'localhost'";
  4.    $result = @mysql_query($query);
  5.        if(mysql_affected_rows() > 0) {
  6.        $query = "DROP DATABASE IF EXIST '$db_name'";
  7.        $result = @mysql_query($query);
  8.            if(mysql_affected_rows() > 0) {
  9.            $query = "UPDATE users SET db_status='0' WHERE user_id=$_SESSION[user_id]";
  10.            $result = @mysql_query($query);
  11.                }
  12. }
  13. }
  14. ?>
phpion
Masz błąd w zapytaniu usuwającym bazę danych. Wywal apostrofy otaczające nazwę bazy danych:
  1. <?php
  2. $query = "DROP DATABASE IF EXIST $db_name";
  3. ?>

i powinno śmigać.
easyshare
poprawiłem wszystko według Waszych zaleceń, ale nada skrypt nie działa jak należy, usuwa tylko użytkownika :/
hateman
a z jakiego użytkownika to usuwasz? smile.gif

Jak usuwasz to jako użytkownik ten którego usuwasz to jak go usuniesz to nie masz już praw do bazy :]
easyshare
skrypt działa z zupełnie innego konta użytkownika bazy danych smile.gif użytkownik ten ma pełne uprawnienia smile.gif
hateman
no to musisz sprawdzać po kolei co nie gra

wyświetl sobie zmienną $db_name i sprawdź czy istnieje faktycznie taka baza

jeżeli jest to usuń if'a
if(mysql_affected_rows() > 0)

i zostaw samo

$query = "DROP DATABASE IF EXIST $db_name";
$result = @mysql_query($query);

i zobacz czy usunie tą bazę

będziesz wiedział na czym Ci się wysypuje
może na funcji mysql_affected_rows()
też wyświetl sobie jej zawartość po usunięciu użytkownika
easyshare
skrypt wygląda teraz tak jak poniżej. Usuwa użytkownika, nie usuwa bazy danych, dodaje wpisy do tabeli users, czyli coś nie gra z usunięciem bazy :/ ale co ? ręce mi opadają :/ . zmienna $db_name otrzymuje wartość odpowiadającą usuwanej bazie danych

  1. <?php
  2. if ($db_name && $db_user && $db_status ) {
  3.    $query = "DROP USER '$db_name'@'localhost'";
  4.    $result = @mysql_query($query);
  5.    //    if(mysql_affected_rows() > 0) {
  6.        $query = "DROP DATABASE IF EXIST $db_name";
  7.        $result = @mysql_query($query);
  8. //            if(mysql_affected_rows() > 0) {
  9.                $query = "UPDATE users SET db_status='0', db_name='', db_user='', db_password='' WHERE user_id=$_SESSION[user_id]";
  10.                $result = @mysql_query($query);
  11.                header ("Locatio:  h://" . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) . "panel.php");
  12.                }
  13. //}
  14. //}
  15.  
  16. echo $db_status;
  17. echo $db_name;
  18. echo $db_user;
  19. ?>




Zmieniłem zapytanie usuwające bazę na DROP DATABASE $db_name i działa smile.gif ale dlaczego nie działa z DROP DATABASE IF EXIST ?
hateman
to wywal jeszcze @
i zobacz jaki błąd Ci wywali

$result = mysql_query($query);
easyshare
wywaliłem @ , nie pokazuje żadnych błędów :/ żeby było ciekawiej , działająca wersja skryptu po oddaniu if ów przestaje działać :/ makabra :/
hateman
To ja już nie wiem smile.gif

Jeszcze spróbuj tak:

Kod
$query = "DROP DATABASE ".$db_name;
$result = mysql_query($query);


albo wpisz mu z palca nazwę bazy i sprawdź smile.gif
easyshare
nie działa w obu przypadkach, może mysql_affected_rows() w przypadku DROP DATABASE nie zwraca żadnego wyniku ?


mysql_affected_rows po usunięciu usera zwraca 0 :/ dlaczego ? powinien 1 przecież
hateman
Niby powinien a sprawdź tak

mysql_affected_rows($result)
easyshare
przerobiłem warunki i jest OK , dla zainteresowanych podaje treść skryptu i dziękuje za pomoc
  1. <?php
  2. if (isset($_POST['submit3'])) { // Obsługa formularza.
  3.    $query = "SELECT db_status, db_name, db_user FROM users WHERE user_id=$_SESSION[user_id]";
  4.    $result = mysql_query($query);
  5.    if(mysql_num_rows($result) > 0) {
  6.        while($db = mysql_fetch_assoc($result)) {    
  7.        $db_status = $db['db_status'];
  8.        $db_name = $db['db_name'];
  9.        $db_user = $db['db_user'];
  10. }
  11. } else {
  12. echo "Wystąpił błąd systemowy.";
  13. }
  14. }
  15.  
  16. if ($db_name && $db_user && $db_status ) {
  17.    $query = "DROP USER '$db_name'@'localhost'";
  18.    $result = mysql_query($query);
  19.        if(mysql_affected_rows() == 0) {
  20.        $query = "DROP DATABASE $db_name";
  21.        $result = mysql_query($query);
  22.            if(mysql_affected_rows() == 0) {
  23.                $query = "UPDATE users SET db_status='0', db_name='', db_user='', db_password='' WHERE user_id=$_SESSION[user_id]";
  24.                $result = mysql_query($query);
  25.                header ("Locatio:  htt://" . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) . "panel.php");
  26.                }
  27. }
  28. }
  29. ?>
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.