我正在编写一个调用API的插件,并使用电子邮件地址作为身份验证的一部分。
关于我的代码应该以变量的形式应该采用哪种方式我会变得非常困惑,因此不断出现未定义的变量错误。
此功能在Worpdress管理页面上输出表格,并允许用户输入他们的电子邮件地址。我希望在输入后清理电子邮件,然后将已清理的版本吐出到输入字段中。
function dotmailer_options() {
?>
<div class="wrap">
<h2>Dotmailer API information</h2>
<form method="post" action="options.php">
<?php settings_fields( 'settings-group' ); ?>
<?php do_settings_sections( 'settings-group' ); ?>
<label>API key</label><br />
<input type="email" name="apiemail" value="<?php echo $sanitized_email; ?>"><br />
<label>Password</label><br />
<input type="password" name="apipassword" value="<?php echo get_option('apipassword'); ?>"><br />
<p><input type="submit" value="Save" class="button-primary" /></p>
<?php
// Store email field as var
$apiemail = get_option('apiemail');
// Sanitize var
$sanitized_email = filter_var($apiemail, FILTER_SANITIZE_EMAIL);
?>
</form>
</div>
然而,当我这样做时,我在输入框中实际出现“未定义”错误。
我理解这可能是因为创建$sanitized_email
的代码在输入调用之后运行,但我无法理解我应该怎么做。
还会直接在此功能中使用代码打开我的攻击吗?我的插件代码顶部有以下内容:defined('ABSPATH') or die();
- 但我不知道这是否足够。
答案 0 :(得分:0)
你需要使用javascript或ajax,因为php是服务器代码而不是浏览器代码(即它只在服务器端运行),而javascript是浏览器代码,可以重新操作浏览器中的更改。
但是在这个阶段没有必要进行消毒,但是你当然会清理并验证表单提交$ _POST项目。如果将$ _POST或数据库中的变量信息显示给用户,则在将值输入到html之前将其转义。
如果出现问题,您可以使用javascript验证电子邮件以加快用户的速度。
<script>
function validateEmail() {
var x = document.forms["myForm"]["apiemail"].value;
var atpos = x.indexOf("@");
var dotpos = x.lastIndexOf(".");
if (atpos< 1 || dotpos<atpos+2 || dotpos+2>=x.length) {
document.elements["apiemail"].value = "Invalid email";
return false;
}
}
</script>
并以您的形式:
<input type="email" name="apiemail" value="" onchange="validateEmail()">
答案 1 :(得分:0)
我认为您收到未定义错误的原因是您尚未提前定义变量 - 请尝试放置...
$sanitized_email = "";
在您的表单处理代码之前。
另外,您是否使用某种形式的检查是否已设置表单?您可以使用隐藏字段并使用php检查if_isset以查看用户是否已尝试处理该表单。只有这样才需要清理变量。