#php #html #redirect #survey
#php #HTML #перенаправление #опрос
Вопрос:
В настоящее время я создаю опрос. До сих пор я добился немалого прогресса. Если участник завершает и отправляет опрос, он успешно входит в мою базу данных и возвращает участника на главную страницу моего сайта, но если участник пропускает один вопрос, при попытке отправить опрос он возвращает пустое отображение, и данные в мою базу данных не поступают.
Я хочу создать опрос, который дает участникам возможность пропускать вопросы и возвращает их на домашнюю страницу после отправки опроса.
Я понимаю, что это может быть легко для некоторых, но я довольно новичок в PHP, поэтому я все еще учусь, пожалуйста, смотрите Код ниже.
<?php
$radioVal1 = $_POST["q1"];
$radioVal2 = $_POST["q2"];
$radioVal3 = $_POST["q3"];
$radioVal4 = $_POST["q4"];
$radioVal5 = $_POST["q5"];
$checkboxVal6 = $_POST["q6"];
$textAreaVal = $_POST["comment"];
session_start();
require_once('DBConnection.php');
if(isset($_POST["submit_questionnaire"])){
if(isset($_POST["q1"]) amp;amp; isset($_POST["q2"]) amp;amp; isset($_POST["q3"]) amp;amp; isset($_POST["q4"]) amp;amp; isset($_POST["q5"]) amp;amp; isset($_POST["q6"]) amp;amp; $textAreaVal!=null){
echo "blyat";
$username = $_SESSION['username'];
$db = new DBConnection();
$conn= $db::getInstance()->dbConnect();
$query_code = "SELECT id_code FROM users WHERE name = '$username'";
$id_codeRow = $db::getInstance()->selectDB($query_code)->fetch_row();
$id_code = (string)array_values($id_codeRow)[0];
$query = "INSERT INTO questionnaire VALUES (default, '$id_code', '$radioVal1', '$radioVal2', '$radioVal3','$radioVal4', '$radioVal5', '$checkboxVal6', '$textAreaVal')";
$insert_value = $db::getInstance()->selectDB($query);
session_destroy();
header("Location: index.php");
exit();
}
}
Комментарии:
1. это потому
insert
, что в БД и перенаправление не происходит, если очень длинный оператор if неверен, поэтому вам нужно, например, перенаправить наindex.php
в любом случае, если оператор if истинен или нет2. Предупреждение: вы широко открыты для SQL-инъекций и должны действительно использовать параметризованные подготовленные операторы вместо ручного построения ваших запросов. Они предоставляются PDO или MySQLi . Никогда не доверяйте никаким входным данным, особенно тем, которые поступают со стороны клиента. Даже когда ваши запросы выполняются только доверенными пользователями, вы все равно рискуете повредить свои данные .
Ответ №1:
// Вы можете заменить «amp;amp;» на «ИЛИ», чтобы пользователь мог пропустить любые вопросы, но пользователь должен заполнить по крайней мере 1 вопрос.
<?php
$radioVal1 = $_POST["q1"];
$radioVal2 = $_POST["q2"];
$radioVal3 = $_POST["q3"];
$radioVal4 = $_POST["q4"];
$radioVal5 = $_POST["q5"];
$checkboxVal6 = $_POST["q6"];
$textAreaVal = $_POST["comment"];
session_start();
require_once('DBConnection.php');
if(isset($_POST["submit_questionnaire"])){
if(isset($_POST["q1"]) OR isset($_POST["q2"]) OR isset($_POST["q3"]) OR isset($_POST["q4"]) OR isset($_POST["q5"]) OR isset($_POST["q6"])){
echo "blyat";
$username = $_SESSION['username'];
$db = new DBConnection();
$conn= $db::getInstance()->dbConnect();
$query_code = "SELECT id_code FROM users WHERE name = '$username'";
$id_codeRow = $db::getInstance()->selectDB($query_code)->fetch_row();
$id_code = (string)array_values($id_codeRow)[0];
$query = "INSERT INTO questionnaire VALUES (default, '$id_code', '$radioVal1', '$radioVal2', '$radioVal3','$radioVal4', '$radioVal5', '$checkboxVal6', '$textAreaVal')";
$insert_value = $db::getInstance()->selectDB($query);
session_destroy();
header("Location: index.php");
exit();
}
}