Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
 Аватар для Пифагор
2172 / 1655 / 840
Регистрация: 10.01.2015
Сообщений: 5,207

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

24.01.2015, 14:17. Показов 599. Ответов 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
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.01.2015, 14:17
Ответы с готовыми решениями:

Не могу разобраться
Доброго времени суток форумчане! Помогите разобраться с возникшей проблемой. А именно - начал изучать РНР по курсам Е.Попова и при разбре...

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

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

7
368 / 406 / 165
Регистрация: 29.05.2014
Сообщений: 1,494
24.01.2015, 17:23
Интересно а как сформирован $_POST ? Он многомерный у Вас?
0
 Аватар для Пифагор
2172 / 1655 / 840
Регистрация: 10.01.2015
Сообщений: 5,207
24.01.2015, 17:36  [ТС]
Аммм...
Если я правильно понял вопрос, то нет, он не многомерный.
$_POST['diskName'] и $_POST['diskArticle'] передаются из скрытых input'ов.

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

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

Пример:

PHP/HTML
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
368 / 406 / 165
Регистрация: 29.05.2014
Сообщений: 1,494
24.01.2015, 18:03
Цитата Сообщение от Пифагор Посмотреть сообщение
Если я правильно понял вопрос, то нет, он не многомерный.
Ну а что это тогда за циклы:
Цитата Сообщение от Пифагор Посмотреть сообщение
foreach($_POST['diskQuantityOrder'] as $v)
Цитата Сообщение от Пифагор Посмотреть сообщение
foreach($_POST['diskQuantityOrder'] as $key => $diskQuantityOrder)
???
0
 Аватар для Пифагор
2172 / 1655 / 840
Регистрация: 10.01.2015
Сообщений: 5,207
24.01.2015, 18:17  [ТС]
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
368 / 406 / 165
Регистрация: 29.05.2014
Сообщений: 1,494
24.01.2015, 18:21
Я к тому что многомерный $_POST не частое явление. А по сему было бы не плохо проверить все этапы формирования переменных, которые участвуют в условии.
0
 Аватар для Пифагор
2172 / 1655 / 840
Регистрация: 10.01.2015
Сообщений: 5,207
24.01.2015, 19:50  [ТС]
через print_r($_REQUEST)?

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

В общем, как я уже и говорил, оказалось, что $diskQuantity вообще не передавался.
Добавил в форму
HTML5
1
<input name="diskQuantity[]" type="hidden" value="'.$diskQuantity.'" form="orderEnd">
и все заработало.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.01.2015, 19:50
Помогаю со студенческими работами здесь

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

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

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

Не могу разобраться
Выручайте ребяты :) Проблема такая есть страница заполнения формы create_user.html, с нее все данные отправляются на creat_user.php. ...

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


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Видеокарта простаивает ночами? Вот 4 проекта, которые загрузят её наукой
Programma_Boinc 10.04.2026
Видеокарта простаивает ночами? Вот 4 проекта, которые загрузят её наукой Если на Windows стоит дискретная NVIDIA или AMD — можно отдать её вычислительную мощность реальным исследованиям. . . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru