Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] wyciągnięcie id z bazy za pomocą petli
Forum PHP.pl > Forum > Przedszkole
reyne
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 winksmiley.jpg
slash^
bedzie latwiej cos poradzic jezeli pokazesz strukture bazy
reyne
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"


Nattfarinn
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!
reyne
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"];
}
nospor
rety, brakuje ")". Ty nie kopiuj bezmyslnie tylko mysl troche.
  1. <?php
  2. while($udata = mysql_fetch_array($zapytanie)) {
  3. //....
  4. ?>

I panowie uzywajcie wlasciwego bbcode
reyne
no nie dojrzałem winksmiley.jpg

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 rolleyes.gif

zapewne źle skonstruowane mam dodawanie do grupy, bo po kliknięciu "dołącz" dodaje mi usera do wszystkich grup a nie do tej wybranej :/
Nattfarinn
Cytat(nospor @ 20.12.2007, 09:44:41 ) *
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 smile.gif


Cytat(reyne @ 20.12.2007, 10:00:24 ) *
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):
  1. <?php
  2. $result = dbquery("SELECT * FROM mk_groups LIMIT 0 , 30");
  3. while ($dgdata = mysql_fetch_array($result))
  4. {
  5. if (isset($_POST['join']))
  6. {
  7. $wynik = dbquery("INSERT INTO ".$db_prefix."groups_joined VALUES ('', '".$dgdata['group_id']."', '".$userdata['user_id']."', '".$userdata['user_name']."')");
  8. }
  9. }
  10. ?>

Jasno widać: "Przypisz mnie do każdej grupy" winksmiley.jpg (dodałem klamry żeby było przejrzyściej widać problem)

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:
  1. <?php
  2. if (isset($_POST['join']))
  3. {
  4. $wynik = dbquery("INSERT INTO ".$db_prefix."groups_joined VALUES ('', '".$_POST['group_id']."', '".$userdata['user_id']."', '".$userdata['user_name']."')");
  5. }
  6. ?>
reyne
niestety dalej jest tak samo, w takim razie nie wiem już co może być nie tak ! sad.gif

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";
?>
nospor
@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!!!!
Nattfarinn
Cytat(Nattfarinn @ 20.12.2007, 10:23:47 ) *
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:
  1. <?php
  2. if (isset($_POST['join']))
  3. {
  4. $wynik = dbquery("INSERT INTO ".$db_prefix."groups_joined VALUES ('', '".$_POST['group_id']."', '".$userdata['user_id']."', '".$userdata['user_name']."')");
  5. }
  6. ?>

I zacznij kombinować, albo Cię nospor zje. A jak nie on to ja tongue.gif

Edit: tongue.gif Eh, tam w input hidden ma być oczywiście nie group_name, a group_id - ale jeśli myślisz a nie kopiujesz bezmyślnie kod to się domyślisz worriedsmiley.gif
reyne
no dobra, prawie gotowe (co ja bym bez Was zrobił rolleyes.gif )

działa, tylko że dodaje 2 razy tą samą wartość, tzn dodaje mnie 2 razy do tej grupy zamiast raz worriedsmiley.gif

dodaje tyle razy ile jest grup :/

co do group_id to domyśliłem się mistrzu! party.gif

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.. worriedsmiley.gif
nospor
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 tongue.gif
reyne
dobra, bez nerwów tongue.gif

zrobiłem i to i usuwanie,

jeszcze tylko wyświetlanie użytkowników którzy są w grupie się zepsuło rolleyes.gif

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 rolleyes.gif
Nattfarinn
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. winksmiley.jpg
reyne
śmiga biggrin.gif

dzięki za pomoc! rolleyes.gif

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 rolleyes.gif
Nattfarinn
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 smile.gif

Ale moze w ogóle nie o to Ci chodzi, problem w tym że nie wiem co chcesz osiągnąć: więcej szczegółów.
reyne
czyli za pomocą zapytań SQL!
już sobie poradzę

dzięki i pozdrawiam smile.gif
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.