PHP Notice: Undefined index

161
15 июля 2017, 09:02

Очередная порция ошибок в коде снова сводит с ума...

PHP Notice:  Undefined index: submit on line 14
PHP Notice:  Undefined index: name on line 105
PHP Notice:  Undefined index: email on line 106
PHP Notice:  Undefined index: theme on line 107
PHP Notice:  Undefined index: text on line 108

Ну и собственно сам код:

<?php // 266
if(!$exe)
    {
    $title_normal[] = array(
                            'link' => $settings['patch_region'].$cat.'/',
                            'name' => $locale[266]
                            );
    }
if($exe)
    {
    $form = true;
    if($_POST['submit'] != "")
        {
        $err = array();
        if(!isset($_POST['name'])) $_POST['name'] = "";
        if(!isset($_POST['email'])) $_POST['email'] = "";
        if(!isset($_POST['theme'])) $_POST['theme'] = "";
        if(!isset($_POST['text'])) $_POST['text'] = "";

        if($_POST['name'] == ""){$err[] = $locale[151];}
        if($_POST['theme'] == ""){$err[] = $locale[601];}
        if($_POST['email'] != "")
            {
            if(!preg_match("/[0-9a-z_]+@[0-9a-z_^\.]/i", $_POST['email']))
                {
                $err[] = $locale[600];
                }
            }
        else
            {
            $err[] = $locale[152];
            }
        if($_POST['text'] == ""){$err[] = $locale[153];}
        $_POST['text'] = save_text($_POST['text']);
        $text = "
        <b>".$locale[281]."</b>: ".$_POST['name']."<br />
        <b>".$locale[72]."</b>: ".$_POST['theme']."<br />
        <b>".$locale[21]."</b>: ".$_POST['email']."<br />
        <b>IP</b>: ".$settings['ip']."<br />
        <hr>
        ".$_POST['text'];
        if(!captcha($settings, 'check')){$err[] = $locale[46];}
        if(count($err) > 0)
            {
            echo "
                    <center>
                <div class='error alert' style='width: 500px; max-width: 100%;text-align: left;'>
                                <button class='close' data-dismiss='alert'>×</button>
                    <ul>
                    ";
                    foreach($err as $v)
                        {
                        echo "
                        <li>".$v."</li>
                        ";
                        }
                    echo "
                    </ul>
                </div>
                  </center>
            ";
            }
        else
            {
            $form = false;
            if(send_mail(EMAIL, $_POST['theme'], $text, array(), $_POST['email']))
                {
                echo "
                <center>
                    <div class='ok' style='width: 500px; max-width: 100%;'>
                        ".$locale[155]."
                    </div>
                </center>
                ";
                }
            else
                {
                echo "
                <center>
                    <div class='error alert' style='width: 500px; max-width: 100%;text-align:left;'><button class='close' data-dismiss='alert'>×</button>
                        ".$locale[602]." ".EMAIL."
                    </div>
                </center>
                ";
                }
            }
        }
    if($form)
        {
        echo "
        <center>
        <div class=\"mail_form\">
        <form action='?' method='POST'>
        <table border='0' class='table mail_table'>
        <tr><td>".$locale[29]."</td><td><input name='name' type='text' value='".$_POST['name']."'></td></tr>
        <tr><td>".$locale[26]."</td><td><input name='email' type='text' value='".$_POST['email']."'></td></tr>
        <tr><td>".$locale[72]."</td><td><input name='theme' type='text' value='".$_POST['theme']."'></td></tr>
        <tr><td>".$locale[74]."</td><td><textarea name='text' rows='5' wrap='on' style='min-height:80px'>".$_POST['text']."</textarea></td></tr>
        <tr><td>".$locale[45]."</td>
                <td><img class='captcha-mail' src='".$settings['patch']."captcha/".rand(0, 10000)."'  width='80' height='40'><input name='captcha' type='text' value='' style='width:80px;height:40px;text-align:center;font-size:21px;'></td></tr>
        </table>
        <input name='submit' type='submit' value='".$locale[55]."' class='btn btn-success'>
        </form>
        </div>
        </center>
        ";
        }
    }
?>
Answer 1
$_POST['submit'] != ""

Вот тут у Вас проверяется существующая переменная $_POST['submit'], а её нет
Проверяйте так:

if(isset($_POST['submit'])){}

или так:

if(!empty($_POST['submit'])){}

А если Вам все же надо сравнить - то уже в условии этого if-а при удачной проверке - сравнивайте. т.е.

    if(!empty($_POST['submit'])){
        if($_POST['submit'] != ''){}
    }
Answer 2

В данном случае ошибка говорит вам о том, что вы пытаетесь вызывать неопределенные ключи массива. Если используете PHP >= 7 можно решить оператором объединения с null ?? - Он возвращает первый операнд, если он задан и не равен NULL, а в обратном случае возвращает второй операнд:

if($_POST['submit'] ?? '') {
}
if($_POST['name'] ?? $_POST['email'] ?? $_POST['theme'] ?? $_POST['text'] ?? '') {
}

Или сразу определить и проверить в переменных, а дальше уже через if:

$name = $_POST['name'] ?? '';
$email = $_POST['email'] ?? '';
$theme = $_POST['theme'] ?? '';
$text = $_POST['text'] ?? '';
if(!$name) {
    //...
} else if(!$email) {
    //...
} else if(!$theme) {
    //...
} else if(!$text) {
    //...
} else {
    //...
}

Если используете php < 7, для проверки на то, что переменная или значение массива не пустое, воспользоваться конструкцией empty.

if(empty($_POST['submit'])) {
    //переменная пуста
}
if(!empty($_POST['submit'])) {
    //переменная не пуста
}

isset работает немного по другому, советую посмотреть таблицу сравнения типов. На заметку: Поддерживает оператор and so on.

if(isset($_POST['name'], $_POST['email'], $_POST['theme'], $_POST['text'])) {
    //...
}
READ ALSO
Правильно ли реализована задача?

Правильно ли реализована задача?

Здравствуйте, такая задачка для олимпиады:

231
Ошибки в проекте с CMake

Ошибки в проекте с CMake

LinuxПроект kaitai, файлы он сгенерировал, поэтому проблем с хедерами и вообще с кодом быть вроде не должно

216
Перевод строки в double

Перевод строки в double

Как перевести строку типа string s = "000000000000f8bf" в значение double? Я знаю как прочитать с файла такое значение, и правильно перевестиА как со строкой...

367
Помогите задать pattern validation

Помогите задать pattern validation

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

351