Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
16 / 16 / 8
Регистрация: 03.06.2013
Сообщений: 90
1

двойной isset

26.08.2013, 19:49. Показов 2244. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
добро ночи, хотел узнать как сделать проверку двух переменных сразу, например если так написать то не проверяет

PHP
1
if (isset($_POST['zagolovok'] && $_POST['text']))
а как будет работать? например тут

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
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<?php
if (isset($_POST['zagolovok'])) 
{
$file = dirname(__FILE__).'\test.html';
$text = '<meta http-equiv="Content-Type" content="text/html; charset=utf-8">'.$_POST['zagolovok'] .'<br><br>'. $_POST['text'];
if (file_put_contents($file, $text))
    {
        echo "страница добавлена - <a href=/test.html target=blank>открыть</a>";
    }
}
else
{
echo
"
<center>
<form action='' method=post>
<input type=text name=zagolovok value=Вопрос><br><br>
<textarea cols=30 rows=10 name=text>Как сделать форму?</textarea><br><br>
<input type=submit value=Отправить>
</form>
</center>
";
}
?>
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.08.2013, 19:49
Ответы с готовыми решениями:

Isset и empty
Всем привет. Только что заметил такую запись в коде: isset($minimum_price, $maximum_price) &amp;&amp;...

Переменная в isset()
Здравствуйте. Пробовал так if (isset($_POST)) { $opros.$d =$_POST; } Мне нужно, чтобы шла...

Isset + SESSION
Господа, завис я вот на элементарном вопросе. Итак, имею такой скрипт для примера: &lt;?php ...

не работает isset
почему может не работать такая конструкция? &lt;?php if(isset($_POST)) { echo('wdger'); $link...

12
122 / 120 / 7
Регистрация: 21.04.2013
Сообщений: 615
26.08.2013, 19:58 2
Что мешает писать не изобретая новый синтаксис языка?
PHP
1
if (isset($_POST['zagolovok']) && isset($_POST['text']))
1
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16844 / 6723 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
26.08.2013, 20:06 3
а что мешает писать, почитав про isset ?
PHP
1
if (isset($_POST['zagolovok'], $_POST['text']))
2
AndreyDyakonov
26.08.2013, 20:38
  #4

Не по теме:

Цитата Сообщение от KOPOJI Посмотреть сообщение
а что мешает писать, почитав про isset ?
пых - чудовищьный язык.. Никогда не знаешь где подвох :)

0
Vovan-VE
27.08.2013, 07:34
  #5

Не по теме:

Цитата Сообщение от KOPOJI Посмотреть сообщение
а что мешает писать, почитав про isset ?
Цитата Сообщение от AndreyDyakonov Посмотреть сообщение
пых - чудовищьный язык.. Никогда не знаешь где подвох
Особенно, когда начинаешь отрицать isset с несколькими переменными, полагаясь только на "логичный" внешний вид вместо здравого смысла:
PHP
1
if (!isset(..., ..., ...))

0
16 / 16 / 8
Регистрация: 03.06.2013
Сообщений: 90
07.09.2013, 00:40  [ТС] 6
чото не то... у меня не один вариант не работает, что я не так делаю

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
64
65
<?php
 
if( isset($_POST['ip']) 
    && isset($_POST['login']) 
    && isset($_POST['pass']) 
    && isset($_POST['owner']) 
    && isset($_POST['ns_one']) 
    && isset($_POST['ns_two']) 
    && isset($_POST['config'])
  )
 
 
/*if(isset(
    $_POST['ip'], 
    $_POST['login'],
    $_POST['pass'],
    $_POST['owner'],
    $_POST['ns_one'],
    $_POST['ns_two'],
    $_POST['config']
          )
  )
*/
 
/*if(!isset(
    $_POST['ip'], 
    $_POST['login'],
    $_POST['pass'],
    $_POST['owner'],
    $_POST['ns_one'],
    $_POST['ns_two'],
    $_POST['config']
           )
  )
*/
 
{
 
    $ip = $_POST['ip'];
    $login = $_POST['login'];
    $owner = $_POST['owner'];
 
    echo $ip . $login . $owner;
 
}
else
{
?>
 
<center>
<form method="post" action="">
IP<br><input type="text" name="ip"><br><br>
Логин<br><input type="text" name="login"><br><br>
Пароль<br><input type="text" name="pass"><br><br>
Владелец домена(ips manager)<br><input type="text" name="owner"><br><br>
ns1<br><input type="text" name="ns_one"><br><br>
ns2<br><input type="text" name="ns_two"><br><br>
Название конфига<br><input type="text" name="config"><br><br>
<input type="submit" value="Замутить конфиг"><br><br>
</form>
</center>
 
<?php 
}
?>
0
91 / 91 / 23
Регистрация: 02.09.2013
Сообщений: 276
07.09.2013, 09:28 7
А как вы определили что они не работают? Ошибку какую-то высыпает?
0
16 / 16 / 8
Регистрация: 03.06.2013
Сообщений: 90
07.09.2013, 18:16  [ТС] 8
эти функции проверяют существует ли переменная или нет, если хоть одна форма пустая, то показывается форма отправки, а если форма полностью заполнена то код обрабатывается. Сейчас я полупустую форму отправляю и она обрабатывается...
0
91 / 91 / 23
Регистрация: 02.09.2013
Сообщений: 276
07.09.2013, 19:25 9
Цитата Сообщение от zilone Посмотреть сообщение
эти функции проверяют существует ли переменная или нет, если хоть одна форма пустая, то показывается форма отправки, а если форма полностью заполнена то код обрабатывается. Сейчас я полупустую форму отправляю и она обрабатывается...
PHP
1
2
3
4
5
6
7
8
if( isset($_POST['ip']) 
    && isset($_POST['login']) 
    && isset($_POST['pass']) 
    && isset($_POST['owner']) 
    && isset($_POST['ns_one']) 
    && isset($_POST['ns_two']) 
    && isset($_POST['config'])
  )
Этим кодом вы проверяете параметры не на пустоту, а на существование. А это разные вещи. Сделайте вот так, и попробуйте:

PHP
1
if ($_POST['ip'] && $_POST['login'] && $_POST['pass']) // ...
1
Заблокирован
07.09.2013, 22:15 10
ТС, вам ясно сказали - можете использовать в качестве аргументов функции все переменные сразу, через запятую. Вы все равно наделали толпу иссетов.

If multiple parameters are supplied then isset() will return TRUE only if all of the parameters are set. Evaluation goes from left to right and stops as soon as an unset variable is encountered.
http://php.net/manual/en/function.isset.php

Добавлено через 6 минут
Это не самое главное. Откуда вы знаете какие там поля на вашей форме лежат и какие должны быть, а какие могут не быть заполнены?

Даже если вы их вывели не из бд, а из массива, даже если не из массива, а вручную прописали в скрипте где форм-дата, за каким пыхом вновь все перечислять в скрипте где проверяется дата?

Запишите цикл который тупо проверит все поля пропуская те, которые не надо проверять по какому-то переданному признаку. О котором, конечно, надо позаботиться до того как.

Добавлено через 10 минут
Цитата Сообщение от zilone Посмотреть сообщение
если хоть одна форма пустая
Так проверяются только элементы массива которых может не быть из-за того, что соответствующее поле может быть не successfull. Например не нажатая кнопка, не отчекрыженный чек-бокс.

Добавлено через 31 минуту
Преамбула

PHP
1
2
3
4
5
6
7
8
if( isset($_POST['ip']) 
    && isset($_POST['login']) 
    && isset($_POST['pass']) 
    && isset($_POST['owner']) 
    && isset($_POST['ns_one']) 
    && isset($_POST['ns_two']) 
    && isset($_POST['config'])
  )
Амбула. Признаком можно сделать заранее известный контекст. Скажем скрипт предлагает заполнить форму заказа. Значит имя контекста - order. Делаем имена полей в текущем контексте.

Код
name="order[login]";
...
name="order[pass]"
и так далее.

В контрольном скрипте берете элемент массива $_POST['order'] в котором находится массив значения которого можно проверить конкретно на "" вот так:

PHP
1
2
3
$order = $_POST['order'];
$values = array_values($order);
if(in_array("", $values, true) die('Не айс!');
Если айс - юзаете $order в порядке $order['login']; $order['password'] и так далее.

Однако все это очень тупо и неопрятно. Чтобы узнать какое именно поле не заполнено надо проверять отдельно, а может там два, или три, или слишком коротко, или не на том языке, или такое имя уже занято, или такой улицы нет и так далее и так далее.
1
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16844 / 6723 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
07.09.2013, 22:41 11
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
<?php
 
$post = array('form' => array('field1'=>'value1','field2'=>'  ','field3'=>'value3')); //$_POST['form']
 
$fields = array(
    'field1'=>array('required'=>true, 'integer'=>true),
    'field2'=>array('required'=>true),
    'field3'=>array(),
);
 
function checkInput($fields, $input, $messages=array())
{
    if(empty($messages))
        $messages = array(
            'empty'=>'Заполните поле "{attribute}"',
            'integer'=>'Поле "{attribute}" должно быть числом',
            'wrongAttribute'=>'Неверный формат поля "{attribute}"',
        );
    $errors = array();
    foreach($fields as $field=>$value)
    {
        if(!isset($input[$field]))
        {
            if(!empty($value['required']))
                $errors[] = strtr( $messages['empty'], array('{attribute}'=>$field) );
        }
        else
        {
            if( !is_scalar($input[$field]) )
            {
                $errors[] = strtr( $messages['wrongAttribute'], array('{attribute}'=>$field) );
                continue;
            }
 
            if( !empty($value['required']) && trim($input[$field]) == '' )
                $errors[] = strtr( $messages['empty'], array('{attribute}'=>$field) );
            if( !empty($value['integer']) && !is_numeric($input[$field]) )
                $errors[] = strtr( $messages['integer'], array('{attribute}'=>$field) );
        }
            
    }
    return !empty($errors) ? $errors : true;
}
 
var_dump( checkInput($fields, $post['form']) );
 
/*
array(2) {
  [0]=>
  string(52) "Поле "field1" должно быть числом"
  [1]=>
  string(36) "Заполните поле "field2""
}
*/
0
Заблокирован
08.09.2013, 06:45 12
По той же схеме легко передать все атрибуты через имя поля. Было

PHP
1
order['login']
Проверить можно на пустую строку, остальное надо знать заранее, типа именно login не может быть короче 3 символов.

Стало

PHP
1
name = "order[login][s][3]"
Это значит логин - строка, длиной не меньше 3.

Стало быть генеральная проверка на длину не меньше 1 (на "") уже смысла не имеет.
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16844 / 6723 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
08.09.2013, 12:56 13
Цитата Сообщение от sqlnub Посмотреть сообщение
name = "order[login][s][3]"
вот уж это точно не имеет смысла. Во-первых, это лишняя головная боль с параметрами (сами же запутаетесь), во-вторых, никто не помешает мне изменить название поля или попросту удалить его. По вашей схеме получается, что если ты удалил все поля из консоли - то значит все поля необязательные. Задавать надо на стороне сервера, а не клиента
0
08.09.2013, 12:56
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.09.2013, 12:56
Помогаю со студенческими работами здесь

не работает isset
Добрый день уважаемые программисты. Помогите с такой проблемой: Есть фома в php странице, в ней...

Isset и вложенный if
Приветствую всех. Помогите разобраться. Есть форма ввода поля даты в этом же файле, откуда...

Использование isset
Поюзал я поиск, увидел множество сложных примеров и понял, что мне нужна самая база. Так что не...

Условие isset
Помоги понять, почему не выполняется условие &quot;//Если тема выбрана&quot; ? //Если кнопка &quot;Начать тест&quot;...


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

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