Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP для начинающих
Войти
Регистрация
Восстановить пароль
 
Пифагор
1186 / 989 / 515
Регистрация: 10.01.2015
Сообщений: 3,321
#1

Не могу разобраться с условием

24.01.2015, 14:17. Просмотров 303. Ответов 7
Метки нет (Все метки)

Приветствую, комрады!

Есть код:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
$c = true;
    if (isset($_POST['diskQuantityOrder']))
        foreach($_POST['diskQuantityOrder'] as $v)
 
    if ((!empty($v) && preg_match('/^[0-9]+$/', $v)) || $v > 0)
        $c = false;
 
    if ($c === true && isset($_POST['diskQuantityOrder']))
        echo '<em class="red">Вы не корректно заполнили одно или более поле &laquo;Заказ&raquo;. Пожалуйста, будьте внимательны!<br><a href="index.php">Вернуться на страницу заказа</a></em>';
 
    else
    {
        echo '<b>Менеджер: </b>'.$manager.'<br>';
        echo '<b>Получатель: </b>'.$getter.'<br><br>';
        echo '<b>Список дисков: </b>';
 
 
 
    foreach($_POST['diskQuantityOrder'] as $key => $diskQuantityOrder)
    {
        $q = mysql_query("SELECT * FROM disks");
        $result = mysql_fetch_array($q);
        $diskName = $_POST['diskName'][$key];
        $diskArticle = $_POST['diskArticle'][$key];
        $diskQuantity = $result['diskQuantity'][$key];
 
        if (!empty($diskQuantityOrder))
        {
            mysql_query("UPDATE disks SET diskQuantity = (diskQuantity - '$diskQuantityOrder') WHERE diskName = '$diskName'");
            echo '<br>'.$diskName.' ('.$diskArticle.') - <b>'.$diskQuantityOrder.'</b> шт.';
 
            $q1 = mysql_query("SELECT * FROM managers WHERE manager = '$manager'");
            $row = mysql_fetch_row($q1);
 
        // Отправка на почту --начало--
        $to  = 'ya.mosvizitka@yandex.ru';
        $subject = 'Диски';
 
        $message = '<b>Менеджер: </b>'.$manager.'<br>';
        $message .= '<b>Получатель: </b>'.$getter.'<br><br>';
        $message .= '<b>Список дисков: </b><br>';
 
            foreach($_POST['diskQuantityOrder'] as $key => $diskQuantityOrder)
            {
                $diskName = $_POST['diskName'][$key];
                $diskArticle = $_POST['diskArticle'][$key];
                
                if(!empty($diskQuantityOrder))
                    {
                        $_SESSION['diskName'] = $diskName;
                        $_SESSION['diskQuantityOrder'] = $diskQuantityOrder;
                        $_SESSION['diskArticle'] = $diskArticle;
                        $message .= '<br>'.$_SESSION['diskArticle'].' - <b>'.$_SESSION['diskQuantityOrder'].'</b> шт.';
                    }
            }
        $headers = 'Content-type: text/html; charset=utf-8' . "\r\n";
        $headers .= 'From: '.$row[2].'' . "\r\n";
 
 
        // Отправка на почту --конец--      
 
        }
    }

Мне нужно задать условие, что "Если количество в заказе на определенную позицию больше, чем есть, то не обновлять таблицу, а выводить с пометкой "На заказ"". Как на страницу обработчика, так и на почту.
Вот как я пытаюсь реализовать это:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
if (!empty($diskQuantityOrder) && $diskQuantityOrder <= $diskQuantity)
{
    mysql_query("UPDATE disks SET diskQuantity = (diskQuantity - '$diskQuantityOrder') WHERE diskName = '$diskName'");
    echo '<br>'.$diskName.' ('.$diskArticle.') - <b>'.$diskQuantityOrder.'</b> шт.';
}   
    else
    {
    if (!empty($diskQuantityOrder) && $diskQuantityOrder > $diskQuantity)
        {
            echo '<br>'.$diskName.' ('.$diskArticle.') - <b>'.$diskQuantityOrder.'</b> шт. На заказ';
        }
    }

Если 1ой строкой в заказ попадает позиция с условием $diskQuantityOrder > $diskQuantity, то все позиции в заказе помечаются "На заказ" и запрос к БД не проходит.

Если 1ой строкой в заказ попадает позиция с условием $diskQuantityOrder <= $diskQuantity, а 2ой строкой с условием $diskQuantityOrder > $diskQuantity, то, начиная со 2ой строки, все позиции помечаются "На заказ" и запрос к БД не проходит.

Так же я пробовал много других вариантов условий, но безрезультатно.
Скажите, что я делаю не так? Подозреваю, что дело в цикле, но в чем именно, понять не могу.

Заранее благодарен.

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.01.2015, 14:17
Ответы с готовыми решениями:

Не могу разобраться
Проблема следующего характера: есть хостинг и домен - приобретены у одного...

Не могу разобраться
По поводу настройки всей той кучи: РНР: register_globals = On Такой строки...

Не могу разобраться....(
Подскажите что не так я делаю((( &quot;&lt;li&gt;&lt;a title='читать далее'...

Не могу разобраться с WP
Добрый день, подскажите пожалуйста, выползла ошибка - Parse error: syntax...

не могу разобраться
Привет всем естъ такои запрос: mysql_query(&quot;SELECT name, city, sum ...

7
BarbosLV
363 / 401 / 165
Регистрация: 29.05.2014
Сообщений: 1,494
24.01.2015, 17:23 #2
Интересно а как сформирован $_POST ? Он многомерный у Вас?
0
Пифагор
1186 / 989 / 515
Регистрация: 10.01.2015
Сообщений: 3,321
24.01.2015, 17:36  [ТС] #3
Аммм...
Если я правильно понял вопрос, то нет, он не многомерный.
$_POST['diskName'] и $_POST['diskArticle'] передаются из скрытых input'ов.

Добавлено через 3 минуты
$_POST['diskQuantityOrder'] передается из введенных пользователем данных.

Добавлено через 1 минуту
Все работает, как надо. Только с этим условием никак разобраться не могу.
0
Jodah
Эксперт PHP
2704 / 2376 / 1013
Регистрация: 01.08.2012
Сообщений: 8,405
24.01.2015, 17:58 #4
Двумерный, судя по:
PHP
1
$_POST['diskName'][$key];
Немного смутил этот код:
PHP
1
2
$q = mysql_query("SELECT * FROM disks");
$result = mysql_fetch_array($q);
Если не ошибаюсь, mysql_fetch_array возвращает только одну строку. Чтобы получить все, нужно пропустить $result через while. Может в этом проблема.

Пример:

PHPHTML
1
2
3
4
5
$result = mysql_query("SELECT `id`, `name` FROM `table`");
 
while ($row = mysql_fetch_assoc($result) {
   echo $row['id'] . $row['name'];
}
0
BarbosLV
363 / 401 / 165
Регистрация: 29.05.2014
Сообщений: 1,494
24.01.2015, 18:03 #5
Цитата Сообщение от Пифагор Посмотреть сообщение
Если я правильно понял вопрос, то нет, он не многомерный.
Ну а что это тогда за циклы:
Цитата Сообщение от Пифагор Посмотреть сообщение
foreach($_POST['diskQuantityOrder'] as $v)
Цитата Сообщение от Пифагор Посмотреть сообщение
foreach($_POST['diskQuantityOrder'] as $key => $diskQuantityOrder)
???
0
Пифагор
1186 / 989 / 515
Регистрация: 10.01.2015
Сообщений: 3,321
24.01.2015, 18:17  [ТС] #6
PHP
1
2
$q = mysql_query("SELECT * FROM disks");
$result = mysql_fetch_array($q);
Да, он лишний. Забыл удалить просто.

Добавлено через 2 минуты
BarbosLV, В обработчике он многомерный, а в обработчик он передается так, как я писал.
Судя по всему, я чего-то не понимаю...

Добавлено через 1 минуту
Оказалось, что $diskQuantity вообще не передается.

Добавлено через 7 минут
Jodah, вот это не понял:
PHP
1
2
3
4
5
$result = mysql_query("SELECT `id`, `name` FROM `table`");
 
while ($row = mysql_fetch_assoc($result) {
   echo $row['id'] . $row['name'];
}
0
BarbosLV
363 / 401 / 165
Регистрация: 29.05.2014
Сообщений: 1,494
24.01.2015, 18:21 #7
Я к тому что многомерный $_POST не частое явление. А по сему было бы не плохо проверить все этапы формирования переменных, которые участвуют в условии.
0
Пифагор
1186 / 989 / 515
Регистрация: 10.01.2015
Сообщений: 3,321
24.01.2015, 19:50  [ТС] #8
через print_r($_REQUEST)?

Добавлено через 1 час 22 минуты
Разобрался.
Как говорится, дело было ни в бабине...

В общем, как я уже и говорил, оказалось, что $diskQuantity вообще не передавался.
Добавил в форму
HTML5
1
<input name="diskQuantity[]" type="hidden" value="'.$diskQuantity.'" form="orderEnd">
и все заработало.
0
24.01.2015, 19:50
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.01.2015, 19:50

Не могу разобраться
Всем ку, уже битый час сижу и пытаюсь разобраться в php, ничего не получается,...

не могу разобраться с << >>
&lt;&lt; Сдвиг влево битового представления значения левого целочисленного операнда...

Не могу разобраться
Выручайте ребяты :) Проблема такая есть страница заполнения формы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru