#javascript #html #smarty
#javascript #HTML #умный
Вопрос:
У меня есть следующий код, который проверяет форму перед отправкой на стороне сервера, что я хотел бы включить (если возможно), так это проверить сообщение на наличие URL-адресов и, если таковые имеются, предотвратить отправку сообщения.
if (!empty($_POST['name']) amp;amp; !empty($_POST['fromemail']) amp;amp; !empty($_POST['message']) amp;amp; $go == TRUE)
{
//data has been filled
$name = Filter::no_html($_POST['name']);
$from = Filter::no_html($_POST['fromemail']);
$start_dt = Filter::no_html($_POST['start_dt']);
$end_dt = Filter::no_html($_POST['end_dt']);
$comments = Filter::no_html($_POST['message']);
$validate->isEmpty($name, LANG_JAVASCRIPT_PLEASE_ENTER . " " . LANG_YOUR_NAME);
$validate->isEmpty($from, LANG_JAVASCRIPT_PLEASE_ENTER . " " . LANG_YOUR_EMAIL);
$validate->isSingleEmail($from, LANG_JAVASCRIPT_PLEASE_ENTER_EMAIL);
$validate->isEmpty($start_dt, LANG_JAVASCRIPT_PLEASE_ENTER . " " . LANG_START_DATE);
$validate->isEmpty($end_dt, LANG_JAVASCRIPT_PLEASE_ENTER . " " . LANG_END_DATE);
$validate->isEmpty($comments, LANG_JAVASCRIPT_PLEASE_ENTER . " " . LANG_YOUR_MESSAGE);
$modules->call_hook('contact_owner_submit', ''); // Call any module functions
$id = (int) @$_POST['ownerid'];
$vehicle = (int) @$_POST['listingid'];
if ($validate->isError())
{
Ответ №1:
Вы могли бы выполнить поиск сообщения с помощью метода stristr по определенным критериям в строке:
$has_url = (stristr($comments, 'http') || stristr($comments, 'www.'));
if($has_url) {
// prevent submit
}
Более подробная информация о методе stristr здесь:
https://www.php.net/manual/en/function.strstr.php
Итак, ваш код может выглядеть следующим образом:
if (!empty($_POST['name']) amp;amp; !empty($_POST['fromemail']) amp;amp; !empty($_POST['message']) amp;amp; $go == TRUE) {
$has_url = (stristr($_POST['message'], 'http') || stristr($_POST['message'], 'www.'));
if($has_url) {
// whatever happens if contains url
}
$name = Filter::no_html($_POST['name']);
$from = Filter::no_html($_POST['fromemail']);
$start_dt = Filter::no_html($_POST['start_dt']);
$end_dt = Filter::no_html($_POST['end_dt']);
$comments = Filter::no_html($_POST['message']);
$validate->isEmpty($name, LANG_JAVASCRIPT_PLEASE_ENTER . " " . LANG_YOUR_NAME);
$validate->isEmpty($from, LANG_JAVASCRIPT_PLEASE_ENTER . " " . LANG_YOUR_EMAIL);
$validate->isSingleEmail($from, LANG_JAVASCRIPT_PLEASE_ENTER_EMAIL);
$validate->isEmpty($start_dt, LANG_JAVASCRIPT_PLEASE_ENTER . " " . LANG_START_DATE);
$validate->isEmpty($end_dt, LANG_JAVASCRIPT_PLEASE_ENTER . " " . LANG_END_DATE);
$validate->isEmpty($comments, LANG_JAVASCRIPT_PLEASE_ENTER . " " . LANG_YOUR_MESSAGE);
$modules->call_hook('contact_owner_submit', ''); // Call any module functions
$id = (int) @$_POST['ownerid'];
$vehicle = (int) @$_POST['listingid'];
if ($validate->isError())
// whatever goes here
{
}
Комментарии:
1. Привет, Марк, большое спасибо за ваш ответ, просто интересно, как / куда я бы включил то, что вы предоставили, в мой код? Спасибо, Джейсон.
2. Привет, Джейсон. Нет проблем, хорошее место было бы вверху вашего оператора if, чтобы предотвратить дальнейшее выполнение функции, если значение $has_url равно true, и вместо этого использовать
$_POST['message']
вstristr()
функции перед определением$comments
переменной.3. Привет, Марк, извини за беспокойство, но, как ты думаешь, ты мог бы опубликовать код так, как, по твоему мнению, он должен выглядеть, поскольку я не уверен, как это сделать самому. Еще раз благодарю вас за вашу ценную помощь. Джейсон
4. Привет, Марк, ты звезда, это сработало как по волшебству, просто мысль, а также включение URL-адресов можно ли использовать, чтобы не отправлять сообщение, если оно содержит определенные слова, если да, то как бы мне это к нему добавить? Действительно ценю помощь, которую вы мне оказали.