Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Multiple
Forum PHP.pl > Forum > Przedszkole
miSq
Ok tak na szybkiego. Biore sobie dane z bazy:

Kod
<tr class="Cmite">
     <td class="Cmite">Gracze:</td><td align="top">
    <select multiple name="player[]" size="8" class="selecta" style="width: 200px; float:left">
   {_list_user@<option value="%2">%3</option>}
   </select>Wcisnij CTRL aby wybrac wiecej graczy.
   </td>
 </tr>


co by mi wyświetliło wszystkich użytkowników.

Teraz ich dodajemy do innego rekordu:

  1. <?php
  2. db_query("INSERT INTO prefix_wars (datime,status,wlp,owp,opp,gegner,page,tid,mod,game,mtyp,land,txt,players) VALUES ('".get_datime()."','".$_POST['status']."','".$_POST['wlp']."','".$_POST['sumowp']."','".$_POST['sumopp']."','".$_POST['gegner']."',
  3. '".$_POST['page']."','".$_POST['tid']."','".$_POST['mod']."','".$_POST['game']."','".$_POST['mtyp']."','".$_POST['land']."','".$_POST['txt']."',
  4. '".$_GET['players'][]."')");
  5. ?>


poprawiam
ps: nie wiem czemu ale przekształca nawias ( na encję blink.gif
---
nospor


No i kiszka. Pokazuje mi sie komunikat:

Fatal error: Cannot use [] for reading in c:\usr\krasnal\www\1.0.5d\include\admin\wars.php on line 84


Jakies sugestie?
nospor
pierwsza sugestia - uzywaj wlasciwego bbcode

druga:
$_GET['players'][]. blink.gif
1)wszedzie odwolujesz sie do $_POST a tu nagle do $_GET. sie zdecyduj
2)dla selececta dales nazwe player a nie players
3)do wartosci multiple dobierasz sie bez drugiego []. dostaniesz tablice: $_POST['player']
4)zalezy teraz co chcesz zrobic z tą tablicą. do tego pola w tabeli to mozna wkladac kilku zawodnikow? po przecinkach? czy dla kazdego zawodnika jest oddzielny rekord?
jesli kilku to wkladasz: implode(',', $_POST['player']), pod warunkiem ze wogole ktos cos zaznaczyl w tym select'cie
jesli kazdy to inny rekord to musisz petla dla kazdego zawodnika zapytanie wykonac
miSq
O za ten kod to przepraszam, wina zmęczenia 20 godzin przed kompem to i takie sprawy sie zapomina. A co do mojego problemu:

1. Poprawilem - dalem POST
2. Zmienilem
3. Tutaj wlasnie nic nie rozumiem. Mozesz podac jakis przyklad?
4. Chcialbym wybierac kilku graczy, zeby ich dodac do jednego rekordu. Pozniej z niego odczytac i wrzucic na stronke.
nospor
3) no przeciez ci napisalem jak sie dobrac: $_POST['player'] i tu masz tablice zaznaczonych graczy, o ile oczywiscie cos wybrano w select. jesli nic nie wybrano to tablica $_POST nie zawiera indexu player.
4) czyli graczy wpisuj po przecinku, tak jak podalem . wpisz to zamiast tego co ty wpisywales: implode(',', $_POST['player'])
brachu
3) Zeby Ci to lepiej wytlumaczyc to z multiple dostaniesz tablice, ale w polaczeniu z tablica jaka jest $_POST dostajesz macierz czyli w Twoim przypadku dostaniesz $_POST['player'][0]. $_POST['player'][1], ... itd. w zaleznosci ile uzytkownik wybral tych palyerow z pole multiple.
4) Jezeli chcesz faktycznie miec w jednym rekordzie w tabeli w tym jednym polu tych wszystkich playerow no to tak jak Ci napisal nospor dajesz implode(',', $_POST['player']) - czyli wrzuci Ci cala zawartosc tej tablicy (wszystkich playerow) pooddzielanych od siebie przecinkami!

Pozdro
miSq
Bomba działa biggrin.gif w rekordzie mam ID playerów np. 5,6,7 itd. zalezy ilu wybralem.
Teraz tylko sobie poszukam jak zrobic zeby na stronie pokazywało mi tych playerów. Tj. odczytało rekord, rodzielilo x,x,x,x i wyswietlilo playerów, z tym chyba problemu nie bede mial.

Jeszcze tylko ostatnie pytanie. Bo to jest w Admin`nie dodawania meczy. To co opisalem jest przy [dodaj], teraz jesli chce edytowac chcialbym zeby pokazywaly mi sie nicki graczy jacy zostali zaznaczeniy przy [dodaj].

Wg. mnie to tak jedno zapytanie jest do bazy o wyswietlenie wszystkich grczy, a drugie bedzie zeby zaznaczylo tych co byli zaznaczeniu i tu bedzie problem. Bede musial poszukac jak zrobic zeby zaznaczylo mi te osoby w <select>.

Jesli mozecie dac jakies wskazówki, to poprosze.

Jeszcze raz dziekuje za pomoc.
nospor
ja to bym ci proponowal wogole zmienic troche uklad bazy. wywalic to pole z playerami i dodac nowa tabele, ktora bedzie laczyla playerow z danym rekordem z pierwszej tabeli. ulatwi to pozniej wyszukiwania i wogole moim zdaniem bedzie to lepsze rozwiązanie.

ale wracajac do rzeczy
do rozdzielenia x,x,x, sluzy explode.
Przy wyswieltaniu graczy w select'cie, muisz teraz rozdzielic graczy z pola, a nastepnie przy wprowadzaniu option sprawdzac, czy dany gracz jest dodany (in_array) i jesli tak to dopisac do option parametre selected. Proste smile.gif
miSq
nospor ratuj biggrin.gif
Mam sobie w tym rekordzie ID playerów np. 3,4,5 i nie mam problemu zebych ich wyświetliło w takiej kolejności. Teraz rodzielam je sobie - explode - i pokazuje mi sie tylko ten co jest podany w $liczba_graczy. Tzn. jesli $liczba_graczy=2; to wyświetli mi ID na drugej pozycji. Wiec napisałem pętlke, ale cos ona nie działa.

  1. <?php
  2.  
  3. $liczba_graczy=3;
  4. $player = explode(',', $row['players']);
  5. for($x=0; $x<$liczba_graczy; $x++){
  6. $row['squad'] = $player[$x];
  7. };
  8.  
  9. ?>


To $row['squad'] to jakaś częsc tpl i na stronie wyświetla się jako {squad}.

Pomozesz?
nospor
$row['squad'] = $player[$x]; - ty tu za kazdym krokiem petli nadpisujesz tę zmienną, co w rezultacie konczy sie tym, ze zawsze ma ona wartosc z ostatniego kroku smile.gif PRzemysl co chciales osiągnąc bo ja nie wiem co bylo twoim zamiarem smile.gif
brachu
  1. <?php
  2.  
  3. $liczba_graczy=3;
  4.         $player = explode(',', $row['players']);
  5.         for($x=0; $x<$liczba_graczy; $x++){
  6.            $row['squad'][$x] = $player[$x];
  7.            echo $row['squad'][$x]; //jakbys chcial sprawdzic czy wszystkie sa ;)
  8.         };
  9.  
  10. ?>


edit:

tylko nie wiem czy o to Ci chodzilo worriedsmiley.gif
miSq
  1. <?php
  2.  
  3. $liczba_graczy=3;
  4. $player = explode(',', $row['players']);
  5. for($x=0; $x<$liczba_graczy; $x++){
  6.  $row['squad'][$x] = $player[$x];
  7.  echo $row['squad'][$x]; //jakbys chcial sprawdzic czy wszystkie sa ;)
  8. };
  9.  
  10. ?>

Po pierwsze, nie moge użyć echo - $row['squad'] to jest funkcja która na stronie wyświetlam sobie jako {squad}, nic to nie ma do bazy danych. Moze ja najlepiej wkleje całość:

  1. <?php
  2. # lastwars
  3. $wlpar = array(1=>'wygrana',2=>'przegrana',3=>'remis');
  4. $row['erg'] = $row['owp'].' zu '.$row['opp'];
  5. $row['ergliste'] = get_erg_liste($_GET['mehr']);
  6. $row['wlp'] = $wlpar[$row['wlp']];
  7.  
  8. $liczba_graczy=3;
  9. $player = explode(',', $row['players']);
  10. for($x=0; $x<$liczba_graczy; $x++){
  11.  $row['squads'][$x] = $player[$x];
  12.  $row['squad'] = $row['squads'][$x];
  13. };
  14.  
  15. $title = $allgAr['title'].' :: Wars :: Lastwars';
  16. $hmenu = '<a href="?m=wars" class="smalfont">Wars</a><b> &raquo; </b>Lastwars'; 
  17. $design = new design ( $title , $hmenu );
  18. $design->header();
  19. $tpl = new tpl ('wars_last');
  20. $tpl->set_ar_out($row,0);
  21.  
  22. ?>



W takiej postaci wyświetla mi sie dalej tylko jeden ID, chciałem spróbować:

  1. <?php
  2. $liczba_graczy=3;
  3. $player = explode(',', $row['players']);
  4. for($x=0; $x<$liczba_graczy; $x++){
  5.  $row['squads'][$x] = $player[$x];
  6.  
  7. };
  8. $row['squad'] = $row['squads'][$x];
  9. ?>


, ale wtedy nic sie nie wyświetla.

O co mi chodzi? Są mecze 3x3, 6x6, 8x8 np. i ja chce wyświetlic tych graczy co brali w nich udzial. Jesli bym mecz 3x3, w bazie mam graczy o ID 3,4,5 to musze zrobic potrójna petlen zeby rodzielić ich i wyświetlic na stronie.

Moze jest jakis inny sposob?
nospor
piszesz ze masz szablon. jaki to szablon? smarty? przypisz tablice do squad a wszablonie polec po tablicy

  1. <?php
  2. $player = explode(',', $row['players']);
  3.  $row['squad'] = $player;
  4.  
  5. ?>


a mozety chcesz tych graczy jeden pod drigim zapisac? To wystarczy oddzielic ich <br />
  1. <?php
  2.  $row['squad'] = str_replace(',', '<br />',$row['players'] );
  3. ?>
miSq
O toż własnie mi chodziło. Wyswietlić wszystkich z tej bazy. Teraz mam już ID, tylko musze im przypisać nicki z bazy ale z tym problemu juz chyba nie bedzie.

A mowią ze na Świecie nie ma mądrych ludzi, oni poprostu nie wiedzą gdzie szukać biggrin.gif
W razie problemów jeszcze sie odezwe, bo napewno bede z tym zaznaczeniem w <select> graczy co sa w bazie.


P.S.

Nie moglem dodac drugie posta. Wiec problem jest taki. Ok moge wyswietlic ich ID, ale potrzebuje te ID jako osobna zmienna, po to by dac link do ich profilu.

Czyli musze pobrac dane SELECT name FROM prefix_user WHERE id = .......
Jednak bez pętli tego nie da sie zrobic.
nospor
jak masz juz te id w tablicy to:
  1. <?php
  2.  
  3. //$player - tablica z id
  4. $sql = 'SELECT id, name FROM prefix_user WHERE id in ('.implode(',', $player).')';
  5. //a tu pobierasz dane z tego zapytania. dostaniesz dla kazdego id name gracza
  6.  
  7. ?>

a wzasadzie ty masz tez id w postaci x,x,x. Mozesz wiece te implode zastapic tą wartoscia
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.