Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.06.2018, 02:42   #1
RickeyF
Пользователь
 
Регистрация: 19.05.2017
Сообщений: 24
По умолчанию Интегрирование проверки

Доброго времени суток, ситуация такая. Нужно было сделать проверку на вводимые символы, нашёл вроде рабочий код. Нужно интегрировать эту проверку в код. Пробовал но что-то не то делаю то код просто выводится на экран то ещё что. Очень прошу кто шарит помогите.
Вот проверка:
PHP код:
    $pattern_name '/^[a-zA-Zа-яА-ЯЁё]{1,32}$/u';
    
$pattern_index '/^[0-9]{6}$/u';
    
$pattern_email '/^[\w\.\-]+\@+[a-z]+\.+[a-z]{1,5}$/';
    
$pattern_addres '/^[a-zA-Zа-яА-ЯЁё0-9\s\.]{1,100}$/u';// \s - пробел, точка
    
if (!empty($_POST['first_name'])){
        if(!
preg_match($pattern_name$_POST['first_name'])){
            echo 
"INVALID FNAME<br>";
        }
        
$f_name $_POST['first_name'];
    }
    if (!empty(
$_POST['last_name'])){
        if(!
preg_match($pattern_name$_POST['last_name'])){
            echo 
"INVALID LNAME<br>";
        }
        
$l_name $_POST['last_name'];
    }
    if (!empty(
$_POST['index'])){
        if(!
preg_match($pattern_index$_POST['index'])){
            echo 
"INVALID INDEX<br>";
        }
        
$index $_POST['index'];
    }if (!empty(
$_POST['addres'])){
        if(!
preg_match($pattern_addres$_POST['addres'])){
            echo 
"INVALID ADDRES<br>";
        }
        
$addres $_POST['addres'];
    }if (!empty(
$_POST['email'])){
        if(!
preg_match($pattern_email$_POST['email'])){
            echo 
"INVALID EMAIL<br>";
        }
        
$email $_POST['email'];
    }
    if(isset(
$f_name)){echo $f_name."<br>";}
    if(isset(
$l_name)){echo $l_name."<br>";}
    if(isset(
$index)){echo $index."<br>";}
    if(isset(
$addres)){echo $addres."<br>";}
    if(isset(
$email)){echo $email."<br>";} 
Вот кусок кода куда нужна проверка проверка:
PHP код:
Ваше Имя: <br />
     <
input type="text" name="name" /><br />
     
Ваша Фамилия: <br />
     <
input type="text" name="s_name" /><br />
     
Ваш адрес: <br />
     <
input type="text" name="address" /><br />
     
Почтовый индекс: <br />
     <
input type="text" name="post_index" /><br />
     
Ваш e-mail: <br />
     <
input type="text" name="email" /><br />
     </
p
Всё что вводится в эти поля отправляется в бд.
Вот полный код куда нужно интегрировать проверку:
PHP код:
<h2 align="center">Оформление заказа</h2>

<?
if($_SESSION['cart'] && !isset($_POST['order']))
{
?>
<form action="index.php?view=order" method="post" id="cart-form">

<table id="mycart" align="center" cellspacing="0" cellpadding="0" border="0">
      <tr>
            <th>Товар</th>
            <th>Цена</th>
            <th>Кол-во</th>
            <th>Всего</th>
      </tr>

      <? foreach($_SESSION['cart'] as $id => $quantity):
         
$product get_product($id);
      
?>
       
      <tr>
          <td align="center"><?=$product['title'];?></td>
          <td align="center">$<?=number_format($product['price'],2);?></td>
          <td align="center"><?=$quantity;?></td>
          <td align="center">$<?=number_format($product['price'] * $quantity ,2);?></td>
      </tr>
     
      <?endforeach;?>
     
</table>   
     <p class="total" align="center">Общая сумма заказа: <span class="product-price"><?=number_format($_SESSION['total_price'],2);?> $</span></p>
    
     <p align="center" style="color:  black;">
    
Ваше Имя: <br />
     <input type="text" name="name" /><br />
     Ваша Фамилия: <br />
     <input type="text" name="s_name" /><br />
     Ваш адрес: <br />
     <input type="text" name="address" /><br />
     Почтовый индекс: <br />
     <input type="text" name="post_index" /><br />
     Ваш e-mail: <br />
     <input type="text" name="email" /><br />
     </p>
    
    
     <p align="center"><input type="submit" name="order" value="Заказать" /></p>   
</form>

<?
}
if(
$_SESSION['cart'] && isset($_POST['order']))
{
    foreach(
$_POST as $ArrKey => $ArrStr)
    {
        
$ArrKey $_POST[$ArrKey];
    }
    
$date date('Y-m-d');
    
$time date('H:i:s');
   
    foreach(
$_SESSION['cart'] as $id => $quantity):
    
$product get_product($id);
        
$query mysql_query("INSERT INTO orders(name,s_name,address,post_index,email,date,time,product,prod_id,price,qty) VALUES ('$name','$s_name','$address','$post_index','$email','$date','$time','{$product['title']}','{$product['id']}','{$product['price']}','$quantity')");
    endforeach;
   
    echo 
"<p align='center' style='color: #black;'>Ваш заказ успешно принят! Спасибо за покупку!</p>";
}
?>
RickeyF вне форума Ответить с цитированием
Старый 07.06.2018, 07:29   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от RickeyF Посмотреть сообщение
Вот кусок кода куда нужна проверка проверка:
Это же HTML. HTML отображается на клиенте. И там вводятся данные. И проверить их (без отсылки на сервер) на PHP - НЕЛЬЗЯ.
Обычно эту проверку выполняют на JavaScript, который выполняется именно на клиенте.
Вам нужно разобраться, где и когда выполняется PHP.
вот статья в помощь - FAQ
Serge_Bliznykov вне форума Ответить с цитированием
Старый 08.06.2018, 22:03   #3
Ottava
Форумчанин
 
Регистрация: 05.09.2017
Сообщений: 157
По умолчанию

Цитата:
Сообщение от RickeyF Посмотреть сообщение
Нужно интегрировать эту проверку в код.
Я бы вставил так:
Код:
<?php
if ($_SESSION['cart'] && isset($_POST['order']))
	{
	foreach($_POST as $ArrKey => $ArrStr)
	    {
		switch($ArrKey) {
			case 's_name':
				if (!preg_match('/^[a-zA-Zа-яА-ЯЁё]{1,32}$/u', $_POST[$ArrKey])) $err[] = "INVALID FNAME";
				else $f_name = $_POST[$ArrKey];
				break;
			case 'l_name':
				if (!preg_match('/^[a-zA-Zа-яА-ЯЁё]{1,32}$/u', $_POST[$ArrKey])) $err[] = "INVALID LNAME";
				else $l_name = $_POST[$ArrKey];
				break;
			case 'address':
				if (!preg_match('/^[a-zA-Zа-яА-ЯЁё0-9\s\.]{1,100}$/u', $_POST[$ArrKey])) $err[] = "INVALID ADDRESS";
				else $address = $_POST[$ArrKey];
				break;
			case 'post_index':
				if (!preg_match('/^[0-9]{6}$/u', $_POST[$ArrKey])) $err[] = "INVALID INDEX";
				else $post_index = $_POST[$ArrKey];
				break;
			case 'email':
				if (!preg_match('/^[\w\.\-]+\@+[a-z]+\.+[a-z]{1,5}$/', $_POST[$ArrKey])) $err[] = "INVALID EMAIL";
				else $email = $_POST[$ArrKey];
				break;
			default: ;   // игнорировать левые ключи, враги могут прислать в POST что угодно
			}
	    }
	if (isset($f_name)) {echo $f_name."<br>";}  else $err[] = "Не прислано FNAME";
	if (isset($l_name)) {echo $l_name."<br>";}  else $err[] = "Не прислано LNAME";
	if (isset($index))  {echo $index."<br>";}   else $err[] = "Не прислан INDEX";
	if (isset($addres)) {echo $addres."<br>";}  else $err[] = "Не прислан ADDRES";
	if (isset($email))  {echo $email."<br>";}   else $err[] = "Не прислан EMAIL";

	if (!isset($err))   // Нет ошибок в присланных из формы данных
	    {
	    foreach($_SESSION['cart'] as $id => $quantity):
		    $product = get_product($id);
    	           $query = mysql_query("INSERT INTO orders(name,s_name,address,post_index,email,date,time,product,prod_id,price,qty) VALUES ('$name','$s_name','$address','$post_index','$email','$date','$time','{$product['title']}','{$product['id']}','{$product['price']}','$quantity')");
	    endforeach;
	    echo "<p align='center' style='color: #black;'>Ваш заказ успешно принят! Спасибо за покупку!</p>"; 
	    }
   else echo 'Возникли ошибки:<br>'.implode('<br>', $err);
   }
?>


Код, конечно, некрасивый, но должно работать.Вообще, так писать на PHP плохо, особенно систему заказов.

Лучше бы вы привлекли специалиста, если это не студенческое задание. Если студенческое - я бы влепил трояк максимум за отсутствие ООП и перемешивание вывода данных с их обработкой

И отдельный минус за использование регулярок для проверки емайл, пора уже использовать фильтры валидации данных, в частности, для ermail: filter_var($email, FILTER_VALIDATE_EMAIL)
Безопасность с Content Security Policy

Последний раз редактировалось Ottava; 08.06.2018 в 22:24.
Ottava вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
численное интегрирование Александримя Паскаль, Turbo Pascal, PascalABC.NET 0 08.04.2013 15:34
ДИФФЕРЕНЦИРОВАНИЕ И ИНТЕГРИРОВАНИЕ Lisёноk Помощь студентам 1 10.12.2011 21:53
Численное интегрирование km77 Помощь студентам 3 02.06.2011 09:21
Численное интегрирование abs123 Паскаль, Turbo Pascal, PascalABC.NET 1 26.12.2010 22:43
интегрирование alla _ zip Помощь студентам 1 04.05.2010 20:16