
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
|