Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [PHP][MySQL]Problem z MYSQL DELETE
honytowk
post 5.11.2009, 18:11:50
Post #1





Grupa: Zarejestrowani
Postów: 90
Pomógł: 3
Dołączył: 11.09.2008
Skąd: Gliwice

Ostrzeżenie: (0%)
-----


Witam nie mogę sobie poradzić z funkcją DELETE. Update działa tak jak powinien wszystko ok, a
DELETE FROM nie odpowiada w ogolę, nie usuwa pożądanego rekordu
jak to naprawić?
rekordy w bazie zapisują się w taki sposób: " 10.11.12.13 "
  1. if (isset($update_profile)) {
  2. $result = dbquery("UPDATE ".$db_prefix."users SET grupy='".$userdata['grupy'].".".$grupa."' WHERE user_id='".$userdata['user_id']."'");
  3.  
  4. }
  5. if (isset($delete_profile)) {
  6. $result = dbquery("DELETE FROM ".$db_prefix."users WHERE grupy='.".$grupa."' AND user_id='".$userdata['user_id']."'");
  7. }
  8.  
  9. }
  10.  
  11.  
  12.  
  13. echo "<form name='inputform' method='post' action='' enctype='multipart/form-data'>\n";
  14. echo "<table align='center' cellpadding='0' cellspacing='0'>\n";
  15. if ($userdata['grupy'] != $grupa) {
  16. echo "
  17.  
  18. <center><input type='submit' name='update_profile' value='Zapisz się' class='button'>
  19. </center></form> ";
  20. echo "
  21. <form name='inputform' method='post' action='' enctype='multipart/form-data'>
  22. <center><input type='submit' name='delete_profile' value='usun się' class='button'>
  23. </center> ";
  24. }
  25.  
  26.  
  27.  
  28.  
  29. </td>
  30. </tr>
  31. </table>
  32. </form>\n";
  33.  
  34.  
  35. ";
Go to the top of the page
+Quote Post
potreb
post 5.11.2009, 18:26:10
Post #2





Grupa: Zarejestrowani
Postów: 1 568
Pomógł: 192
Dołączył: 7.03.2005
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Daj po delete echo mysql_error(); i zobacz czy wywala jakiś błąd, jeżeli nie, to błąd może leżeć w konstrukcji zapytania.


--------------------

Go to the top of the page
+Quote Post
honytowk
post 5.11.2009, 20:32:38
Post #3





Grupa: Zarejestrowani
Postów: 90
Pomógł: 3
Dołączył: 11.09.2008
Skąd: Gliwice

Ostrzeżenie: (0%)
-----


nie wywala żadnego błędu, wie ktoś jak ułożyć lepszą konstrukcje zapytania?

Ten post edytował honytowk 5.11.2009, 20:33:04
Go to the top of the page
+Quote Post
Zosiek
post 5.11.2009, 20:54:12
Post #4





Grupa: Zarejestrowani
Postów: 140
Pomógł: 22
Dołączył: 1.05.2009
Skąd: Będzin

Ostrzeżenie: (0%)
-----


$result = dbquery("DELETE FROM ".$db_prefix."users WHERE grupy='.".$grupa."' AND user_id='".$userdata['user_id']."'");
A co to?? tongue.gif

@
a tak na marginesie to jak ty chcesz coś usunąć jeśli dodajesz .$userdata['grupy'].".".$grupa. a usuwasz używając tylko $grupa questionmark.gif

Ten post edytował Zosiek 5.11.2009, 20:58:57


--------------------
Pamiętaj ja staram się pomóc tobie, a ty może kiedyś pomożesz mnie. :D
Pomogłem Ci?? Jeśli tak to jestem z tego dumny. Jeśli nie to postaram się bardziej - nikt nie jest doskonały :P
Kliknij przycisk Pomógł pod postem, który Ci pomógł.
Go to the top of the page
+Quote Post
honytowk
post 5.11.2009, 21:07:52
Post #5





Grupa: Zarejestrowani
Postów: 90
Pomógł: 3
Dołączył: 11.09.2008
Skąd: Gliwice

Ostrzeżenie: (0%)
-----


Cytat(Zosiek @ 5.11.2009, 20:54:12 ) *
$result = dbquery("DELETE FROM ".$db_prefix."users WHERE grupy='.".$grupa."' AND user_id='".$userdata['user_id']."'");
A co to?? tongue.gif

.".$grupa." <-- tak zapisywane są rekordy pisałem już w pierwszym poście ze zapisuja sie w bazie tak " .10.11.12.3.8.5.4 itd... "


Cytat(Zosiek @ 5.11.2009, 20:54:12 ) *
@
a tak na marginesie to jak ty chcesz coś usunąć jeśli dodajesz .$userdata['grupy'].".".$grupa. a usuwasz używając tylko $grupa questionmark.gif

".$userdata['grupy']." to grupy do których użytkownik już należy ".$grupa." to grupa którą chce dodać
(krótko mowiąc zrobione jest to po to żeby poprzednie grupy się nie kasowały)

Ten post edytował honytowk 5.11.2009, 21:08:12
Go to the top of the page
+Quote Post
potreb
post 5.11.2009, 21:33:33
Post #6





Grupa: Zarejestrowani
Postów: 1 568
Pomógł: 192
Dołączył: 7.03.2005
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Ale i tak kasujesz tylko użytkownika to po co chcesz robić dodatkowy warunek dla grupy?


--------------------

Go to the top of the page
+Quote Post
skowron-line
post 5.11.2009, 21:40:22
Post #7





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


1. Czy warunek jest spełniony questionmark.gif
2. Zrzuć sobie zapytanie na ekran może złączenie zmiennych nie jest takie jak powinno być
3. Zrzut wklej do pma i zobacz co sie stanie, jeżeli nie ma błędu to obstawiam opcję 2


--------------------
I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy.

QueryBuilder, Mootools.net, bbcradio1::MistaJam
http://www.phpbench.com/
Go to the top of the page
+Quote Post
honytowk
post 5.11.2009, 22:02:55
Post #8





Grupa: Zarejestrowani
Postów: 90
Pomógł: 3
Dołączył: 11.09.2008
Skąd: Gliwice

Ostrzeżenie: (0%)
-----


Cytat(potreb @ 5.11.2009, 21:33:33 ) *
Ale i tak kasujesz tylko użytkownika to po co chcesz robić dodatkowy warunek dla grupy?

Nie kasuje użytkownika tylko grupy które zapisują się w tabeli users -> tzn. "user_id, user_name, grupy"
Cytat([b]skowron-line[/b] @ 5.11.2009, 21:33:33 ) *

2. Zrzuć sobie zapytanie na ekran może złączenie zmiennych nie jest takie jak powinno być

a z tym zrzutem chodzi ci o to żebym wyświetlił zmienne?
(zmienne już wyświetlałem działają wszystkie tak jak powinny)

Ten post edytował honytowk 5.11.2009, 22:05:43
Go to the top of the page
+Quote Post
skowron-line
post 5.11.2009, 22:12:32
Post #9





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


Cytat(honytowk @ 5.11.2009, 22:02:55 ) *
Nie kasuje użytkownika tylko grupy które zapisują się w tabeli users -> tzn. "user_id, user_name, grupy"

a z tym zrzutem chodzi ci o to żebym wyświetlił zmienne?
(zmienne już wyświetlałem działają wszystkie tak jak powinny)

To pokaż to zapytanie.


--------------------
I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy.

QueryBuilder, Mootools.net, bbcradio1::MistaJam
http://www.phpbench.com/
Go to the top of the page
+Quote Post
honytowk
post 5.11.2009, 22:37:35
Post #10





Grupa: Zarejestrowani
Postów: 90
Pomógł: 3
Dołączył: 11.09.2008
Skąd: Gliwice

Ostrzeżenie: (0%)
-----


no usuwać grupę chce zapytaniem:
  1. $result = dbquery("DELETE FROM ".$db_prefix."users WHERE grupy='.".$grupa."' AND user_id='".$userdata['user_id']."'");

ale to nie działa dlatego pytam co mam zmodyfikować


Ten post edytował honytowk 5.11.2009, 22:39:53
Go to the top of the page
+Quote Post
potreb
post 5.11.2009, 22:38:49
Post #11





Grupa: Zarejestrowani
Postów: 1 568
Pomógł: 192
Dołączył: 7.03.2005
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Cytat(honytowk @ 5.11.2009, 22:02:55 ) *
Nie kasuje użytkownika tylko grupy które zapisują się w tabeli users -> tzn. "user_id, user_name, grupy"


Pokaż strukturę tabeli i przykąłd.

Wg mnie chcesz usunąć tylko użytkownika z danej grupy, tzn skasować mu daną grupę, jeżeli tak to do tego nie służy funkcja delete tylko update z poprawnym warunkiem.

Ten post edytował potreb 5.11.2009, 22:39:54


--------------------

Go to the top of the page
+Quote Post
honytowk
post 5.11.2009, 22:47:54
Post #12





Grupa: Zarejestrowani
Postów: 90
Pomógł: 3
Dołączył: 11.09.2008
Skąd: Gliwice

Ostrzeżenie: (0%)
-----


Cytat(potreb @ 5.11.2009, 22:38:49 ) *
Pokaż strukturę tabeli i przykąłd.

Wg mnie chcesz usunąć tylko użytkownika z danej grupy, tzn skasować mu daną grupę, jeżeli tak to do tego nie służy funkcja delete tylko update z poprawnym warunkiem.



dokładnie o to mi chodzi ale jak odjąć w UPDATE ten rekord '.".grupa."' od ".$userdata['grupy']." questionmark.gif

A oto zrzut:
TABLE `ep_users` (
`user_id` smallint(5) unsigned NOT NULL auto_increment,
`user_name` varchar(30) NOT NULL default '',
`user_password` varchar(32) NOT NULL default '',
`user_email` varchar(100) NOT NULL default '',
`user_hide_email` tinyint(1) unsigned NOT NULL default '1',
`user_location` varchar(50) NOT NULL default '',
`user_birthdate` date NOT NULL default '0000-00-00',
`user_aim` varchar(25) NOT NULL default '',
`user_icq` varchar(15) NOT NULL default '',
`user_msn` varchar(100) NOT NULL default '',
`user_yahoo` varchar(100) NOT NULL default '',
`user_web` varchar(200) NOT NULL default '',
`grupy` text NOT NULL,
`photo_vip` varchar(100) NOT NULL default 't.jpg',
PRIMARY KEY (`user_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin2 AUTO_INCREMENT=22 ;


Ten post edytował honytowk 5.11.2009, 22:48:44
Go to the top of the page
+Quote Post
potreb
post 5.11.2009, 23:05:52
Post #13





Grupa: Zarejestrowani
Postów: 1 568
Pomógł: 192
Dołączył: 7.03.2005
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


  1. $groupuser = dbarray(dbquery("SELECT `grupa` FROM ".$db_prefix."users WHERE user_id='".$userdata['user_id']."'"));
  2. $grupa = str_replace(''.$grupa.'.', '', $groupuser['grupa']);
  3. $result = dbquery("UPDATE ".$db_prefix."users SET grupy='".$grupa."' WHERE user_id='".$userdata['user_id']."'");


Ten post edytował potreb 5.11.2009, 23:06:38


--------------------

Go to the top of the page
+Quote Post
thek
post 5.11.2009, 23:11:49
Post #14





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Moim zdaniem źle zrobiłeś używając do oznaczeń liczb. W ten sposób zamiast jakoś sensownie działać na samej bazie operując jedynie w prosty sposób na stringu, zmusiłeś się do pobrania całego pola z bazy, explode'owaniu tego do tablicy, zrobieniu unset elementu o określonej wartości, implode'owaniu i dopiero zapisie do bazy tego. Gdybyś sensowniej zapisywał elementy nie było by problemu. Użycie liter dałoby Ci większy zakres (wszystkie litery alfabetu czy nawet znaki i cyfry) a ujęcie z obu stron liczby delimiterami to też jakieś rozwiązanie. A tak masz problem, bo nie możesz użyć szukania w stylu .grupa. gdyż oznaczenie grupy może być na końcu lub początku co zaowocuje brakiem z którejś strony kropki. No chyba, że to jakiś panel administracyjny z checkboxami. Wtedy wszystkie są przepychane jako elementy tablicy i zrobienie explode i implode z góry już jest i tak robione.
Ale to jest zgaduj zgadula, bo nie wiadomo jak w skrypcie Ty te grupy "przetwarzasz".

EDIT: @potrebUP: Sądząc z opisu istnieje przynależność do kilku grup jako możliwość, a to oznacza, że ze stringiem tak nie można postąpić, bo będą jaja gdy ktoś zechce odejść z grupy o numerze jednocyfrowym, gdy są już wielocyfrowe. Zrobiłbyś w sytuacji
.11.5.211.34 z usunięciem grupy 11 taki cyrk w efekcie => .5.234
On musi w takiej sytuacji zrobić explode z użyciem . jako delimitera i zrobić unset konkretnego elementu a potem implode z . znów jako delimiter i do bazy. Usuwanie jednocyfrowych grup userowi zrobiłoby w bazie masakrę.

Ten post edytował thek 5.11.2009, 23:25:29


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
honytowk
post 5.11.2009, 23:38:56
Post #15





Grupa: Zarejestrowani
Postów: 90
Pomógł: 3
Dołączył: 11.09.2008
Skąd: Gliwice

Ostrzeżenie: (0%)
-----


działa, ale jest jeden mankament: jak usunę parę grup i zostanie tylko jedna to jej już się nie da usunąć a gdy jest ich kilka w tabeli to da rade usunąć ale zawsze tej ostatniej już się nie da
Go to the top of the page
+Quote Post
potreb
post 6.11.2009, 00:04:45
Post #16





Grupa: Zarejestrowani
Postów: 1 568
Pomógł: 192
Dołączył: 7.03.2005
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Cytat(thek @ 5.11.2009, 23:11:49 ) *
EDIT: @potrebUP: Sądząc z opisu istnieje przynależność do kilku grup jako możliwość, a to oznacza, że ze stringiem tak nie można postąpić, bo będą jaja gdy ktoś zechce odejść z grupy o numerze jednocyfrowym, gdy są już wielocyfrowe. Zrobiłbyś w sytuacji
.11.5.211.34 z usunięciem grupy 11 taki cyrk w efekcie => .5.234
On musi w takiej sytuacji zrobić explode z użyciem . jako delimitera i zrobić unset konkretnego elementu a potem implode z . znów jako delimiter i do bazy. Usuwanie jednocyfrowych grup userowi zrobiłoby w bazie masakrę.


Masz rację, wtedy zacznie się miszmasz w kolumnie z grupami. Rozbicie na częsci tego byłoby lepsze a raczej pożądane.


--------------------

Go to the top of the page
+Quote Post
thek
post 6.11.2009, 00:17:07
Post #17





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Zrób może według takiego wzorca:
  1. $string_grup = 'tu_są_te_grupy_z_kropkami_pomiędzy';
  2. $grupa = 'tu_jest_numer_grupy_do _usunięcia';
  3. $temp = explode('.', $string_grup);
  4. $key = array_search( $grupa, $temp ); //sprawdzenie czy taka grupa istnieje pomiędzy tymi w jakich jest user
  5. if( $key )
  6. unset( $temp[$key] ); //usunięcie grupy
  7. $po_usunięciu = implode('.', $temp); //złożenie do kupy

Zauważ, że jeśli usuniesz w ten sposób ostatni element to otrzymasz w wyniku ciąg pusty. Po explode pierwszy element tablicy jest ciągiem pustym, ale jeśli usuniesz ostatnią grupę to implode jednoelementowej tablicy daje w wyniku string o wartości tego elementu, a więc pusty string tak czy inaczej. Takowy możesz potem przesłać jako wartość w UPDATE bez problemu (de facto wpisanie tam wartości pustej będzie jak wywalenie usera z wszystkich grup). Na upartego mógłbym wywalić IF i od razu po search robić unset ale wolę to sprawdzić dla bezpieczeństwa. Mógłbym też (znów na upartego) zabezpieczyć się przed sytuacją, gdy user jest kilkukrotnie w tej samej grupie wpisany i zamiast array_search użyć array_keys i potem robić unset w pętli foreach po zwróconych mi kluczach. Ale to już nadmierne zabezpieczanie się, choć możliwe, że będzie konieczne jeśli nie pilnujesz czy user jest już przypisany do danej grupy.

Ten post edytował thek 6.11.2009, 00:19:24


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
honytowk
post 6.11.2009, 15:16:25
Post #18





Grupa: Zarejestrowani
Postów: 90
Pomógł: 3
Dołączył: 11.09.2008
Skąd: Gliwice

Ostrzeżenie: (0%)
-----


if (isset($delete_profile)) {
$string_grup = ($userdata['user_id']);
$grupa = ($grupa); // to wywaliłem
$temp = explode('.', $string_grup);
$key = array_search( $grupa, $temp ); //sprawdzenie czy taka grupa istnieje pomiędzy tymi w jakich jest user
if( $key )
unset( $temp[$key] ); //usunięcie grupy
$po_usunięciu = implode('.', $temp); // i zamieniłem te ę na e
}
}

nadal nie działa
Go to the top of the page
+Quote Post
thek
post 6.11.2009, 15:22:34
Post #19





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Więc popatrz co zawierają wszystkie te zmienne i zobacz gdzie może się sypać. Bo może nie przekazujesz właściwych zmiennych do skryptu. Innymi słowy zdebuguj go smile.gif I w pierwszej kolejności sprawdziłbym co masz w $temp PO explode oraz PO unset oraz czy array_search zwraca Ci cokolwiek. Debuguj zmienne w trakcie działania skryptu i popatrz co Ci zwracają. var_dump niech Ci pomoże smile.gif

EDIT... A najważniejsze jest jedno... Wszystko musisz wewnątrz nawiasów klamrowych od if(isset($delete_profile)) {} <- Inaczej $po_usunieciu zostanie nullem bo jest to dla skryptu wtedy zmienna lokalna, która po wyjściu z owego IF jest niszczona. Poczytaj o zasięgu zmiennych. Aby zadziałało musisz update wykonać od razu pod implode. By sobie to sprawdzić wyświetl $string_grup na starcie i $po_usunieciu. Jeśli różnica będzie właśnie o wywalaną grupę to znaczy, że skrypt działa, tylko Ty gdzieś źle przekazujesz wynik usuwania, czyli zmienną $po_usunieciu

Ten post edytował thek 6.11.2009, 15:28:24


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
honytowk
post 7.11.2009, 10:48:26
Post #20





Grupa: Zarejestrowani
Postów: 90
Pomógł: 3
Dołączył: 11.09.2008
Skąd: Gliwice

Ostrzeżenie: (0%)
-----


okej, wszystko przeanalizowałem, poprawiłem teraz już działa dzięki wielkie wszystkim za poświęcony mi czas;)

mam jeszcze jedno pytanie:

Co mam zrobić żeby wyświetlało mi użytkowników należących do danej grupy?
(w każdym wierszu po 4 wyniki kolumn 3 na 1 stronę)

wynik powinien być taki :

  1. echo "\n<td align='center' valign='top'>\n<a href='".BASEDIR."profile.php?lookup=".$data['user_id']."'><img src='".PHOTOS2."".$data['photo_vip']."'><br>".$data['user_aim']." ".$data['user_icq']."</a></td>\n";
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 18.07.2025 - 02:50