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

0

Мне нужно отправить Choice_ID в форму ниже в мою базу данных, поскольку она используется в другой функции. Как передать это на PHP-код, который обрабатывает регистрацию пользователя? Сообщения об ошибках, которые я получаю:

Notice: Undefined index: Choice_ID in/Users/philip/sites/feedmefit/Assets/register.php on line 16

Notice: Undefined index: Choice_ID in/Users/philip/sites/feedmefit/Assets/register.php on line 17

Код HTML:

<div class="panel-group" id="accordion">
    <div class="panel panel-default">
      <div class="panel-heading">
        <h4 class="panel-title">
          <a data-toggle="collapse" data-parent="#accordion" href="#collapse1">Personal Details</a></h4>
      </div>
      <div id="collapse1" class="panel-collapse collapse in">
        <div class="panel-body">
                <form action="Assets/register.php" method="post">
                    <label>Forename:</label><br><input type="text" id="f" name="Forename" placeholder="Forename" required><br/>
                    <label>Surname:</label><br><input type="text" id="s" name="Surname" placeholder="Surname" required><br/>
                    <label>House Number:</label><br><input type="text" id="h" name="House_No" placeholder="House Number" required><br/>
                    <label>Street Name:</label><br><input type="text" id="sn" name="Street_Name" placeholder="Street Name" required><br/>
                    <label>City:</label><br><input type="text" id="c" name="City" placeholder="Town/City" required><br/>
                    <label>Postcode:</label><br><input type="text" id="p" name="Postcode" placeholder="Postcode" required><br/>
                    <label>Username:</label><br><input type="text" id="u" name="Username" placeholder="Username" required><br/>
                    <label>Password:</label><br><input type="text" id="pd" name="Password" placeholder="Password" required><br/>
                    <label>Email:</label><br><input type="text" id="e" name="Email" placeholder="Email" required><br/>
            </div>
      </div>
    </div>
    <div class="panel panel-default">
      <div class="panel-heading">
        <h4 class="panel-title">
          <a data-toggle="collapse" data-parent="#accordion" href="#collapse2">Questionnaire</a>
        </h4>
      </div>
      <div id="collapse2" class="panel-collapse collapse">
        <div class="panel-body">
            <?php
            $sql = "SELECT Question_ID, Question FROM Questions;";

            $result = mysqli_query($conn, $sql);
            $resultCheck = mysqli_num_rows($result);

            if($resultCheck > 0):
                while($row = mysqli_fetch_assoc($result)):
                    $questionid = (int)$row['Question_ID'];
                    echo '<label>'.$row['Question'].'</label><input type="hidden" value="'.$row['Question_ID'].'">';

                    $query = "SELECT Choice_ID, Choice FROM Choices WHERE Question_ID = '$questionid';";
                    $results = mysqli_query($conn, $query);
                    $resultsCheck = mysqli_num_rows($results);
                    if($resultsCheck > 0):
                        $string = '<br><select id="choice">';
                        while($rows = mysqli_fetch_assoc($results)):
                            $string .= '<option value="'.$rows['Choice_ID'].'">'.$rows['Choice'].'</option>';
                    endwhile;
                    $string .= '</select><br>';
                    echo $string;
                endif;
            endwhile;
        endif;
        ?>
        <br>
        <input type="submit" value="Register"/>
        </form>
      </div>
  </div>
</div>
</div>

Вот PHP, который обрабатывает регистрацию:

<?php
session_start();
//Connect to DB
include 'DBConnection.php';

$Forename = mysqli_real_escape_string($conn, $_POST['Forename']);
$Surname = mysqli_real_escape_string($conn, $_POST['Surname']);
$House_No = mysqli_real_escape_string($conn, $_POST['House_No']);
$Street_Name = mysqli_real_escape_string($conn, $_POST['Street_Name']);
$City = mysqli_real_escape_string($conn, $_POST['City']);
$Postcode = mysqli_real_escape_string($conn, $_POST['Postcode']);
$Username = mysqli_real_escape_string($conn, $_POST['Username']);
$Password = mysqli_real_escape_string($conn, $_POST['Password']);
$Email = mysqli_real_escape_string($conn, $_POST['Email']);

$choice = $_POST['Choice_ID'];
print_r($_POST['Choice_ID']);
exit();

$sql = "INSERT INTO Customers (Forename, Surname, House_No, Street_Name, City, Postcode, Username, Password, Email) 
VALUES ('$Forename', '$Surname', '$House_No', '$Street_Name', '$City', '$Postcode', '$Username', '$Password', '$Email')";
$query = "INSERT INTO Results (Result_ID, Cust_ID, Choice_ID) 
VALUES(,,'$choice')";
$result = $conn->query($sql);
$results = $conn->query($query);

header("Location: ../index.php");
  • 2
    <select id="choice"> до <select id="choice" name="Choice_ID"> ? Также ваш код широко открыт для атак с использованием SQL-инъекций. Попробуйте использовать подготовленные заявления.
  • 0
    проверять $ choice перед вставкой, например if (isset ($ choice)) {insert}
Показать ещё 10 комментариев
Теги:
registration

1 ответ

0
Лучший ответ

Вы не указали вам свои входы <select>. Вы должны изменить <select id="choice"> на <select id="choice" name="Choice_ID'.$i.'">

Теперь вам нужно изменить, добавьте следующий код, чтобы добавить $i для каждого вопроса.

$sql = "SELECT Question_ID, Question FROM Questions;";

в

$i=0;
$sql = "SELECT Question_ID, Question FROM Questions;";

а также

                endif;
        endwhile;
    endif;

в

                endif;
                $i++;
        endwhile;
    endif;

Теперь на вашем php регистрации вы должны прочитать $choice0 = $_POST['Choice_ID0']; $choice1 = $_POST['Choice_ID10']; и т.д. и создавать разные запросы на вставку для каждого из них.

Кроме того, ваш код широко открыт для атак SQL Injection. mysqli_real_escape_string не полностью защищает вас, вы должны использовать подготовленные инструкции.

  • 0
    Спасибо, я ценю вашу помощь!
  • 0
    Рад, что помог вам :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню