sandh каза:
Meniak, s флага в регулярния израз не ти трябва, няма да match-ваш нови редове в email адрес. Също така не е нужно да го ескейпваш толкова сериозно. Всъщност точно това, че ескейпваш стринга и за html и за sql инжекции го кара да минава проверката добре.
В регулярния израз символите \ и ; не sa разрешени, но ' и & са разрешени, което е много странно. След като стринга мине през addslashes ' става на \', а & на & и проверката не минава заради \ и ;. Все пак най-малкото за всеки случай, че проверката се направи без стринга да е ескейпван е добре тези неща да се премахнат от регулярния израз.
Също така разрешени са + и -, които мисля, че не могат да присъстват във валиден email адрес.
Мисля, че нещо такова ще е по-добър вариант:
PHP:
<?php
$email = trim( $_POST['email'] );
if( !preg_match('/^[a-z0-9_\.]+@[a-z0-9\-]+\.([a-z0-9\-]+\.)*+[a-z]{2}/i', $email) ) {
echo 'Error';
exit;
}
// Тук вече ако този email ще се извежда на екрана
// трябва да мине през htmlspecialchars, а ако ще се
// вкарва в база данни трябва да мине през addslashes, но
// не и двете едновременно. Това ще ти обърка записа в БД или
// ще изведе на екрана нещо като bla\'tralala ако в стринга присъства
// апостроф
?>
и все пак има доста регулярни изрази за проверка на валиден email в интернет. Може да се потърси и някой по-пълен вариант.
Извинявай на мен този код не ми се получава как да го направя,благодаря ти:
<?php
include "config.php"; //Инклудваме конфиг файла!
if (isset($_POST['submit'])) { //Проверяваме дали е натиснат бутона submit!
$text = htmlspecialchars(addslashes($_POST['text']));
$grad = htmlspecialchars(addslashes($_POST['grad']));
$tel = htmlspecialchars(addslashes($_POST['tel']));
$email = trim(htmlspecialchars(addslashes( $_POST['email'])));
$ime = htmlspecialchars(addslashes($_POST['ime']));
$kategoriq = htmlspecialchars(addslashes($_POST['kategoriq']));
$data = date("d.F.Y H:i"); //Взимаме датата и часът на вавеждането на коментара!
$ip = $_SERVER['REMOTE_ADDR']; //Взимаме ипто на потребителят който е въвел коментара!
if ($email == NULL || $tel == NULL || $text == NULL || $grad == NULL) { //Правим провекра дали полетата са празни!
echo "Моля попълнете задължителните полета!"; //И ако са празни извеждаме грешка!
if( !preg_match('/^[a-z0-9_\.]+@[a-z0-9\-]+\.([a-z0-9\-]+\.)*+[a-z]{2}/i', $email) ) {
echo 'Error';
exit;
}
}
else {
$sql = "INSERT INTO publikuvai
(kategoriq, ime, grad, tel, email, text, data, ip) VALUES
('$kategoriq', '$ime', '$grad', '$tel', '$email', '$text', '$data', '$ip')"; //Ако всичко е попълнено както трябва въвждаме данните в Базата данни!
mysql_query($sql) or die (mysql_error()); //Испълняваме заявката!
header("LOCATION: publikuvai.php?id=$id"); //Този код прави така, че когато рефрешнете страницата след добавянето на коментар да не добавя коментара на ново!
}}?>