2014-09-11 2 views
0

Я пишу плагин, который вызывает API и использует адрес электронной почты как часть аутентификации.PHP sanitize email из формы Wordpress

Я очень запутался в отношении того, какие круглые части моего кода должны идти в терминах переменных, и как таковые продолжают получать неопределенные переменные ошибки.

Эта функция выводит форму на странице администрирования 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

«apiemail» присутствует в db таблице 'options' с действующим адресом электронной почты – Saqueib

+1

, вам нужно будет установить переменную, чтобы функция узнала, является ли это показателем в первый раз или что-то уже обработано. – RST

ответ

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()"> 
0

Я думаю, что причина вы» re получение неопределенной ошибки - вы не определили переменную заранее - попробуйте поставить ...

$sanitized_email = ""; 

in before ваш код обработки формы.

Кроме того, вы используете какую-либо форму проверки, была ли форма установлена ​​или нет? Вы можете использовать скрытое поле и проверить if_isset с помощью php, чтобы узнать, попытался ли пользователь обработать форму. Только тогда понадобится санитарная переменная.