Przedszkolak
Postów: 52
Data rejestracji: 02.06.2008 22:31
|
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...
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 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
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,...)? 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:
<?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: Do osób, które mnie kojarzą: nie używam już EP IV, tylko PHP-Fusion w wersji 6.01.15
Wiadomość doklejona:
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ł?
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:
|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...
PW od moderatora:
- Przeniesienie tematu - Pieka 14.10 - 19:40
Edytowane przez QooBooS dnia 21.10.2008 22:59:09
|