Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
82 / 82 / 18
Регистрация: 03.02.2016
Сообщений: 564
Записей в блоге: 1
1

Работа с формой

27.02.2016, 12:21. Показов 1043. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть код:
Кликните здесь для просмотра всего текста
PHP/HTML
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
64
65
66
<?php
header ("Content-Type:text/html; charset=UTF-8");
ini_set ('display_errors', 1); 
error_reporting (E_ALL);
 
$sQValue  = '';
$sStrict  = '0'; // точный поиск (1-да/0-нет) "0"
$sCross   = '0'; // поиск с кросами (1-да/0-нет) "0"
$sReplace = '0'; // поиск с заменами (1-да/0-нет) "0"
 
if ($sStrict == '0')  $sStrictStatus  = ''; else $sStrictStatus  = 'checked';
if ($sCross == '0')   $sCrossStatus  = ''; else $sCrossStatus  = 'checked';
if ($sReplace == '0') $sReplaceStatus  = ''; else $sReplaceStatus  = 'checked';
 
if(isset($_REQUEST['q'])) { // Обработка кнопки "Найти"
 
    $sQValue = $_REQUEST['q'];
    
    if (isset($_REQUEST['strict']))  {
        $sStrict = '1';
        $sStrictStatus  = 'checked';
    }   else {
        $sStrict = '0';
        $sStrictStatus  = '';
    };
    
    if (isset($_REQUEST['cross']))  {
        $sCross = '1';
        $sCrossStatus  = 'checked';
    }   else {
        $sCross = '0';
        $sCrossStatus  = '';
    };
 
    if (isset($_REQUEST['replace']))  {
        $sReplace = '1';
        $sReplaceStatus  = 'checked';
    }   else {
        $sReplace = '0';
        $sReplaceStatus  = '';
    };  
};
 
echo ('/strict '.$sStrict.'/cross '.$sCross.'/replace '.$sReplace.'<br>');
 
$sFindFormHTML = '
            <form>
                <input type = "hidden" name = "type" value = "article">
                <p>
                введите артикул: <input type = "text" name = "q" value = "'.$sQValue.'" placeholder = "48510-29176" pattern=".{0,15}" required title="">
                <input type = "submit" value = "Найти">
                </p>
                <hr>
                <p>
                <input type = "checkbox" name = "strict" value = "'.$sStrict.'" '.$sStrictStatus.'> строгое соответствие *
                <input type = "checkbox" name = "cross" value = "'.$sCross.'" '.$sCrossStatus.'> с кроссами *
                <input type = "checkbox" name = "replace" value = "'.$sReplace.'" '.$sReplaceStatus.'> с заменами
                </p>
            </form>
    ';
 
$sPageHTML = '
    '.$sFindFormHTML.'
    ';
echo (''.$sPageHTML);
?>

Без запроса выводит: /strict 0/cross 0/replace 0

Вводим число "123", ставим флажок "строгое соответствие" нажимаем на кнопку, выводит:
/strict 1/cross 0/replace 0 (вроде как надо)
но в адресной строке:
?type=article&q=123&strict=0
Нажимаем еще раз на кнопку и в адресной строке:
?type=article&q=123&strict=1
И так с каждым флажком, почему так происходит? Подскажите где я намудрил в коде?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.02.2016, 12:21
Ответы с готовыми решениями:

Работа с формой
Коллеги, день добрый. Помогите разобраться. Вопрос 1. В результате отработки ниже...

Работа с формой
Как написать программу-вычислитель в заданной системе счисления (меньше 10), которая позволяет...

Работа с формой
как сделать что бы при вводе в форму например числа 15 выводило в зависимости от интервала 0-10...

Работа с формой
Передо мной стоит задание сделать возможность предварительного просмотра формы перед отправкой,...

6
Эксперт PHP
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
27.02.2016, 15:04 2
Gcom, у вас сначала все считается, а потом по результатам расчетов рисуется форма. Т.е. чтобы единичка появилась в строке запроса, нужно поставить галочку, нажать на кнопку, а потом ещё раз нажать на кнопку. Можете даже перед вторым нажатием снять эту галочку и/или поставить другие галочки.
0
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
27.02.2016, 21:20 3
Лучший ответ Сообщение было отмечено Gcom как решение

Решение

Цитата Сообщение от Gcom Посмотреть сообщение
Подскажите где я намудрил в коде?
Намудрили много где

Но основное - зачем-то меняете value у checkbox'ов. Это бессмыслица.
PHP/HTML
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
<?php
 
$sQValue  = isset($_GET['q']) ? $_GET['q'] : '';
 
$sStrict  = isset($_GET['strict']) ? '1' : '0';
$sCross   = isset($_GET['cross']) ? '1' : '0'; 
$sReplace = isset($_GET['replace']) ? '1' : '0';
 
$sStrictStatus  = isset($_GET['strict']) ? ' checked' : '';
$sCrossStatus   = isset($_GET['cross']) ? ' checked' : ''; 
$sReplaceStatus = isset($_GET['replace']) ? ' checked' : '';
 
echo ('/strict '.$sStrict.'/cross '.$sCross.'/replace '.$sReplace.'<br>');
?>
<form method='get'>
    <input type='hidden' name='type' value='article'>
    <p>
        введите артикул: <input type='text' name='q' value='<?=$sQValue?>' placeholder='48510-29176' pattern='.{0,15}' required>
        <input type='submit' value='Найти'>
    </p>
    <hr>
    <p>
        <input type='checkbox' name='strict'<?=$sStrictStatus?>> строгое соответствие В*
        <input type='checkbox' name='cross'<?=$sCrossStatus?>> с кроссами В*
        <input type='checkbox' name='replace'<?=$sReplaceStatus?>> с заменами
    </p>
</form>
1
82 / 82 / 18
Регистрация: 03.02.2016
Сообщений: 564
Записей в блоге: 1
28.02.2016, 07:02  [ТС] 4
Цитата Сообщение от pav1uxa Посмотреть сообщение
Но основное - зачем-то меняете value у checkbox'ов. Это бессмыслица.
Хотел привязать к переменным и в дальнейшем использовать эту связку + нужно было "сохранять" выбранное значение флажков.
PHP
1
2
3
$sStrict  = '0'; // точный поиск (1-да/0-нет) "0"
$sCross   = '0'; // поиск с кросами (1-да/0-нет) "0"
$sReplace = '0'; // поиск с заменами (1-да/0-нет) "0"
Добавлено через 4 минуты
pav1uxa, код конечно шикарен, в плане минимизации, но меня всегда смущали конструкции вида:
PHP
1
<переменная>  = <условие> ? <действие если да> : <действие если нет> ;
А что если после сработки условия нужно сделать несколько действий, тогда как быть?
0
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
28.02.2016, 07:38 5
Цитата Сообщение от Gcom Посмотреть сообщение
Хотел привязать к переменным и в дальнейшем использовать эту связку + нужно было "сохранять" выбранное значение флажков.
Ну у меня переменные 0\1 тоже сохраняются. А выбранные значения флажков устанавливаются через атрибут checked, а не через value="0/1".
Цитата Сообщение от Gcom Посмотреть сообщение
код конечно шикарен, в плане минимизации
Он шикарен еще и потому что работает
Цитата Сообщение от Gcom Посмотреть сообщение
А что если после сработки условия нужно сделать несколько действий, тогда как быть?
Если да кабы... Если б нужно тогда бы я посмотрел. А то что у Вас это вообще абракадарбра. У Вас вот эти 6 строчек кода если удалить из программы, не изменится совершенно ничего
PHP
1
2
3
4
5
6
7
$sStrict  = '0'; // точный поиск (1-да/0-нет) "0"
$sCross   = '0'; // поиск с кросами (1-да/0-нет) "0"
$sReplace = '0'; // поиск с заменами (1-да/0-нет) "0"
 
if ($sStrict == '0')  $sStrictStatus  = ''; else $sStrictStatus  = 'checked';
if ($sCross == '0')   $sCrossStatus  = ''; else $sCrossStatus  = 'checked';
if ($sReplace == '0') $sReplaceStatus  = ''; else $sReplaceStatus  = 'checked';
Можно конечно переменным поназадавать значения по умолчанию, но тогда условия поубирать половину. А у Вас что то с чем то...

Цитата Сообщение от Gcom Посмотреть сообщение
но меня всегда смущали конструкции вида:
Странно что Вас совершенно не смущают конструкции вида
PHP
1
if ($sStrict == '0')  $sStrictStatus  = ''; else $sStrictStatus  = 'checked';
Поверьте - они выглядят гораздо ужаснее...
0
82 / 82 / 18
Регистрация: 03.02.2016
Сообщений: 564
Записей в блоге: 1
29.02.2016, 05:42  [ТС] 6
Цитата Сообщение от pav1uxa Посмотреть сообщение
А то что у Вас это вообще абракадарбра. У Вас вот эти 6 строчек кода если удалить из программы, не изменится совершенно ничего
Почему не нужны, они как раз задают так сказать стартовое значение флажков, что бы если понадобилось например при "старте" поменять что допустим нужен включить флажок номер 2, я просто меняю в коде это:
PHP
1
$sCross   = '0'; // поиск с кросами (1-да/0-нет) "0"
на это:
PHP
1
$sCross   = '1'; // поиск с кросами (1-да/0-нет) "0"
И все по прежнему работает, мудрено конечно наверно все это, но на что хватило мозгов, то и придумал

Добавлено через 21 час 9 минут
pav1uxa, СПС Вам, все заработало как надо, сделал на основе Вашего кода (работает как часики)
PHP/HTML
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
<?php
header ("Content-Type:text/html; charset=UTF-8");
ini_set ('display_errors', 1); 
error_reporting (E_ALL);
 
$sStrict  = '0'; // точный поиск (1-да/0-нет) "0"
$sCross   = '1'; // поиск с кросами (1-да/0-нет) "0"
$sReplace = '1'; // поиск с заменами (1-да/0-нет) "0"
 
$sStrictStatus = ($sStrict == '0') ? '' : 'checked';
$sCrossStatus = ($sCross == '0') ?  '' : 'checked';
$sReplaceStatus = ($sReplace == '0') ? '' : 'checked';
 
if(isset($_REQUEST['q'])) { // Обработка кнопки "Найти"
    $sQValue = $_REQUEST['q'];
 
    $sStrict  = isset($_REQUEST['strict']) ? '1' : '0';
    $sCross   = isset($_REQUEST['cross']) ? '1' : '0'; 
    $sReplace = isset($_REQUEST['replace']) ? '1' : '0';
 
    $sStrictStatus  = isset($_REQUEST['strict']) ? 'checked' : '';
    $sCrossStatus   = isset($_REQUEST['cross']) ? 'checked' : ''; 
    $sReplaceStatus = isset($_REQUEST['replace']) ? 'checked' : '';
 
} else $sQValue = ''; // if(isset($_REQUEST['q']))
 
echo ('/strict '.$sStrict.'/cross '.$sCross.'/replace '.$sReplace.'<br>');
?>
<form>
    <input type='hidden' name='type' value='article'>
    <p>
        введите артикул: <input type='text' name='q' value='<?=$sQValue?>' placeholder='48510-29176' pattern='.{0,15}' required>
        <input type='submit' value='Найти'>
    </p>
    <hr>
    <p>
        <input type='checkbox' name='strict' value = "1" <?=$sStrictStatus?>> строгое соответствие *
        <input type='checkbox' name='cross' value = "1" <?=$sCrossStatus?>> с кроссами *
        <input type='checkbox' name='replace' value = "1" <?=$sReplaceStatus?>> с заменами
    </p>
</form>
Добавлено через 3 минуты
Цитата Сообщение от pav1uxa Посмотреть сообщение
Поверьте - они выглядят гораздо ужаснее...
Ну да так на много приятнее на ощупь
PHP
1
$sStrictStatus = ($sStrict == '0') ? '' : 'checked';
Добавлено через 20 минут
И еще такой момент чем хуже это:
PHP/HTML
1
2
3
if(isset($_REQUEST['q']))
...
<form>
Чем это:
PHP/HTML
1
2
3
if(isset($_GET['q']))
...
<form method='get'>
Почему все применяют GET и POST вместо REQUEST?
0
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
29.02.2016, 09:15 7
Цитата Сообщение от Gcom Посмотреть сообщение
Почему все применяют GET и POST вместо REQUEST?
В суперглобальный массив $_REQUEST входят суперглобальные массивы $_GET, $_POST и $_COOKIE. Зачем мне брать $_GET, $_POST и $_COOKIE, если я знаю что данные приходят через GET запрос.

А если method='get' не использовать, они все равно приходят через GET. Так просто нагляднее.
0
29.02.2016, 09:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.02.2016, 09:15
Помогаю со студенческими работами здесь

Работа с формой, очистка формы
Доброго времени суток! есть форма &lt;form action=&quot;&quot; id=&quot;f&quot; method=&quot;post&quot; onSubmit = &quot;return...

Symfony2, работа с типом Collection, работа с базовой формой
Здравствуйте. Осваиваю создание CRUD приложения на Symfony 2, на примере. Однако, возникают...

Работа с формой
Нужно сделать, чтобы форма выходила в правом нижнем углу экрана, а также по нажатию кнопки 'mb'...

работа с формой
У меня такие проблемы: 1) Можно ли обновить форму т.е (что бы обновились записи в listbox на...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru