Могу ли я иметь условную вставку MySQLi на основе оператора if PHP

Я пытаюсь использовать одну страницу .php для условного MySQLi INSERT на основе роли пользователя. По сути, INSERT очень похож, за исключением пары полей. Вот мой код:

require 'scripts/config.php'; 

            if ($_SESSION['role'] == 'admin')
                 { 
                $sql = "INSERT INTO aircraft_dataV2 (status, ac_cat, ac_type, faa_id, time_in, date_in, time_out, date_out, services, comments, contact_name, contact_phone, contact_ext, contact_email, email, csr_lsr, created) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";

            if ($stmt = mysqli_prepare($link, $sql))
                {
                // Bind variables to the prepared statement as parameters
                mysqli_stmt_bind_param($stmt, "sssssssssssssssss", $status, $ac_cat, $ac_type, $faa_id, $time_in, $date_in, $time_out, $date_out, $services, $comments, $contact_name, $contact_phone, $contact_ext, $contact_email, $email, $csr_lsr, $created);


  ...CODE TO $_REQUEST FORM DATA ...


            if (mysqli_stmt_execute($stmt))
                    {
                        //Redirect to 
                    $aircraft_id = mysqli_insert_id($link);         
                    header("Location: service_confirm.php?aircraft_id=$aircraft_id");
                    } else
                    {
                    echo "ERROR: Could not execute query: $sql. " . mysqli_error($link);
                    }
            } else{
                echo "ERROR: Could not prepare query: $sql. " . mysqli_error($link);
                  }

                }



            if ($_SESSION['role'] == 'client')
                 { 
                SAME as above minus the $csr/lsr and $email fields
                 }

Что происходит, так это то, что независимо от пользователя $ _SESSION выполняются оба оператора INSERT. Одна запись пуста, а другая содержит правильные данные на основе отправленной формы.

Моя форма такая же, за исключением пары условных полей, которые различаются в зависимости от администратора и клиента.

Могу ли я сделать это или мне нужно вернуться к исходному сценарию, который имеет две разные страницы .php, которые содержат оператор INSERT для администратора и клиента следующим образом:

            if ($_SESSION['role'] == 'admin')
                 { 
                  header("Location: admin.php")
                 }

            if ($_SESSION['role'] == 'client')
                 { 
                  header("Location: client.php")
                 }

Пора прочитать оператор switch или использовать поисковую таблицу ассоциативного массива (например, array('admin' => 'admin.php', 'client' => 'client.php') вместо этого беспорядка из операторов if.

tadman 09.08.2018 19:39

Чтобы ответить на ваш вопрос, да, вы можете это сделать. Однако здесь что-то не так. Не могли бы вы показать нам еще немного кода? Как выглядит твоя форма? Кроме того, покажите нам немного больше файла, содержащего операторы SQL.

waterloomatt 09.08.2018 19:41

И как ваша форма вызывает этот код? Я подозреваю, что этот код вызывается дважды (возможно, заголовок / перенаправление). Вы не проверяете, была ли отправлена ​​форма.

waterloomatt 09.08.2018 19:55

Действие формы находится на той же странице, на которой находится PHP-код. У меня есть проверка, и я также проверяю, есть ли в журнале активный сеанс, а также если форма была отправлена ​​... пытался не публиковать более 400 строк кода.

Spence 09.08.2018 20:09
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
4
173
2

Ответы 2

Ты можешь сделать это.

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

Попробуйте распечатать некоторые данные в обоих операторах условий, чтобы увидеть, в какие они действительно входят.

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

Spence 09.08.2018 19:36

ваши запросы к базе данных

phadaphunk 09.08.2018 19:40

Мне пришлось на мгновение отступить, чтобы вспомнить свои мысли. Было несколько ошибок (слишком много, чтобы описывать здесь). Теперь он у меня работает (и я немного узнал об операторе switch). Если эту ветку нужно удалить, сделайте это или расскажите мне, как это сделать. Спасибо

Другие вопросы по теме