Вопрос:

Как мне (1) создать случайно сгенерированное письмо в Javascript (2) автоматически заполнить форму с его помощью

javascript php wordpress

43 просмотра

1 ответ

6 Репутация автора

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

У меня есть установка WordPress (оставайтесь со мной ..), которая имеет плагин, в который вы вводите некоторую информацию, включая электронную почту, чтобы добавить, в данном случае, новое бронирование (вещь типа crm). Это сделано в бэк-энде администратором. В некоторых случаях у клиента нет адреса электронной почты, и в качестве хакерского обходного пути я хотел бы, чтобы система просто генерировала случайный адрес электронной почты в поле всякий раз, когда он остается пустым.

Большая часть плагина находится в Javascript, и я думаю, что нашел функцию проверки, где мой фрагмент может нуждаться в «инъекции»:

(1) Я довольно хорошо разбираюсь в PHP и написал что-то, что генерирует случайное электронное письмо (которое будет использоваться только для внутреннего использования)

//Random email address generator
function generateRandomString($length = 10) {
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$charactersLength = strlen($characters);
$randomString = '';
for ($i = 0; $i < $length; $i++) {
    $randomString .= $characters[rand(0, $charactersLength - 1)];
}
$randomString .= "@mysite.co.uk";
return $randomString;

}

(да, я знаю, есть миллион более совершенных способов сделать это)

(2) Я думаю, что нашел фрагмент javascript, который проверяет ввод электронной почты, и просто надеялся, что это может быть кусок кода, на который мне нужно взглянуть, чтобы сгенерировать случайное письмо, если ничего не было введено.

function sln_validateBooking() {
var $ = jQuery;
$('.sln-invalid').removeClass('sln-invalid');
$('.sln-error').remove();
var hasErrors = false;

var toValidate = [
    '#_sln_booking_service_select'
];

var fields = $('#salon-step-date').attr('data-required_user_fields').split(',');
$.each(fields, function(k, val) {
    toValidate.push('#_sln_booking_' + val);
});

$.each(toValidate, function (k, val) {
    if (val == '#_sln_booking_phone' && !$('[name=_sln_booking_createuser]').is(':checked')) {
        return;
    } else if (val == '#_sln_booking_email') {
        if (!$('[name=_sln_booking_createuser]').is(':checked') && !$(val).val()) {
            return;
        } else if (!sln_validateEmail($(val).val())) {
            $(val).addClass('sln-invalid').parent().append('<div class="sln-error error">This field is not a valid email</div>');
            if (!hasErrors) $(val).focus();
            hasErrors = true;
        }
    } else if (val == '#_sln_booking_service_select') {
        if (!$('[name=_sln_booking\\[services\\]\\[\\]]').size()) {
            $(val).addClass('sln-invalid').parent().append('<div class="sln-error error">This field is required</div>');
            if (!hasErrors) $(val).focus();
            hasErrors = true;
        }
    } else if (!$(val).val()) {
        $(val).addClass('sln-invalid').parent().append('<div class="sln-error error">This field is required</div>');
        if (!hasErrors) $(val).focus();
        hasErrors = true;
    }
});
return !hasErrors;

}

Что было бы здорово знать, так это: а) если бы я просто выстрелил себе в лицо и больше никогда не подходил к строчке кода, а также б) если есть удачное решение этого вопроса, я всегда буду в долгу за решение.

ОБНОВЛЕНИЕ: я решил, что, вероятно, было бы лучше передать этот случайно сгенерированный адрес электронной почты в пустое поле через метабокс, а не взламывать код плагина (который будет только перезаписан) ..

Однако .. я получаю 'uncaught referenceError: rand не определен в HTMLinputelement.onclick для обеих функций, если я делаю что-то вроде этого:

<input type="text" id="txt_name" placeholder="click to generate" value="" />
<br/>
<input type="button" class="button button-primary button-large" id="btn_Gen" 
onclick="rand();" value="Generate" />
<br/>
<input type="button" class="button button-primary button-large" id="btn_Run" 
onclick="fn_copy();" value="Autofill" />
<br/>
<script>
function rand() {
document.getElementById("txt_name").value = generateRandStr();
}

function generateRandStr() {
var candidates = "ABCDEFGHIJKLMNOPQRSTUVWXY123456789";
var randomemail = "",
rand;
for (var i = 0; i < 1; i++) {
for (var j = 0; j < 8; j++) {
rand = Math.floor(Math.random() * candidates.length);
randomemail += candidates.charAt(rand);
}
randomemail += "@blahblah.co.uk";
}
return randomemail;
}
//working    
function fn_copy() {
var temp = document.getElementById("txt_name").value;
if (temp != "") {
document.getElementById("_sln_booking_email").value = temp;
} else
alert("Text is Empty");
}
</script>

ПОМОГИТЕ!

Автор: NHUD Источник Размещён: 08.11.2017 10:16

Ответы (1)


0 плюса

3465 Репутация автора

После этой строки

} else if (!sln_validateEmail($(val).val())) {

удалите весь код, который уведомляет пользователя о неправильном вводе, и установите значение для вашего случайного электронного письма.

    } else if (!sln_validateEmail($(val).val())) {
        $(val).val(Math.random().toString(36).substring(5) + "@mysite.co.uk")
    }

Я не уверен, что вы хотите использовать этот Math.randomзвонок для создания миллиардов уникальных электронных писем, но он может помочь вам.

Автор: IrkenInvader Размещён: 08.11.2017 10:28
Вопросы из категории :
32x32