PDA

Zobacz pełną wersję : Dodatkowe pola formularza nie przekazują zmiennych



DarkOfTheMoon
23-01-2006, 22:06
Witam serdecznie!

Przyznam szczerze, że moje zderzenie z CMS-ami nastąpiło tydzień temu i jeszcze dochodzę do siebie... po prostu Joomla mnie zauroczyła. Jej fantastyczna funkcjonalność to jedno, wyrzucenie mnie na głębsze wody programowania to drugie. Zmuszony jestem do jej drobnych modyfikacji i pierwsza kłoda pod nogami.

Muszę dodać kilka nowych pól do rejestracji użytkownika (telefon, województwo, itp.), dodałem kolumny w bazie danych (tabela jos_users), dodałem pola formularza na stronie components\com_registration\registration.html.php (nazwy pól formularza zgodne z nazwami kolumn bazy danych) i niestety fiasko. Baza nie zapisuje danych z tych dodatkowych pól formularza. Sprawdzam w pliku components\com_registration\registration.php czy zmienna została przekazana i dopisany kod


echo $row->telefon;

nie zwraca nic, zmienna nie została przekazana. Dlaczego? Zmienne oryginalne tzn. name, username itd. przekazywane są bez problemu.

Ratujcie... bom już cołkim zgłupł

stone
23-01-2006, 22:25
mozesz wkleic fragmenty gdzie zmieniles kod z podaniem linii?

DarkOfTheMoon
24-01-2006, 11:58
Tak obecnie wygląda funkcja registerForm z pliku registration.html.php


function registerForm($option, $useractivation) {
?>
<script language="javascript" type="text/javascript">
function submitbutton() {
var form = document.mosForm;
var r = new RegExp("[\<|\>|\"|\'|\%|\;|\(|\)|\&|\+|\-]", "i");

// do field validation
if (form.name.value == "") {
alert( "<?php echo html_entity_decode(_REGWARN_NAME);?>" );
} else if (form.username.value == "") {
alert( "<?php echo html_entity_decode(_REGWARN_UNAME);?>" );
} else if (r.exec(form.username.value) || form.username.value.length < 3) {
alert( "<?php printf( html_entity_decode(_VALID_AZ09), html_entity_decode(_PROMPT_UNAME), 2 );?>" );
} else if (form.email.value == "") {
alert( "<?php echo html_entity_decode(_REGWARN_MAIL);?>" );
} else if (form.password.value.length < 6) {
alert( "<?php echo html_entity_decode(_REGWARN_PASS);?>" );
} else if (form.password2.value == "") {
alert( "<?php echo html_entity_decode(_REGWARN_VPASS1);?>" );
} else if ((form.password.value != "") && (form.password.value != form.password2.value)){
alert( "<?php echo html_entity_decode(_REGWARN_VPASS2);?>" );
} else if (r.exec(form.password.value)) {
alert( "<?php printf( html_entity_decode(_VALID_AZ09), html_entity_decode(_REGISTER_PASS), 6 );?>" );
} else if (form.wojewodztwo.value == "wybierz") {
alert( "<?php echo html_entity_decode(_REGWARN_WOJEWODZTWO);?>" );
} else {
form.submit();
}
}
</script>
<form action="index.php" method="post" name="mosForm">

<div class="componentheading">
<?php echo _REGISTER_TITLE; ?>
</div>

<table class="contentpane" align="center">
<tr>
<td colspan="3"><?php echo _REGISTER_REQUIRED; ?></td>
</tr>
<tr>
<td width="30%">
<?php echo _REGISTER_NAME; ?> *
</td>
<td width="30%">
<input type="text" name="name" size="30" value="" class="inputbox" />
</td>
<td width="30%">
<?php echo _REGISTER_NAME_KOMENTARZ; ?>
</td>
</tr>

<tr>
<td>
<?php echo _REGISTER_UNAME; ?> *
</td>
<td>
<input type="text" name="username" size="30" value="" class="inputbox" />
</td>
<td>
<?php echo _REGISTER_UNAME_KOMENTARZ; ?>
</td>
</tr>

<tr>
<td>
<?php echo _REGISTER_PASS; ?> *
</td>
<td>
<input class="inputbox" type="password" name="password" size="30" value="" />
</td>
<td>
<?php echo _REGISTER_PASS_KOMENTARZ; ?>
</td>
</tr>

<tr>
<td>
<?php echo _REGISTER_VPASS; ?> *
</td>
<td>
<input class="inputbox" type="password" name="password2" size="30" value="" />
</td>
<td>

</td>
</tr>

<tr>
<td>
<?php echo _REGISTER_EMAIL; ?> *
</td>
<td>
<input type="text" name="email" size="30" value="" class="inputbox" />
</td>
<td>
<?php echo _REGISTER_EMAIL_KOMENTARZ; ?>
</td>
</tr>

<tr>
<td>
<?php echo _REGISTER_TEL_STACJON; ?>
</td>
<td>
<input type="text" name="kierunkowy" size="3" maxlength="2" class="inputbox" />&nbsp;<input type="text" name="tel_stacjon" size="8" maxlength="7" class="inputbox" />


</td>
<td>
<?php echo _REGISTER_TEL_STACJON_KOMENTARZ; ?>
</td>
</tr>

<tr>
<td>
<?php echo _REGISTER_TEL_KOMOR; ?>
</td>
<td>
<input type="text" name="tel_komor" size="10" maxlength="9" class="inputbox" />


</td>
<td>
<?php echo _REGISTER_TEL_KOMOR_KOMENTARZ; ?>
</td>
</tr>

<tr>
<td>
<?php echo _REGISTER_WOJEWODZTWO; ?>
</td>
<td>
<select size="1" name="wojewodztwo" class="inputbox">
<option selected>wybierz</option>
<option>dolnośląskie</option>
<option>kujawsko-pomorskie</option>
<option>lubelskie</option>
<option>lubuskie</option>
<option>łódzkie</option>
<option>małopolskie</option>
<option>mazowieckie</option>
<option>opolskie</option>
<option>podkarpackie</option>
<option>podlaskie</option>
<option>pomorskie</option>
<option>śląskie</option>
<option>świętokrzyskie</option>
<option>warmińsko-mazurskie</option>
<option>wielkopolskie</option>
<option>zachodniopomorskie</option>
</select>


</td>
<td>
<?php echo _REGISTER_WOJEWODZTWO_KOMENTARZ; ?>
</td>
</tr>



</table>

<input type="hidden" name="id" value="0" />
<input type="hidden" name="gid" value="0" />
<input type="hidden" name="useractivation" value="<?php echo $useractivation;?>" />
<input type="hidden" name="option" value="<?php echo $option; ?>" />
<input type="hidden" name="task" value="saveRegistration" />
<input type="button" value="<?php echo _BUTTON_SEND_REG; ?>" class="button" onclick="submitbutton()" />
</form>
<?php
}
}
?>

No i teraz przechodzę do pliku registration.php, dopisuję takie oto linijki w funkcji saveRegistration


echo $row->tel_komor;
echo $row->username;

i oryginalne username wyświetla, a dodane tel_komor nie... i tak jest ze wszystkimi dodanymi polami formularza. Sama rejestracja przebiega bez problemu, nie wyświetla komunikatów błędu, a w bazie danych pojawia się nowy użytkownik - niestety z pustymi komórkami tel_komor, wojewodztwo itd. Zapisuje tylko oryginalne name, username, password itd.

DarkOfTheMoon
24-01-2006, 13:26
No chyba znalazłem przyczynę. W pliku joomla.php muszę rozszerzyć klasę mosUser o dodane kolumny tabeli...

this
07-03-2006, 23:47
fajny post, w prosty sposob mozna uniknac instalowania dodatkowych komponetow etc.

dla uzupelnienia [ co prawdopodobnie jest juz przedawkowaniem informacji ;) ] mozna dodac ze dla wyswietlenia poszerzonej informacji w panelu adminstracyjnym trzeba dodac pola w admin.users.html.php

thx

zwiastun
08-03-2006, 00:06
O ile wiem, dziala pod joomla
15 dodatkowych pół, bez mieszania w kodzie, a potem przerabiania kolejnych skryptów w nowych wydaniach

http://mamboxchange.com/projects/userextended/

this
08-03-2006, 00:40
sprawdze ten sam komponent o ktorym piszesz umieszczony na http://forge.joomla.org sypie sie straszliwie, zreszta na forum autor wypowiadal sie ze to wersja testowa, ale sprawdze dziekuje,

mam pytanie na http://mambobrothers.com/ znalazlem komponent do zarzadzania grupami user i ich dostepami do poszczegolnych czesci portalu, ale kosztuje to 250 $ znasz moze podobny komponent ?