Another great way to handle spam is to validate your data… which helps to protect against SUS (silly user syndrome) as well. Друг чудесен начин да се справя спам е да проверите данните си ... което помага да се защитят срещу SUS (глупаво потребител синдром), както добре. Yes I just made that up. Да, просто направи това. The problem with this is the amount of effort it takes to code spam filters like that for all the forms on your website. Проблемът с това е сумата на усилията е необходимо, за да код спам филтри, подобно на всички форми на вашия сайт. We can make this process a lot faster though by automating a way to block spam data with regular expressions on repeating conditions. Можем да направим този процес много бързо макар и с автоматизирането начин за блокиране на спам данни с редовни изразяване на дублиращи условия.

Create a form in html as you normally would and make sure you can call the following function: Създаване на формата, в HTML, колкото нормално би и се уверете, че можете да се обадите на следните функции:

  1. //USAGE: $results .=(Continuous for multiple fields) formcheck($postdata,"Field",length(number),"A or AN, ALL, EMAIL, WEBSITE, etc.","REQUIRE, NA");
  2. //EXAMPLE: $results .= formcheck($postdata,"Name",30,"AN","REQUIRE"); Then check $results for errors. If == "" then process form.
  3. function formcheck ( $data , $field , $length , $type , $require ) {
  4. if ( $data == "" && $require == "REQUIRE" ) {
  5. $error .= "<li class= \" errors \" ><b>" . $field . "</b> Cannot be left blank</li>" ;
  6. return $error ;
  7. } elseif ( $data == "" && $require == "NA" ) {
  8. return ;
  9. }
  10. if ( strlen ( $data ) > $length ) $error .= "<li class= \" errors \" ><b>" . $field . "</b> is too long. Please use <b>" . $length . "</b> characters or less.</li>" ;
  11. switch ( $type ) {
  12. case "AN" : if ( ! preg_match ( "/^[a-z0-9 ] $/i" , $data ) ) $error .= "<li class= \" errors \" ><b>" . $field . "</b> can only contain letters and numbers and spaces</li>" ; break ;
  13. case "A" : if ( ! preg_match ( "/^[az] $/i" , $data ) ) $error .= "<li class= \" errors \" ><b>" . $field . "</b> can only contain letters and spaces</li>" ; break ;
  14. case "N" : if ( ! preg_match ( "/^[0-9] $/" , $data ) ) $error .= "<li class= \" errors \" ><b>" . $field . "</b> can only contain numbers</li>" ; break ;
  15. case "ALL" : if ( ! preg_match ( "/^[a-z0-9 \: \- \_ \? \& \; \# \. \" \/ \, \' \\ \ ] $/i" , $data ) ) $error .= "<li class= \" errors \" ><b>" . $field . "</b> contains invalid characters</li>" ; break ; //htmlspecialchars($data); better to do this for general data
  16. case "DATE" : if ( preg_match ( "/^[0-9]{2}-[0-9]{2}-[0-9]{4}$/" , $data ) === 0 ) $error .= "<li class= \" errors \" ><b>" . $field . "</b> must be in the format MM-DD-YYYY</li>" ; break ;
  17. case "PASS" : if ( ! preg_match ( "/^.*(?=.{6,})(?=.*[0-9])(?=.*[az])(?=.*[AZ]).*$/" , $data ) ) $error .= "<li class= \" errors \" ><b>" . $field . "</b> must be at least 6 characters with at least one lower case letter, one upper case letter & one digit.</li>" ;
  18. case "WEBSITE" : if ( ! preg_match ( "/^[a-z0-9 \. \/ \- :] $/i" , $data ) ) $error .= "<li class= \" errors \" ><b>" . $field . "</b> entered is invalid.</li>" ; break ;
  19. case "EMAIL" : if ( ! eregi ( "^[_a-z0-9-] ( \. [_a-z0-9-] )*@[a-z0-9-] ( \. [a-z0-9-] )*( \. [az]{2,4})$" , $data ) ) $error .= "<li class= \" errors \" >The <b>" . $field . "</b> address entered is invalid.</li>" ; break ;
  20. }
  21. return $error ;
  22. }

Call it up by using something like this. Обадете се с помощта на нещо като това. You can try filling in some dummy data for $postdata and testing it out: formcheck($postdata,”Name”,30,”AN”,”REQUIRE”) Можете да опитате някои сляпо попълване на данни за $ postdata то и изпитвателните от: formcheck ($ postdata, "Name", 30, "АН", "изискват")

  • $postdata - This should take the form of $_POST['name']. $ postdata - Това би трябвало да бъдат под формата на $ _POST [ 'име']. Always grab your variables from $_POST so you avoid variable tampering/resetting in-between. Винаги вземете вашата променливи от $ _POST, за да се избегне променлива подправяне / възстановяване по средата. You can also do a extract($_POST) if you’re that gung-ho about using the key as your variable. Можете също така да направя екстракт ($ _POST), ако сте, че gung-хо използвате ключа като променлива. In this case that would be $name. В този случай, че ще бъде $ името.
  • “Name” - This is just an identifier for each call there is human readable version of what that function call was checking. "Name" - това е просто един идентификатор за всеки конкурс има човешки четима версия на това, което тази функция призив беше извършена. It will be used only if the user encounters an error. Той ще бъде използван само ако потребителят срещне грешка.
  • 30 - This can be any number and specifies maximum length. 30 - Това може да бъде всеки номер и определя максималната дължина. Data can pass through this function OK if its between 1-30 characters long. Данните могат да минат през тази функция ОК, ако нейната между 1-30 символа.
  • “AN” - AN is the case you’re in. You can look in the function for further details of what the regular expression does in each case. "АН" - едно е случаят сте инча Можете да търсите във функция за по-нататъшна информация за това какво редовното изражение прави във всеки отделен случай. AN is meant to use the AlphaNumeric checker. АН е предназначена да се използва за проверка на буквено-цифрови. Anotherwords only letters, numbers, and spaces (which you can change manually if you wish). Anotherwords само букви, цифри и интервали (който можете да промените ръчно, ако желаете).
  • “REQUIRED” - If you set this to “NA” it will allow the field to pass with no data entered in it. "Необходимо" - ако сте задали този на "НС" това ще позволи на полето да мине без никакви данни, вписани в него. However if it is required it will check against the other parameters. Все пак, ако е необходимо ще проверява срещу други параметри.

You may want to do some additional research on regular expressions if you want to add or edit functionality here. Ако желаете, можете да направите някои допълнителни изследвания на редовни изрази, ако искате да добавите или редактирате функционалност тук. But this should cover the ground work so you can focus on your unique data validation scenarios. Но това трябва да покрие земята работа, така че можете да се съсредоточите върху вашите уникални данни за валидиране сценарии.

I tend to make my forms 1 page and have “checks”. Аз склонни да направя моите форми и да имат 1 страница "проверки". In following that structure I can stop and report out different information inside IF statements to see if submit was pressed, if the data is good, and what to do with that data. В следния структурата, че мога да спра и да докладват различни информацията вътре АКО изявления за да види дали е натиснат представя, ако данните са добри, и какво да правя с тази информация. It also helps retain information from the previous button press so I can allow the user to see their information again and possibly change it. То също помага за съхраняване на информацията от предишния натиснете бутона, за да позволи на потребителя да види тяхната информация отново и евентуално я променя. Of course it would be a good idea to run the formcheck function on the data before outputting it back into the input value to make sure the user is not inputting naughty XML or script data. Разбира се, че би било добра идея да пуснете formcheck функция на данните, преди да го върне обратно в outputting приноса стойност, за да се уверете, че потребителят не е въвеждащата палав XML или скрипт данни. This should be done anytime a user submits data that is displayed back to them. Това би трябвало да бъде направено по всяко време потребителят подава данни, които се показват обратно към тях.

Either use: htmlspecialchars ($data) and mysql_real_escape_string ($data) or something like this for the input value: Всяка употреба: htmlspecialchars ($ данни) и mysql_real_escape_string ($ данни) или нещо подобно за въвеждане на стойност:

if(isset($email) && formcheck($_POST['email'],”E-Mail”,50,”EMAIL”,”REQUIRE”) == “”) { echo $email; } ако (isset ($ имейл) и и formcheck ($ _POST [ 'имейл'], "Електронна поща", 50, "EMAIL", "изискват") == "") ($ ехо електронна поща;)

Same function as you’d use below, we’re just utilizing the function again. Същата функция, която използва по-долу, ние сме просто използвате функцията отново. The only downside is it gets rid of the users input completely if it matched illegal output. Единственото намаляване се получи от отървеш потребителите вход напълно, ако тя съвпадащи незаконна продукция. This isn’t too hard to add in which I might do at a later time pending any requests. Това не е твърде трудно да се Add, в която мога да направя по-късно време, в очакване на всякакви искания.

  1. //Heres my quick usage example
  2. if ( isset ( $_POST [ ’submit’ ] ) ) {
  3. $errorcatcher .= formcheck ( $postdata , "Name" , 30 , "A" , "REQUIRE" ) ;
  4. $errorcatcher .= formcheck ( $postdata , "Email" , 50 , "EMAIL" , "REQUIRE" ) ;
  5. $errorcatcher .= formcheck ( $postdata , "Website" , 100 , "WEBSITE" , "NA" ) ;
  6. if ( $errorcatcher == "" ) { //if empty then no errors
  7. //SUCCESS
  8. } else { //at least one error was found. lets print them.
  9. echo $errorcatcher ;
  10. }
  11. }
  12. if ( isset ( $errorcatcher ) || $_POST [ ’submit’ ] == "" ) {
  13. //Display the form
  14. }

A good practice to follow is to display neat and tidy forms. Една добра практика е да се следват за показване изпипан и подредено форми. Use CSS, tables and label tags. Използвайте CSS, таблици и етикет марки. Check out the forms under a content page at mmorpgexposed.com . Проучете формите по съдържанието на страницата mmorpgexposed.com. Not to toot my own horn, but, it is presented in an understandable, organized, and professional fashion. Не изсвирване с клаксон си рога, но тя е представена в разбираем, организиран и професионален начин. Note that I provided extra text which specify to users what kind of input I’m looking for. Имайте предвид, че при условие допълнителен текст, който посочва за потребителите какъв вход Търся. IE: “3-15 Alphanumeric”. IE: "3-15 буквено-цифрови". Follow through and validate on that. Разработи и потвърждава това. There’s no easier way to increase your bounce rate than to have sign up forms that are confusing to use (or ones that you need to fill out multiple times because you don’t understand why your input isn’t working). За това няма лесен начин да увеличите своята скача ставка, отколкото да се регистрирате форми, които са объркващи за използване (или тези, които трябва да попълните няколко пъти, защото те не разбират защо вход не работи).

If you’re feeling ambitious, run query that logs a users IP to a table and increases a count column to see how many attempts it takes for people to fill out your form now. Ако сте амбициозни чувството, пуснете заявка, че регистрите на потребителите ПР, за да маса и увеличения брой графа, за да видите колко опита е необходимо за хората, за да попълните формата сега. Leave it for a week and repeat the test with these changes and see if there’sa major difference in times it throws errors. Остави го за една седмица и повторете теста с тези промени и да видим дали има голяма разлика в пъти го хвърля грешки. My guess would be the larger the difference in errors the more of a difference in user signups you’ll see. Моят предполагам, ще бъде голяма разликата в грешките на повече от разлика в потребителски регистрации ще видим.


1 Comment(s) On 1 коментар (а) На

"Automating PHP Forms - Spam Filtering and Data Cleansing" "Автоматизиране PHP форми - филтриране на спам и Почистване на данните"
  1. MyAvatars 0,2 jhon - Apr 23, 2008 jhon - 23-ти април 2008

    i think it,sa great post. Мисля, че това, SA голям пост.



Leave A Comment: Оставете коментар:

Comments RSS Feed Коментари RSS Емисия

8 - 1 = 8 - 1 =

Custom Theme by Rob Malon | Content & Design © 2008 - Rob Malon [dot] Com. Специален тема от Роб Malon | Съдържание и дизайн © 2008 - Роб Malon [точка] СОМ. "));
"));