Я пытаюсь использовать одну страницу .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")
}
Чтобы ответить на ваш вопрос, да, вы можете это сделать. Однако здесь что-то не так. Не могли бы вы показать нам еще немного кода? Как выглядит твоя форма? Кроме того, покажите нам немного больше файла, содержащего операторы SQL.
И как ваша форма вызывает этот код? Я подозреваю, что этот код вызывается дважды (возможно, заголовок / перенаправление). Вы не проверяете, была ли отправлена форма.
Действие формы находится на той же странице, на которой находится PHP-код. У меня есть проверка, и я также проверяю, есть ли в журнале активный сеанс, а также если форма была отправлена ... пытался не публиковать более 400 строк кода.
Ты можешь сделать это.
У вас либо неправильный набор ролей сеанса, который вы можете легко определить, разместив трассировки, либо у вас что-то не так с запросом, который, как вы думаете, вы выполняете. В любом случае, на одном только этом образце мы не можем сказать.
Попробуйте распечатать некоторые данные в обоих операторах условий, чтобы увидеть, в какие они действительно входят.
роль сеанса работает правильно. Я могу повторить их в форме перед отправкой и на странице подтверждения после отправки. Если вы вошли в систему как клиент, я получаю страницу подтверждения, которая отображает все введенные данные, но если я вхожу в базу данных, я вижу двойную запись, пустую и правильную. Какой дополнительный код я должен предоставить для этого вопроса, чтобы помочь решить проблему, моя форма довольно длинная (около 15 полей ... или 16, если и администратор).
ваши запросы к базе данных
Мне пришлось на мгновение отступить, чтобы вспомнить свои мысли. Было несколько ошибок (слишком много, чтобы описывать здесь). Теперь он у меня работает (и я немного узнал об операторе switch). Если эту ветку нужно удалить, сделайте это или расскажите мне, как это сделать. Спасибо
Пора прочитать оператор
switch
или использовать поисковую таблицу ассоциативного массива (например,array('admin' => 'admin.php', 'client' => 'client.php')
вместо этого беспорядка из операторовif
.