Benutzerfelder deaktivieren
deejay
- php
-2 lithaila0 Alexander Brock0 Sven Rautenberg0 deejay
Hallo liebe Gemeinde,
ich habe im HTML-Teil meines PHP-Boards Felder für das Geschlecht und das Geburtsdatum eines Users.
Bei einer Neuregistrierung sind diese beiden Felder PFLICHT.In den Profileinstellungen des Users habe ich diese <select>-Felder per "disabled" ausgegraut.
So, und hier ergibt sich das Problem:
Will der User nämlich jetzt seine anderen Profileinstellungen ändern, bekommt er eine Fehlermeldung, daß er Geburtsdatum & Geschlecht angeben MUSS.Die Werte werden allerdings korrekt eingegraut angezeigt, beim Speichern aber wohl nicht wieder übergeben.
Wie kann ich erreichen, daß die Felder weiterhin nicht auswählbar/änderbar sind, die Werte aber trotzdem übergeben werden?
Danke für jeden Tipp & Ratschlag!
Gruß
<INPUT type="hidden" name="geburt" value="24.12.1901">
Hallo,
<INPUT type="hidden" name="geburt" value="24.12.1901">
Werte, die nicht verändert werden sollen, über ein hidden-Feld wieder zurückzusenden, um sie dann erneut einzulesen, ist Unsinn.
Der User könnte die Werte ändern.
Arbeite mit einer Session und merke Dir dort die Werte, oder aber, wenn Du sowieso eine Datenbank zum Speichern verwendest, dann lass die nicht zu ändernden Felder beim Update einfach unberührt.
LG
Chris
Werte, die nicht verändert werden sollen, über ein hidden-Feld wieder zurückzusenden, um sie dann erneut einzulesen, ist Unsinn.
richtig, war aber so gefragt
oder aber, wenn Du sowieso eine Datenbank zum Speichernverwendest, dann lass die nicht zu ändernden Felder beim Update einfach unberührt.
Das scheint mir logisch.
Ich werde das mal prüfen und weitergeben und schauen was sich machen läßt.
Danke für den Denkanstoß!
oder aber, wenn Du sowieso eine Datenbank zum Speichern verwendest, dann lass die nicht zu ändernden Felder beim Update einfach unberührt.
Soweit, so gut... jetzt aber ergibt sich ein anderes Problem.
Ich habe im Form-Bereich eine if-Anweisung innerhalb derer sich die Felder befinden.
Ich bin so frei und füge den Code mal an. Vielleicht hat jemand eine Idee, wie ich die gender und birthday-Form-Felder aus dem Form-Bereich nehmen kann ohne die notwenige if-Anweisung zu verändern (und das Layout der Tabelle).
-----
Code:
<form action="usercp.php" method="post">
<div class="forbg" style="width:{$style['tableinwidth']}"><div class="forl"></div><div class="bll"></div>
<div class="fortitel" align="center"><strong>{$lang->items['LANG_USERCP_PROFILE_EDIT']}</strong></div>
</div>
<table cellpadding="0" cellspacing="0" border="0" style="width:{$style['tableinwidth']}"><tr><td class="tabl" ></td><td>
<table cellpadding="{$style['tableincellpadding']}" cellspacing="{$style['tableincellspacing']}" border="{$style['tableinborder']}" style="width:100%" class="tableinborder">
<if($profilefields_required!="")>
<then>
<tr>
<td class="tabletitle" align="left" colspan="2"><span class="smallfont">{$lang->items['LANG_REGISTER_NEEDED_INFORMATION']}</span></td>
</tr>
<tr align="left">
<td class="tablea"><span class="normalfont"><b>{$lang->items['LANG_REGISTER_BIRTHDAY']}</b></span></td>
<td class="tablea"><table>
<tr align="center" class="tablea_fc">
<td><span class="smallfont">{$lang->items['LANG_REGISTER_BIRTHDAY_DAY']}</span></td>
<td><span class="smallfont">{$lang->items['LANG_REGISTER_BIRTHDAY_MONTH']}</span></td>
<td><span class="smallfont">{$lang->items['LANG_REGISTER_BIRTHDAY_YEAR']}</span></td>
</tr>
<tr>
<td><select name="r_day">
<option value="0"></option>
$day_options
</select></td>
<td><select name="r_month">
<option value="0"></option>
$month_options
</select></td>
<td><input type="text" class="input" name="r_year" value="$r_year" maxlength="4" size="5" /></td>
</tr>
</table></td>
</tr>
<tr align="left">
<td class="tableb"><span class="normalfont"><b>{$lang->items['LANG_REGISTER_GENDER']}</b></span></td>
<td class="tableb"><select name="r_gender">
<option value="0">{$lang->items['LANG_REGISTER_NODECLARATION']}</option>
<option value="1"$gender[1]>{$lang->items['LANG_REGISTER_MALE']}</option>
<option value="2"$gender[2]>{$lang->items['LANG_REGISTER_FEMALE']}</option>
</select></td>
</tr>
$profilefields_required
</then>
</if>
[...]
<p align="center"><input class="input" type="submit" accesskey="S" value="{$lang->items['LANG_POSTINGS_SAVE']}" /> <input class="input" type="reset" accesskey="R" value="{$lang->items['LANG_POSTINGS_RESET']}" /></p>
<input type="hidden" name="action" value="$action" />
<input type="hidden" name="send" value="send" />
<input type="hidden" name="sid" value="$session[hash]" />
</form>
Hallo Freunde des gehobenen Forumsgenusses,
Wie kann ich erreichen, daß die Felder weiterhin nicht auswählbar/änderbar sind, die Werte aber trotzdem übergeben werden?
Gar nicht. Ändere dein Programm so, dass bei registrierten Benutzern diese Felder weder angibt noch überprüft, ob die Werte mitgesendet wurden.
Gruß
Alexander Brock
Moin!
Bei einer Neuregistrierung sind diese beiden Felder PFLICHT.In den Profileinstellungen des Users habe ich diese <select>-Felder per "disabled" ausgegraut.
disabled-Formularfelder werden nicht gesendet.
Wenn du die Felder unveränderbar und gesendet haben willst, verwende readonly.
In allen Fällen kann der Benutzer natürlich Manipulationen durchführen. Das ist ggf. extra zu prüfen.
- Sven Rautenberg
Wenn du die Felder unveränderbar und gesendet haben willst, verwende readonly.
Das Problem an "readonly" ist aber, daß ältere Browser dieses Attribut einfach übergehen und somit Änderungen machbar sind.
Außerdem kann man "readonly" nicht bei "select"-Feldern verwenden (XHTML-konform wird readonly="readonly" dort ignoriert).
Aber danke trotzdem für den Tipp!
Moin!
Das Problem an "readonly" ist aber, daß ältere Browser dieses Attribut einfach übergehen und somit Änderungen machbar sind.
Ältere Browser haben auch ein Problem mit "disabled"-Feldern, zeigen deren Status beispielsweise nicht an.
Außerdem kann man "readonly" nicht bei "select"-Feldern verwenden (XHTML-konform wird readonly="readonly" dort ignoriert).
Aha, bitte erzähle näheres. Testcode, Browser, etc. Wir sammeln sowas ja schließlich in unserer großen Kiste. ;)
- Sven Rautenberg
Moin!
Das Problem an "readonly" ist aber, daß ältere Browser dieses Attribut einfach übergehen und somit Änderungen machbar sind.
Ältere Browser haben auch ein Problem mit "disabled"-Feldern, zeigen deren Status beispielsweise nicht an.
Das stimmt, wäre aber ja kein Problem, da Änderungen ja eh nicht gemacht werden sollen ;-)
Außerdem kann man "readonly" nicht bei "select"-Feldern verwenden (XHTML-konform wird readonly="readonly" dort ignoriert).
Aha, bitte erzähle näheres. Testcode, Browser, etc. Wir sammeln sowas ja schließlich in unserer großen Kiste. ;)
<if($profilefields_required!="")>
<then>
<tr>
<td class="tabletitle" align="left" colspan="2"><span class="smallfont">{$lang->items['LANG_REGISTER_NEEDED_INFORMATION']}</span></td>
</tr>
<tr align="left">
<td class="tablea"><span class="normalfont"><b>{$lang->items['LANG_REGISTER_BIRTHDAY']}</b></span></td>
<td class="tablea"><table>
<tr align="center" class="tablea_fc">
<td><span class="smallfont">{$lang->items['LANG_REGISTER_BIRTHDAY_DAY']}</span></td>
<td><span class="smallfont">{$lang->items['LANG_REGISTER_BIRTHDAY_MONTH']}</span></td>
<td><span class="smallfont">{$lang->items['LANG_REGISTER_BIRTHDAY_YEAR']}</span></td>
</tr>
<tr>
<td><select name="r_day">
<option value="0"></option>
$day_options
</select></td>
<td><select name="r_month">
<option value="0"></option>
$month_options
</select></td>
<td><input type="text" class="input" name="r_year" value="$r_year" maxlength="4" size="5" /></td>
</tr>
</table></td>
</tr>
<tr align="left">
<td class="tableb"><span class="normalfont"><b>{$lang->items['LANG_REGISTER_GENDER']}</b></span></td>
<td class="tableb"><select name="r_gender">
<option value="0">{$lang->items['LANG_REGISTER_NODECLARATION']}</option>
<option value="1"$gender[1]>{$lang->items['LANG_REGISTER_MALE']}</option>
<option value="2"$gender[2]>{$lang->items['LANG_REGISTER_FEMALE']}</option>
</select></td>
</tr>
$profilefields_required
</then>
</if>
readonly="readonly" kann bei Select-Feldern nicht gewählt werden (logischerweise), weil ein reines Select-Feld als solches ja keine Werte übermittelt sondern dessen Option-Tags.
Und daher gehts nicht.
Getestet mit IE6, IE7b, FF1.5, Opera8.5 & Opera 9
- Sven Rautenberg
Gruß
Thomas