Fixed the problem by adding if ( \'email\' == $type || \'email2\' == $type ) {
to the top of the snippet below and changing the first elseif to a if statment
我已经在我的WordPress主页上创建了一个WordPress注册表单,但我在验证电子邮件地址匹配方面有点问题。
这是我用来做这件事的代码。
elseif ( !is_email($userdata[\'user_email\'], true) )
$error = __(\'You must enter a valid email address.\', \'frontendprofile\');
elseif ( email_exists($userdata[\'user_email\']) )
$error = __(\'Sorry, that email address is already used!\', \'frontendprofile\');
elseif ( !empty($_POST[\'email\'] ) && !empty( $_POST[\'email2\'] ) ) {
if ( $_POST[\'email\'] == $_POST[\'email2\'] )
wp_update_user( array( \'ID\' => $current_user->id, \'user_email\' => esc_attr( $_POST[\'email\'] ) ) );
else
$error = __(\'The emails you entered do not match. Your email was not updated.\', \'frontendprofile\');
}
但当我点击注册按钮时,我一直会遇到这个错误
Warning: get_object_vars() expects parameter 1 to be object, null given in
我认为验证过程没有完全发挥作用,因此它没有接收电子邮件地址,而是在提交表单中显示空值,但我看不到这是在哪里发生的。
最合适的回答,由SO网友:Tom J Nowell 整理而成
首先,这不是一个错误,而是一个警告。如果它导致页面崩溃而不是逻辑错误,那是因为您正在将错误日志打印到屏幕上,而不是像您应该做的那样将其记录到日志文件中。关闭显示错误可以解决此问题。
这仍然给你留下了警告,这些警告仍然很糟糕。注意,在您的代码中,您使用了POST变量,并对其进行了转义,但没有检查值是什么。E、 g.表单字段可能为空,或者\'\'
/null
他们仍然会通过。
我建议你颠倒支票的顺序,你需要先检查电子邮件是否已设置,然后再检查是否为空,then, 一旦你确认确实有东西要核对,你会检查它是电子邮件的正确格式吗。现在你正以相反的顺序做这件事。
编辑:只是为了澄清您的代码应该做什么:
if email is not empty then
if email is not valid
error = \'...\'
else
if email1 == email 2 then
wp_update_user
else
error = \'...\'
在处理电子邮件之前,请检查电子邮件是否为空。
你实际上在做的是:
if email is not valid then <- oh dear, we haven\'t checked if email is set/empty, error/warning
error = \'...\'
else if email is not empty then < -- too late, we\'ve already used the email value!
if email1 == email2 then
wp_update_user