我有一个注册表单,用户可以在其中输入一些自己的信息。我自己并不喜欢所需的字段,所以形式非常自由。 因此,存在为用户生成屏幕名称的功能。 用户可以拥有登录名,全名(如John Doe),昵称(如C0olH} {kkr)或三者的任意组合。 [login]字段是可选的,因为用户可以选择通过社交网络进行注册。 因此,为用户生成屏幕名称背后的想法是
JavaScript的:
var nickname = $('#nickname');
var fullname = $('#fullname');
var screen_name = $('#screen-name');
if (nickname.val() && fullname.val()) {
screen_name.val(fullname.val()+" ("+nickname.val()+")");
} else {
screen_name.val(nickname.val() || fullname.val() || $('#login').val());
}
HTML:
<p>
<label for="login"><span><?= _("Login") ?></span><span class="asterix" style="color:red"> *</span></label>
<input type="text" name="login" id="login" value="111" class="textinput" required/>
</p>
<p>
<label for="fullname"><span><?= _("Full name") ?></span></label>
<input type="text" name="fullname" id="fullname" value="" class="textinput"/>
</p>
<p>
<label for="nickname"><span><?= _("Nickname") ?></span></label>
<input type="text" name="nickname" id="nickname" value="" class="textinput"/>
<input type="hidden" name="screen_name" id="screen-name" value="" />
</p>
然后我通过PHP存储screen_name字段:
$query_user_insert = $this->db_connection->prepare('INSERT INTO users (login, fullname, nickname, screen_name) VALUES(:login, :fullname, :nickname, :screen_name)');
$query_user_insert->bindValue(':login', $login, PDO::PARAM_STR);
$query_user_insert->bindValue(':fullname', $fullname, PDO::PARAM_STR);
$query_user_insert->bindValue(':nickname', $nickname, PDO::PARAM_STR);
$query_user_insert->bindValue(':screen_name', $screen_name, PDO::PARAM_STR);
问题是:
以上方法可以吗?一方面,表&#34;用户&#34;可能不符合SQL普通形式,因为&#34; screen_name&#34;场是多余的。另一方面,当有人想要搜索用户并查看他们的屏幕名称时,这可能是一个性能问题,这种情况经常发生。