为何注册表单中Last Name输入框消失?排查PHP函数调用问题
解决Last Name表单输入框消失的问题
嘿,我一眼就看出问题出在哪了——你的PHP代码里有字符串单引号嵌套的语法错误,导致PHP解析到一半就罢工了,后面的Last Name输入框自然就没机会生成啦。
问题根源
看你调用form_input函数时,最后一个attr参数里的data-error属性值用了单引号,而里面的can't又包含了单引号,比如这行:
form_input("Password", "passwordr", "password", "form-control", "", "required data-error='Password can't be null");
这里data-error='Password can't be null中,can't的单引号会提前闭合data-error的属性引号,PHP根本没法正确解析这个字符串,直接触发语法错误。而且你还漏掉了每个data-error属性值的闭合单引号,双重错误叠加,导致PHP停止执行后续代码,最后的form_input("Last Name", ...)调用完全没被执行,所以这个输入框就消失了。
修复方案
有两种简单的方式可以解决这个问题:
方法一:转义内嵌的单引号
在can't的单引号前加反斜杠\,同时补上属性值的闭合单引号:
form_input("Password", "passwordr", "password", "form-control", "", "required data-error='Password can\'t be null'"); form_input("Re-Password", "passwordr2", "password", "form-control", "", "required data-error='Password can\'t be null'"); form_input("Email", "email", "email", "form-control", "", "required data-error='Email can\'t be null'"); form_input("First Name", "fname", "text", "form-control", "", "required data-error='First Name 2-10 a-z'"); form_input("Last Name", "lname", "text", "form-control", "", "required data-error='Last Name 2-10 a-z'");
方法二:更换引号嵌套方式
把data-error的属性值用双引号包裹,同时把整个attr参数的外层换成单引号(PHP里单引号字符串不会解析变量,更适合这种场景):
form_input('Password', 'passwordr', 'password', 'form-control', '', 'required data-error="Password can\'t be null"'); form_input('Re-Password', 'passwordr2', 'password', 'form-control', '', 'required data-error="Password can\'t be null"'); form_input('Email', 'email', 'email', 'form-control', '', 'required data-error="Email can\'t be null"'); form_input('First Name', 'fname', 'text', 'form-control', '', 'required data-error="First Name 2-10 a-z"'); form_input('Last Name', 'lname', 'text', 'form-control', '', 'required data-error="Last Name 2-10 a-z"');
额外提示
以后遇到类似表单元素不渲染的问题,第一时间去看PHP的错误日志(或者临时开启错误显示),语法错误通常是这类问题的头号元凶。
内容的提问来源于stack exchange,提问作者daniel
相关产品推荐
相关产品推荐

