Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Profil postaci z gry - proszę o pomoc w zbudowaniu.
QooBooS
post
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ł.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
QooBooS
post
Post #2





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...
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 22.10.2025 - 04:35