chapa Kularathne Ответов: 1

Как исправить как неопределенный индекс, так и неопределенную переменную в PHP?


Я новичок в php. Я создал несколько форм, когда нажимаю кнопку Отправить показать "успешно отправлено".И я создаю мульти - запрос для вставки данных в разные пять таблиц.

при создании соединения с базой данных я отобразил ошибку как "неопределенная переменная в...".после того, как я исправил эту проблему, я отобразил другую ошибку "неопределенный индекс в...".Затем я исправил ее, но снова показывает ошибку "неопределенная переменная в...".

Поэтому я использовал следующий код для исправления ошибки как неопределенного индекса, так и неопределенной переменной, но теперь, когда я отправляю данные, эти таблицы не обновляются хорошо. две таблицы заполнены правильно.(таблица contact_details,таблица extra_curricular_activity).Одна таблица заполняется без двух полей(таблица academic_details,поле Z_Score и поле A_Grade1).другие две таблицы пусты все поля.но добавьте новую строку при нажатии кнопки Отправить.(таблица сведений о курсе,таблица personal_details)

Что пустые поля в базе и полей, ошибки те же..так как я это исправил

Что я уже пробовал:

это код, который я использовал для исправления ошибки неопределенного индекса и неопределенной переменной

$profile_picture = isset( $_POST['profile_picture'] )? $_POST['profile_picture']: false;
$student_id = isset( $_POST['student_id'] )? $_POST['student_id']: false;
$admitted_date = isset( $_POST['admitted_date'] )? $_POST['admitted_date']: false;
$academic_year = isset( $_POST['academic_year'] )? $_POST['academic_year']: false;
$course = isset( $_POST['course'] )? $_POST['course']: false;
$first_name = isset( $_POST['first_name'] )? $_POST['first_name']: false;
$middle_name = isset( $_POST['middle_name'] )? $_POST['middle_name']: false;
$last_name = isset( $_POST['last_name'] )? $_POST['last_name']: false;
$dob = isset( $_POST['dob'] )? $_POST['dob']: false;
$gender = isset( $_POST['gender'] )? $_POST['gender']: false;
$nic = isset( $_POST['nic'] )? $_POST['nic']: false;
$nationality = isset( $_POST['nationality'] )? $_POST['nationality']: false;
$religion = isset( $_POST['religion'] )? $_POST['religion']: false;
$race = isset( $_POST['race'] )? $_POST['race']: false;
$a_grade1 = isset( $_POST['a_grade1'] )? $_POST['a_grade1']: false;
$z_score = isset( $_POST['z_score'] )? $_POST['z_score']: false;

1 Ответов

Рейтинг:
2

Jochen Arndt

Вы должны убедиться, что все переменные, которые должны использоваться для доступа к базе данных, были переданы. Если какая-либо требуемая переменная отсутствует, покажите сообщение об ошибке и выйдите (тогда не выполняйте никаких операций с базой данных).

В зависимости от ваших требований может также потребоваться проверить наличие пустых переменных или допустимого содержимого.

Обратите также внимание, что ваш текущий код создает переменные разных типов: логические FALSE если параметр не существует, и строка в противном случае (которая может быть пустой строкой, если параметр пуст).

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

Если ваша форма поддерживает несколько операций (например, добавление, просмотр, удаление), вы должны сначала проверить это (предполагая, что здесь передается как "операция"), а затем необходимые параметры:

if (isset( $_POST['operation'] )) {
    if ($_POST['operation'] === 'view') {
        // If you can for example view recordset(s) by id or name 
        //  and have implemented functions for that:
        if (isset($_POST['student_id'])) {
            view_by_id();
        }
        else if (isset($_POST['first_name']) && isset($_POST['last_name'])) {
            view_by_name();
        }
    }
    else if ($_POST['operation'] === 'add')
    {
        // Call the add() function which checks for the required parameters.
        // That are usually all database fields
        //  (except the database ID when that is auto increment)
        add();
    }
} else {
    // Error message or print the input form here if that is intended when
    //  calling this without parameters
}
Я использовал функции в приведенном выше примере, потому что это делает код более читабельным. Добавьте проверки параметров поверх функций. Функции также могут возвращать значение состояния.

Для просмотра по ID и удаления вам нужен только уникальный ID:
function delete()
{
    if (!isset($_POST['student_id'])) {
        // Error: Required ID parameter not present
    }
    else if ($_POST['student_id'] === '') {
        // Error: ID parameter is an empty string
    }
    else if (!is_numeric($_POST['student_id'])) {
        // Error: ID parameter is not a numeric value
    }
    else {
        // Can pass $_POST['student_id'] as SQL parameter for the ID field
        $id = intval($_POST['student_id']);
        //$query = 'DELETE FROM table WHERE student_id=' . $id . ';';
    }
}