![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 16 Pomógł: 1 Dołączył: 15.10.2008 Ostrzeżenie: (0%) ![]() ![]() |
Witam.
Stworzyłem dziś stronę, która ma być moim małym prywatnym projektem. Polegać będzie ona na tym, iż użytkownicy będą zakładać konta i oprócz edycji profilu będzie tam także edycja "profilu" postaci w grze. Część formularza takiej edycji zrobiłem, gorzej jest z kilkoma polami, z którymi nie mogę sobie poradzić. Adres strony: www.conquerpostac.lua.pl/polapostaci.php Problemem jest pole "Umiejętności". Użyłem przy nim skryptu JS, który, po przyciśnięciu przycisku obok, dodaje poniżej takie samo pole. Jak się za to zabrać, jeśli będą to listy rozwijane, obok nich będą pola tekstowe, z czego każda linijka będzie jakby jedną "wartością" w bazie danych (nazwa umiejętności, poziom jej wytrenowania i procent ukończenia danego poziomu trenowania). Myślałem o tablicy, która do bazy wpisywałaby coś w stylu: {(nazwa1,poziom1,procent1),(nazwa2,poziom2,procent2),...}, a następnie (w innej podstronie) odczytywało by te wartości jako oddzielne umiejętności (każda składowa tablicy byłby jedną umiejętnością, np. w jednym miejscu wyświetlałoby Kod echo "$nazwa1 - poziom $poziom1, procent ukończenia: $procent1..."; i tak do każdej umiejętności). Poza tym nie wyobrażam sobie, aby po wysłaniu formularza, rozpoznawało pola (dodane przez przyciśnięcie przycisku dodającego pola) po parametrze name, który jest dla każdego taki sam (skill). Czy w takim razie skrypt JS powinien dodawać identyfikator za nazwą pola (np. skill1 dla pierwszego pola, skill2 dla drugiego,... - mówię tu o liście rozwijanej)? Czy w PHP nie ma takiego problemu i jakoś sobie poradzi?Proszę o pomoc w stworzeniu tego formularza (o uzupełnienie funkcji na podstawie tej pierwszej, "stałej" linijki w "Umiejętności" (umiejętności na liście będą wszędzie takie same). Proszę, aby w przypadku odwoływania się do bazy danych, pola w tabeli, do których będziecie się odwoływać, nazywały się tak samo jak "name" poszczególnych pól. Kod pliku polapostaci.php: Kod <?php require_once "maincore.php"; require_once "subheader.php"; require_once "side_left.php"; echo "<script type='text/javascript'> <!-- function dodaj_element(kontener){ var znacznik = document.createElement('select'); znacznik.setAttribute('name', 'skill'); znacznik.className = 'textbox1'; var kontener = document.getElementById(kontener); kontener.appendChild(znacznik); } //--> </script>"; $result = dbquery("SELECT * FROM polapostaci WHERE user_id='$cookie_1'"); $postac = dbarray($result); opentable('Postać'); echo "<form name='inputform' method='post' action='".FUSION_SELF."' enctype='multipart/form-data'>\n"; echo "<table align='center' cellpadding='0' cellspacing='0'>\n"; echo"<td class='tbl'>Nick postaci</span></td> <td class='tbl'><input type='text' name='nick' value='".$postac['nick']."' maxlength='15' class='textbox' style='width:160px;'></td> </tr> <tr> <td class='tbl'>Płeć</td> <td class='tbl'><input type='radio' name='plec' value='1' ".($postac['plec'] == "1" ? " checked" : "").">Mężczyzna <input type='radio' name='plec' value='0'".($postac['plec'] == "0" ? " checked" : "").">Kobieta</td> </tr> <tr> <td class='tbl'>Poziom</td> <td class='tbl'><input type='text' name='poziom' maxlength='3' value='".$postac['poziom']."' class='textbox' style='width:30px;'></td> </tr> <tr> <td class='tbl'>Klasa</td> <td class='tbl'><select class='textbox' name='klasa' style='width:200px;'> <optgroup label='Trojan'> <option>InternTrojan</option> <option>Trojan</option> <option>VeteranTrojan</option> <option>TigerTrojan</option> <option>DragonTrojan</option> <option>TrojanMaster</option> </optgroup> <optgroup label='Warrior'> <option>InternWarrior</option> <option>Warrior</option> <option>BrassWarrior</option> <option>SilverWarrior</option> <option>GoldWarrior</option> <option>WarriorMaster</option> </optgroup> <optgroup label='Archer'> <option>InternArcher</option> <option>Archer</option> <option>EagleArcher</option> <option>TigerArcher</option> <option>DragonArcher</option> <option>ArcherMaster</option> </optgroup> <optgroup label='Taoist'> <option>InternTaoist</option> <option>Taoist</option> </optgroup> <optgroup label='FireTaoist'> <option>FireTaoist</option> <option>FireWizard</option> <option>FireMaster</option> <option>FireSaint</option> </optgroup> <optgroup label='WaterTaoist'> <option>WaterTaoist</option> <option>WaterWizard</option> <option>WaterMaster</option> <option>WaterSaint</option> </select></td> </tr> <tr> <td class='tbl'>Partner</td> <td class='tbl'><input type='text' name='partner' value='".$postac['partner']."' maxlength='15' class='textbox' style='width:160px;'></td> </tr> <tr> <td class='tbl'>Battle Power</td> <td class='tbl'><input type='text' name='bp' value='".$postac['bp']."' maxlength='3' class='textbox' style='width:30px;'></td> </tr> <tr> <td class='tbl'>Gildia</td> <td class='tbl'><input type='text' name='gildia' value='".$postac['gildia']."' maxlength='15' class='textbox' style='width:160px;'></td> </tr> <tr colspan=2> <td colspan=2><hr> </td> </tr> <tr> <td class='tbl'>Umiejętno¶ci</td> <td class='tbl'> <div id='pliki'> <select name='skill' class='textbox'> <option>Pierwsza</option> <option>Druga</option> <option>Trzecia</option> </select> - Poziom: <input type='text' maxlength='1' name='skilllevel' value='".$postac['skilllevel1']."' class='textbox' style='width:13px;'>, <input type='text' maxlength='6' name='skillprocent1' value='".$postac['skillprocent1']."' class='textbox' style='width:40px;'>% <input type='button' value='+' onclick=dodaj_element('pliki'); /> </div> </td> </tr> <tr> <td colspan=2 align=center><br> <input type='submit' name='update_profile' value='Wy¶lij' class='button'></td> </tr> </table> </form>\n"; closetable(); require_once "side_right.php"; require_once "footer.php"; ?> PS: Używam PHP-Fusion w wersji 6.01.15. Zapytałem się o to na forum PF, jednak nikt nie odpowiedział. |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 120 Pomógł: 12 Dołączył: 9.10.2008 Skąd: Tricity.Rumia() Ostrzeżenie: (0%) ![]() ![]() |
Poza tym nie wyobrażam sobie, aby po wysłaniu formularza, rozpoznawało pola (dodane przez przyciśnięcie przycisku dodającego pola) po parametrze name, który jest dla każdego taki sam (skill). Czy w takim razie skrypt JS powinien dodawać identyfikator za nazwą pola (np. skill1 dla pierwszego pola, skill2 dla drugiego,... - mówię tu o liście rozwijanej)? Polecam sobie wyobrazic ;-) bo raczej w ten sposób trzeba to właśnie zrobic... moze pola nie skill1, skill2 itp tylko skill[1], skill[2] itd dzieki czemu potem przejedziesz sobie tablice foreach i nie bedzie problemu. Pytanie: Po co formularz tworzony dynamicznie ![]() Ten post edytował pinochet 15.10.2008, 18:03:55 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 16 Pomógł: 1 Dołączył: 15.10.2008 Ostrzeżenie: (0%) ![]() ![]() |
Polecam sobie wyobrazic ;-) bo raczej w ten sposób trzeba to właśnie zrobic... moze pola nie skill1, skill2 itp tylko skill[1], skill[2] itd dzieki czemu potem przejedziesz sobie tablice foreach i nie bedzie problemu. Pytanie: Po co formularz tworzony dynamicznie ![]() Tworzony będzie dynamicznie, ponieważ nie wiadomo z góry, ile umiejętności wybierze użytkownik. Postać może się nauczyć nawet do 30 umiejętności, a niektórzy umieją tylko kilka... Zgoda, ale czy potrafiłbyś to w jakiś przystępny dla mnie sposób wyjaśnić lub po prostu odwalić za mnie całą robotę? ;-) Choć osobiście wolałbym się tego nauczyć niż wkleić... Jeśli zdecydujesz się na pomoc, wybierz swój sposób - jeśli pomoże, będę bardzo wdzięczny. //EDYCJA------------------------------------------------------------- Można również zrobić coś takiego, że każdy użytkownik będzie miał przypisane wszystkie umiejętności, ale przy tych nie nauczonych będzie 0, co z kolei będzie informować skrypt, że jej jeszcze nie umie. Wydaje mi się, że byłoby to prostsze, ponieważ formularz wykonywałby tylko nadpisywanie wartości poszczególnych umiejętności. Przykładowo: użytkownik1: Nazwa umiejętności, poziom, procent ukończenia Pierwsza, 1, 56.001 Druga, 0, 0 Trzecia, 0, 0 Czwarta, 4, 12.454 I tak ze wszystkimi. Skrypt mógłby po prostu nadpisywać przykładowo drugą wartość dla umiejętności "Trzecia" (poziom) i wszystko sprowadzałoby się do upgrade'u danej komórki w bazie danych. Nie jestem pewien, jak to wygląda po stronie programowania, ponieważ jeszcze się na tym aż tak dobrze nie znam. Kolejna sprawa, w której potrzebuję pomocy, to uzależnienie ilości i typu komórek obok list rozwijanych w zależności od wybranej umiejętności. Być może brzmi to zawile, ale w moim wyobrażeniu sprowadzałoby się to do dodaniu skryptu, który czytałby parametry skryptu podane przy danym polu listy wyboru (coś jak komendy lub jakkolwiek się to nazywa) i w zależności od nich tworzył pola. Jaki parametr należy dodać do <option></option>, aby przy wybraniu danej "linijki" na liście rozwijanej, wykonywał się skrypt? Dla przycisku jest to onClick... Wydaje mi się, że skrypt ten powinien wyglądać podobnie do aktualnego (dodającego pola po przyciśnięciu przycisku), ale powinien wykonywać się po wybraniu umiejętności z listy rozwijanej dodanej przez użytkownika. Jeśli ktoś jest chętny mi pomóc, a nie do końca rozumie to, co tu napisałem, to proszę pisać na GG:1391614. Z góry serdecznie dziękuję za wszelką pomoc. Ten post edytował QooBooS 16.10.2008, 13:41:43 |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 656 Pomógł: 3 Dołączył: 26.10.2005 Skąd: Częstochowa Ostrzeżenie: (0%) ![]() ![]() |
na SELECT jest to onChange
http://webmade.org/porady/zdarzenia-events-js-javascript.php to tworzenia formularza polecam zapoznać się z poleceniami JS appendChild i createElement Ten post edytował misiek172 16.10.2008, 15:26:42 -------------------- zmoderowano - waga i rozmiar
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 16 Pomógł: 1 Dołączył: 15.10.2008 Ostrzeżenie: (0%) ![]() ![]() |
Witam.
Poradziłem sobie z tym po prostu zmieniając formularz. Teraz mam inny problem, który z pewnością potraficie rozwiązać. Niestety, ja nie mogę dojść, co jest źle. Po stworzeniu dwóch formularzy, napisałem polecenia wrzucające dane do bazy, a teraz chcę je odczytać. Chciałbym to zrobić przy pomocy pętli, która tworzyłaby odpowiednie pola tylko wtedy, gdy wartość aktualnie sprawdzanego pola jest różna od ''. Próbowałem na różne sposoby, ale coś nie chce mi to wyjść. Może ktoś ma jakiś pomysł? Kod echo "<form name='formularz' method='post' action='sprawdzpp.php?krok=3'>"; //Wczytanie wszystkich skilli $wczytajskille = dbquery("SELECT * FROM postac_skille WHERE nick='$nick' AND serwer='$serwer'"); $iloscskilli = mysql_num_fields($wczytajskille); $nazwapola = mysql_field_name($wczytajskille, $i); //Pętla tworząca pola dla powyższych skilli for ($i=0;$i<$iloscskilli;$i++) { if ($wczytajskille[$i] != '') { echo "<input type='text' disabled='yes' name='$nazwapola' value='".$wczytajskille[$i]."'> - Poziom: <input type='text' name='".$nazwapola."L' maxlength='1'>, <input type='text' name='".$nazwapola."P' maxlength='6'>%<br><br>"; } } Kompilator nie potrafi sobie przetłumaczyć $i w parametrach zmiennej $nazwapola. Jak w takim razie ustawić, aby mysql_field_name zawsze sprawdzało nazwę aktualnie przerabianego pola? Tabela przedstawia się następująco: Kod |id|nick|serwer|nazwa_umiejętności|nazwa_umiejętnościL|nazwa_umiejętnościP|nazwa innej_umiejętności|nazwa_innej_umiejętnościL|nazwa_innej_umiejętnościP|...| Pole z samą nazwą umiejętności informuje pętlę, czy zaznaczono tą umiejętność w poprzednim formularzu (możliwości są dwie: albo pole zawiera wartość 'on', albo ''). W przypadku, gdy wartość jest 'on', wtedy pętla ma tworzyć trzy pola, jedno zablokowane zawierające nazwę kolumny (czyli nazwę umiejętności), drugie i trzecie mają mieć nazwę [nazwapola]L i [nazwapola]P (poziom umiejętności - L i procent ukończenia danego poziomu - P) i mają być puste. Czy mógłby ktoś poprawić kod, aby pętla działała, jak należy? Nie mogę sobie z tym dać rady... |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 13.06.2025 - 02:26 |