![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 73 Pomógł: 1 Dołączył: 19.12.2007 Ostrzeżenie: (0%) ![]() ![]() |
Witam wszystkich,
Otóż mam w MySQL tabelkę "grupy" W pliku php, który wyświetla grupy z tej tabelki w pętli, mam pod każdymi danymi grupy button "dołącz do grupy". No i oczywiście działa mi ładnie pięknie - kiedy wcisnę przycisk dodaje użytkownika do tej grupy. Ale teraz mam problem, co zrobić żeby po dodaniu ten przycisk zniknął u usera i pojawił się np przycisk "usuń mnie z grupy" (który też wiem jak zrobić). Chodzi mi tylko jaki warunek napisać, żeby wyświetlił się ten albo ten button? Myślałem nad pętlą for, która sprawdzała by po prostu czy w tabeli danej grupy nie ma id użytkownika. Problem właśnie polega na tym że w tabeli grupy może być więcej niż jeden user więc trudno mi będzie porównać np pole "czlonek_grupy" do id usera zalogowanego. Od początków jestem samoukiem, mam nadzieję że ktoś zrozumiał o co mi chodzi ![]() Ten post edytował nospor 20.12.2007, 11:05:12 |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 278 Pomógł: 36 Dołączył: 9.04.2003 Skąd: Płock Ostrzeżenie: (0%) ![]() ![]() |
bedzie latwiej cos poradzic jezeli pokazesz strukture bazy
-------------------- d(^^)b
|
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 73 Pomógł: 1 Dołączył: 19.12.2007 Ostrzeżenie: (0%) ![]() ![]() |
tabela grup
CREATE TABLE `mk_groups` ( `group_id` tinyint(3) unsigned NOT NULL auto_increment, `group_name` varchar(100) NOT NULL default '', //nazwa grupy `group_description` varchar(200) NOT NULL default '', //opis grupy `group_avatar` varchar(100) NOT NULL default '0', //obrazek PRIMARY KEY (`group_id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=13 ; a w tej tabeli poniżej zapisuje mi użytkowników CREATE TABLE `mk_groups_joined` ( `join_id` tinyint(5) unsigned NOT NULL auto_increment, `group_id` tinyint(5) NOT NULL, // id grupy `join_user` tinyint(5) NOT NULL, // zapisuje id usera ktory sie podlaczyl `join_name` varchar(30) NOT NULL, //zapisuje imie usera (malo istotne) PRIMARY KEY (`join_id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=15 ; Skrypt przedstawiony poniżej wyświetla mi grupy i button "dodaj mnie do grupy" i jest on pisany pod extreme-fusion 4.10 <?php /* MOD grupy */ require_once "maincore.php"; require_once "subheader.php"; require_once "side_left.php"; include LOCALE.LOCALESET."members-profile.php"; include LOCALE.LOCALESET."user_fields.php"; if (file_exists(LOCALE.LOCALESET."members-profile-mod.php")) { include LOCALE.LOCALESET."members-profile-mod.php"; } else { include LOCALE."English/members-profile-mod.php"; } if (iMEMBER) { if (isset($_GET['lookup']) && isNum($_GET['lookup'])) define('lookup', $_GET['lookup']); if (isset($_GET['group_id']) && isNum($_GET['group_id'])) define('group_id', $_GET['group_id']); $result = dbquery("SELECT * FROM mk_groups LIMIT 0 , 30"); while ($dgdata = mysql_fetch_array($result)) if (isset($_POST['join'])) { $wynik = dbquery("INSERT INTO ".$db_prefix."groups_joined VALUES ('', '".$dgdata['group_id']."', '".$userdata['user_id']."', '".$userdata['user_name']."')"); } if ($wynik) { echo "<font size='3'>Zapisano do grupy!</font>"; } if (isset($_POST['unjoin'])) { $wynik2 = dbquery("DELETE FROM ".$db_prefix."groups_joined WHERE join_user='".$userdata['user_id']."'"); } if ($wynik2) { echo "<font size='3'>Wypisano z grupy!</font>"; } opentable("Grupy"); echo "<table><tr><td class='tbl7'>Oto dostępne grupy, stwórz własną i zapraszaj innych.<br> Opcje: <a href='grupy_dodaj.php'>dodaj grupę</a></td></tr></table>"; closetable(); opensidex("Lista"); echo "<table width='100%'>"; $result = dbquery("SELECT * FROM mk_groups LIMIT 0 , 30"); while ($gdata = mysql_fetch_array($result)) //robi z tabeli tablice grupy { $zapytanie = dbquery("SELECT * FROM mk_groups_joined WHERE group_id='".$gdata['group_id']."'"); $udata = mysql_fetch_array($zapytanie); echo "<tr><td class='tbl1' rowspan='2'><img src='images/grupy/".$gdata['group_avatar']."' width='100' height='100'></td><td class='tbl2' width='100%'><font size='4'>".$gdata['group_id'].". ".$gdata['group_name']."</font></td></tr><tr><td class='tbl2'>".$gdata['group_description']."</td></tr><tr><td class='tbl2' colspan='2'>Należą: ".$udata['join_user']."</td></tr><tr><td class='tbl2' colspan='3'>"; echo "<form id='form' name='userform' method='post' action='".FUSION_SELF."'>"; if (warunek) { echo "<input type='submit' name='unjoin' value='wypisz się' class='button'>"; } else { echo "<input type='submit' name='join' value='dołącz się' class='button'>"; } echo "</form><hr></td></tr>"; } echo "</table>"; } closesidex(); require_once "side_right.php"; require_once "footer.php"; ?> a tak to wygląda na "żywca" ![]() Ten post edytował reyne 20.12.2007, 00:23:31 |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 136 Pomógł: 22 Dołączył: 19.09.2007 Skąd: Sosnowiec Ostrzeżenie: (0%) ![]() ![]() |
Kod $zapytanie = dbquery("SELECT * FROM mk_groups_joined WHERE group_id='".$gdata['group_id']."'"); $udata = mysql_fetch_array($zapytanie); Przede wszystkim, to zapytanie zwróci tylko jeden wiersz (pierwszy który spełnia warunki) czyli tylko jednego usera. Zatem lista osób które należą do grupy będzie wyświetlała tylko jedną osobę (Należą: ".$udata['join_user']."). Żeby pobrać wszystkich użytkowników, musisz zapytanie przepuścić np. przez while (jak w przypadku zapytania do tabeli mk_goups). Będziesz miał wtedy nazwy użytkownika wszystkch osób zapisanych do grupy... oraz tablicę z ID użytkowników. Teraz wystarczy sprawdzić czy bieżący użytkownik (domyślam się że to $userdata['user_id']) należy do tej tablicy. Kod $users_id = array(); while($udata = mysql_fetch_array($zapytanie) { $users_in_group .= $udata["join_name"]." "; // oczywiscie teraz "Należą: $udata['join_user']" zamien na "Należą: $users_in_group." $users_id[] = $udata["join_user"]; } A warunek którego szukasz wyglądać będzie: Kod if(in_array($userdata['user_id'], $users_id)) { echo "<input type='submit' name='unjoin' value='wypisz się' class='button'>"; } else { echo "<input type='submit' name='join' value='dołącz się' class='button'>"; } Pozdrawiam! Ten post edytował Nattfarinn 20.12.2007, 08:42:43 -------------------- Code should run as fast as necessary, but no faster; something important is always traded away to increase speed.
-- R. Pattis |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 73 Pomógł: 1 Dołączył: 19.12.2007 Ostrzeżenie: (0%) ![]() ![]() |
Niestety wyskakuje mi błąd podczas kompilacji
Parse error: syntax error, unexpected '{' in /srv/www/vhosts/mkoszalin.eu/httpdocs/grupy.php on line 54 Błąd dotyczy pierwszego wiersza tej nowej pętli Kod while($udata = mysql_fetch_array($zapytanie) {
$users_in_group .= $udata["join_name"].""; $users_id[] = $udata["join_user"]; } |
|
|
![]()
Post
#6
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
rety, brakuje ")". Ty nie kopiuj bezmyslnie tylko mysl troche.
I panowie uzywajcie wlasciwego bbcode -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 73 Pomógł: 1 Dołączył: 19.12.2007 Ostrzeżenie: (0%) ![]() ![]() |
no nie dojrzałem
![]() pętla działa ale w taki sposób, że teraz jeśli kliknę i dodam się do jednej grupy, to we wszystkich pozostałych również pokazuje mi przycisk wypisz się! a chciałbym żeby ten przycisk był tylko przy grupie, do której się jest zapisanym a nie do wszystkich ![]() zapewne źle skonstruowane mam dodawanie do grupy, bo po kliknięciu "dołącz" dodaje mi usera do wszystkich grup a nie do tej wybranej :/ Ten post edytował reyne 20.12.2007, 10:04:04 |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 136 Pomógł: 22 Dołączył: 19.09.2007 Skąd: Sosnowiec Ostrzeżenie: (0%) ![]() ![]() |
I panowie uzywajcie wlasciwego bbcode Wybacz. W krótkich kodach użyłem code bo irytuje mnie wydłużanie kodu o znaczniki skryptu php. Się stosować będę, słowo harcerza ![]() zapewne źle skonstruowane mam dodawanie do grupy, bo po kliknięciu "dołącz" dodaje mi usera do wszystkich grup a nie do tej wybranej :/ Więcej niż "zapewne". Pewne jak nic - przecież dodawanie masz wpakowane niewiadomo czemu w pętlę dla której specjalnie wykonujesz zapytanie (SELECT * FROM mk_groups LIMIT 0 , 30):
Jasno widać: "Przypisz mnie do każdej grupy" ![]() Edit: Jedno z rozwiązań problemu: Kod <input type="hidden" value="'.$gdata['group_name'].'" name="group_id"> Wstawić do formularza, najlepiej tuż przed poszukiwany przez Ciebie warunek. Teraz zapytanie odpowiadające za dodanie do grupy przerobić na:
Ten post edytował Nattfarinn 20.12.2007, 10:38:59 -------------------- Code should run as fast as necessary, but no faster; something important is always traded away to increase speed.
-- R. Pattis |
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 73 Pomógł: 1 Dołączył: 19.12.2007 Ostrzeżenie: (0%) ![]() ![]() |
niestety dalej jest tak samo, w takim razie nie wiem już co może być nie tak !
![]() załączam cały plik Kod <?php
/* MOD grupy */ require_once "maincore.php"; require_once "subheader.php"; require_once "side_left.php"; include LOCALE.LOCALESET."members-profile.php"; include LOCALE.LOCALESET."user_fields.php"; if (file_exists(LOCALE.LOCALESET."members-profile-mod.php")) { include LOCALE.LOCALESET."members-profile-mod.php"; } else { include LOCALE."English/members-profile-mod.php"; } if (iMEMBER) { if (isset($_GET['lookup']) && isNum($_GET['lookup'])) define('lookup', $_GET['lookup']); if (isset($_GET['group_id']) && isNum($_GET['group_id'])) define('group_id', $_GET['group_id']); $result = dbquery("SELECT * FROM mk_groups LIMIT 0 , 30"); while ($dgdata = mysql_fetch_array($result)) { if (isset($_POST['join'])) { $wynik = dbquery("INSERT INTO ".$db_prefix."groups_joined VALUES ('', '".$dgdata['group_id']."', '".$userdata['user_id']."', '".$userdata['user_name']."')"); } } if ($wynik) { echo "<font size='3'>Zapisano do grupy!</font>"; } if (isset($_POST['unjoin'])) { $wynik2 = dbquery("DELETE FROM ".$db_prefix."groups_joined WHERE join_user='".$userdata['user_id']."'"); } if ($wynik2) { echo "<font size='3'>Wypisano z grupy!</font>"; } opentable("Grupy"); echo "<table><tr><td class='tbl7'>Oto dostępne grupy, stwórz własną i zapraszaj innych.<br> Opcje: <a href='grupy_dodaj.php'>dodaj grupę</a></td></tr></table>"; closetable(); opensidex("Lista"); echo "<table width='100%'>"; $result = dbquery("SELECT * FROM mk_groups LIMIT 0 , 30"); while ($gdata = mysql_fetch_array($result)) //robi z tabeli tablice grupy { $zapytanie = dbquery("SELECT * FROM mk_groups_joined WHERE group_id='".$gdata['group_id']."'"); $users_id = array(); while($udata = mysql_fetch_array($zapytanie)) { $users_in_group .= $udata["join_name"]." "; // oczywiscie teraz "Należą: $udata['join_user']" zamien na "Należą: $users_in_group." $users_id[] = $udata["join_user"]; } echo "<tr><td class='tbl1' rowspan='2'><img src='images/grupy/".$gdata['group_avatar']."' width='100' height='100'></td><td class='tbl2' width='100%'><font size='4'>".$gdata['group_id'].". ".$gdata['group_name']."</font></td></tr><tr><td class='tbl2'>".$gdata['group_description']."</td></tr><tr><td class='tbl2' colspan='2'>Należą: $users_in_group</td></tr><tr><td class='tbl2' colspan='3'>"; echo "<form id='form' name='userform' method='post' action='".FUSION_SELF."'>"; if(in_array($userdata['user_id'], $users_id)) { echo "<input type='submit' name='unjoin' value='wypisz się' class='button'>"; } else { echo "<input type='submit' name='join' value='dołącz się' class='button'>"; } echo "</form><hr></td></tr>"; } echo "</table>"; } closesidex(); require_once "side_right.php"; require_once "footer.php"; ?> |
|
|
![]()
Post
#10
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
@reyne przeciez ty nic nie zmieniles. Jak przypisywales do wszystkich grup tak nadal przypisujesz. Twoj kod pod tym względem się nie zmienil
I uzywaj bbcode PHP!!!! -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 136 Pomógł: 22 Dołączył: 19.09.2007 Skąd: Sosnowiec Ostrzeżenie: (0%) ![]() ![]() |
Edit: Jedno z rozwiązań problemu: Kod <input type="hidden" value="'.$gdata['group_name'].'" name="group_id"> Wstawić do formularza, najlepiej tuż przed poszukiwany przez Ciebie warunek. Teraz zapytanie odpowiadające za dodanie do grupy przerobić na:
I zacznij kombinować, albo Cię nospor zje. A jak nie on to ja ![]() Edit: ![]() ![]() Ten post edytował Nattfarinn 20.12.2007, 10:51:53 -------------------- Code should run as fast as necessary, but no faster; something important is always traded away to increase speed.
-- R. Pattis |
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarejestrowani Postów: 73 Pomógł: 1 Dołączył: 19.12.2007 Ostrzeżenie: (0%) ![]() ![]() |
no dobra, prawie gotowe (co ja bym bez Was zrobił
![]() działa, tylko że dodaje 2 razy tą samą wartość, tzn dodaje mnie 2 razy do tej grupy zamiast raz ![]() dodaje tyle razy ile jest grup :/ co do group_id to domyśliłem się mistrzu! ![]() pozatym nie działa teraz "wypisz" nie uważajcie mnie za jakiegoś lenia czy coś, ja może za bardzo panikuje! i proszę Admina o wyrozumiałość, nowy jestem.. ![]() Ten post edytował reyne 20.12.2007, 11:05:12 |
|
|
![]()
Post
#13
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Cytat dodaje tyle razy ile jest grup Kurcze... i jeszcze ci nie swita? Skoro dodaje ci tyle samo razy ile masz grup to do jasnej ciasnej ciągle te dodawanie robisz w pętli, ktora leci po grupach. Miejze litosc czlowieku nad nami i wywal ten kod dodajacy pozapetle.... ps: przenosze bo to przechodzi juz ludzkie pojęcie ![]() -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#14
|
|
![]() Grupa: Zarejestrowani Postów: 73 Pomógł: 1 Dołączył: 19.12.2007 Ostrzeżenie: (0%) ![]() ![]() |
dobra, bez nerwów
![]() zrobiłem i to i usuwanie, jeszcze tylko wyświetlanie użytkowników którzy są w grupie się zepsuło ![]() wyświetla we wszystkich grupach userów, tzn jeśli dodam sie do grupy userzy to bede widoczny rowniez w "wariaci" w ktorej sie nie zapisałem ![]() |
|
|
![]()
Post
#15
|
|
![]() Grupa: Zarejestrowani Postów: 136 Pomógł: 22 Dołączył: 19.09.2007 Skąd: Sosnowiec Ostrzeżenie: (0%) ![]() ![]() |
Jak korzystasz z tego co ja wkleiłem ($users_in_group) to dodaj przed: $users_id = array(); linię $users_in_group = ""; i powinno być OK.
![]() -------------------- Code should run as fast as necessary, but no faster; something important is always traded away to increase speed.
-- R. Pattis |
|
|
![]()
Post
#16
|
|
![]() Grupa: Zarejestrowani Postów: 73 Pomógł: 1 Dołączył: 19.12.2007 Ostrzeżenie: (0%) ![]() ![]() |
śmiga
![]() dzięki za pomoc! ![]() no i jeszcze jedno pytanie mam a mianowicie czy zmienną $udata["join_user"]; mozna np podpiąc pod $userdata['user_id']? tzn chciałbym z tego userdata potem wyciągnąć i wyświetlić avatar użytkownika, kontakt itd i żeby te $userdata['user_id'] rownalo sie temu 'join_user', i potem np automatycznie userdata['user_avatar'] wyswietli po prostu avatar usera z id "join_user" jak coś takiego jest możliwe to prosze o pomoc bo czesto mam wlasnie ten problem z przepisywaniem zmiennych ![]() Ten post edytował reyne 20.12.2007, 11:55:36 |
|
|
![]()
Post
#17
|
|
![]() Grupa: Zarejestrowani Postów: 136 Pomógł: 22 Dołączył: 19.09.2007 Skąd: Sosnowiec Ostrzeżenie: (0%) ![]() ![]() |
Nie rozumiem za bardzo o co Ci w tym momencie chodzi (z podpinaniem zmiennej pod zmienną) i automatycznym wyświetlaniu czegoś przez zmienną.
Generalnie wg. Twojego skryptu $udata["join_user"] zawiera Id użytkownika przypisanego do grupy a $userdata["user_id"] zawiera Id użytkownika aktualnie zalogowanego. Więc operacje na $userdata["user_id"] będą tyczyły się tylko osoby zalogowanej. Jeśli gdzieś w bazie masz przypisany Avatar do użytkownika, to możesz identyfikować go za pomocą dowolnej wartości zawierającej Id użytkownika. Nie widzę powodu dla którego możnby używać obecnego $udata["join_user"] bo to ma służyć tylko identyfikowaniu czy użytkownik jest w danej grupie czy nie. Jeśli chcesz wyświetlać avatary, kontakt i inne dane, pobierz je z odpowiedniej tabeli wg. odpowiednich kryteriów. A czy przypiszesz to sobie do zmiennej która będzie się nazywać $udata czy $userdata czy też $dodatkowe_informacje zależy tylko od Twoich preferencji ![]() Ale moze w ogóle nie o to Ci chodzi, problem w tym że nie wiem co chcesz osiągnąć: więcej szczegółów. -------------------- Code should run as fast as necessary, but no faster; something important is always traded away to increase speed.
-- R. Pattis |
|
|
![]()
Post
#18
|
|
![]() Grupa: Zarejestrowani Postów: 73 Pomógł: 1 Dołączył: 19.12.2007 Ostrzeżenie: (0%) ![]() ![]() |
czyli za pomocą zapytań SQL!
już sobie poradzę dzięki i pozdrawiam ![]() |
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 10:51 |