Я разрабатываю веб-сайт, который позволяет пользователю отправлять отзывы в систему. Я создал форму обратной связи, используя textarea и кнопку для отправки. Самое главное, когда пользователь нажимает кнопку «Отправить», если пользователь вводит некоторые слова, которые я не хочу им вводить, эта обратная связь не будет отправляться в систему; он будет предупреждать пользователя о том, чтобы выкинуть это слово перед подачей заявки.
С тех пор я просто создаю простой код, который будет эхом предупреждать, если пользователь вводит слово, которое я не хочу, чтобы они вводили форму обратной связи.
Вот мой код
<form action="main.php" method="post"> <textarea cols='10' rows='5' name='text'></textarea> <br/> <input type='submit' name='add' Value='Add to list' /> </form> <?php if (isset($_POST['add'])) { $banned = array('dog', 'cat', 'cow'); // Add more $entry = $_POST['add']; foreach($banned as $word): if (strpos($entry, $word) !== false) die('Contains banned word'); endforeach; } ?>
Это не работа. Может ли кто-нибудь помочь мне решить эту проблему?
Заранее спасибо.
Попробуйте
$entry = $_POST['text']; // Not $_POST['add']; foreach ($banned as $word): if (strpos($entry, $word) !== false) { echo 'Contains banned word'; exit; } endforeach;
Ваша $entry
будет значением текстового поля, т.е. $ _POST ['text'] not
$ _POST ['add']
ИСПОЛЬЗОВАТЬ функцию in_array http://php.net/manual/ru/function.in-array.php
$os = array("Mac", "NT", "Irix", "Linux"); if (in_array("Irix", $os)) { echo "Got Irix"; }
<?php if(isset($_POST['add'])){ $banned = array('dog', 'cat', 'cow'); // Add more $entry = $_POST['text']; if(in_array($entry,$banned)) { die('Contains banned word'); } } ?>
Вы хотите сделать цензуру слов. Для этого используйте функцию str_ireplace (). Я даю пример кода для него ниже. Эта функция выполняет замену слова другим.
<?php $find=array('galaxy', 'planet', 'moon'); $replace=array('spiral', 'earth', 'satelite'); if (isset($_POST['userinput'])&&!empty($_POST['userinput'])) { $user=$_POST['userinput']; $user_new=str_ireplace($find, $replace, $user); echo $user_new; } ?> <hr> <form action="index.php" method="POST"> <textarea cols="50" rows="10" name="userinput"><?php echo $user; ?></textarea><br /> <input type="submit" value="submit" /> </form>
Вместо отправки кода на сервер при каждом вводе текста я предлагаю вам использовать Javascript на стороне клиента и отправлять его только в том случае, если он прошел проверку.
HTML
<form action="main.php" method="post"> <input type="text" onchange="validate_function(this)"> //works with text area too. <input type='submit' name='add' Value='Add to list' /> </form>
Javascript
validate_function(a) { r=0; banned = array('dog', 'cat', 'cow'); var lines = a.val().split('\n'); for(var x=0;x<banned.length;x++) { for(var i = 0;i < lines.length;i++) { if (lines[i].indexOf(banned[x]) > -1) { r=1; break; } else { } } if(r==1) break; } if( r==0) return true; else return false; }
Все, что вам нужно сделать, это прекратить отправку формы, если у пользователя есть запрещенное слово
<form action="main.php" method="post"> <textarea cols='10' rows='5' name='text' id='text'></textarea> <br/> <input type='submit' name='add' Value='Add to list' onclick='validate()' /> </form>
в вашем javascript
<script> function validate() { var text = document.getElementById('text').value; var banned = new Array('dog', 'cat', 'cow'); for (var x in banned) { if ( strpos(text,banned[x],0) ) { continue; // will stop the loop return false; // will stop everything and will not let the form post to php } } return true; // will return true and will post the form to php } // Custom Function function strpos (haystack, needle, offset) { // http://phpjs.org/functions/strpos/ var i = (haystack + '').indexOf(needle, (offset || 0)); return i === -1 ? false : i; } </script>
Я надеюсь, это поможет
PS: Функция strpos
была взята из phpjs.org