Я изучаю PHP и изо всех сил пытаюсь найти решение своей проблемы. Я создал страницу, где можно редактировать данные о членстве. Все мои поля 'type = text' правильно отображают текущее значение члена. Но значения, выбранные в 2 раскрывающихся полях («Язык» и «Интерес»), не отображаются в поле редактирования. Хотя они обновляются до MySql, но опция «Выбрать один ...» отображается, когда я хочу отредактировать поля «Язык» и «Интерес» членов.

Что мне делать, чтобы текущее значение из двух раскрывающихся списков, хранящихся в базе данных, отображалось в пользовательском интерфейсе, когда член должен быть отредактирован?

Вот мой код PHP:

<?php 

                $id = isset($_GET['id']) ? $_GET['id'] : die('ERROR: Record ID not Found');

                include('dbconnect.php');

                try{

                    $sql = "SELECT id, firstName, lastName, idNumber, mobileNumber, email, birthDate, languageType, interest FROM members WHERE id = ? LIMIT 0,1";
                    $stmt = $conn->prepare($sql);

                    $stmt->bindParam(1, $id);
                    $stmt->execute();

                    $row = $stmt->fetch(PDO::FETCH_ASSOC);

                    $firstName = $row['firstName'];
                    $lastName = $row['lastName'];
                    $idNumber = $row['idNumber'];
                    $mobileNumber = $row['mobileNumber'];
                    $email = $row['email'];
                    $birthDate = $row['birthDate'];
                    $languageType = $row['languageType'];
                    $interest = $row['interest'];

                }

                catch(PDOException $exception){
                    die('ERROR: '.$exception->getMessage());
                }

            ?>

            <?php

            $id = isset($_GET['id']) ? $_GET['id'] : die('ERROR: Record ID not found.');

            include 'dbconnect.php';

            if($_POST){

                try{

                    $sql = "UPDATE members SET 
                                            firstName=:firstName, 
                                            lastName=:lastName, 
                                            idNumber=:idNumber,
                                            mobileNumber=:mobileNumber,
                                            email=:email,
                                            birthDate=:birthDate,
                                            languageType=:languageType,
                                            interest=:interest
                                    WHERE   id=:id";

                    $stmt = $conn->prepare($sql);

                    $firstName = htmlspecialchars(strip_tags($_POST['firstName']));
                    $lastName = htmlspecialchars(strip_tags($_POST['lastName']));
                    $idNumber = htmlspecialchars(strip_tags($_POST['idNumber']));
                    $mobileNumber = htmlspecialchars(strip_tags($_POST['mobileNumber']));
                    $email = htmlspecialchars(strip_tags($_POST['email']));
                    $birthDate = htmlspecialchars(strip_tags($_POST['birthDate']));
                    $languageType = $_POST['languageType'];
                    $interest = $_POST['interest'];

                    $stmt->bindParam(':firstName', $firstName);
                    $stmt->bindParam(':lastName', $lastName);
                    $stmt->bindParam(':idNumber', $idNumber);
                    $stmt->bindParam(':mobileNumber', $mobileNumber);
                    $stmt->bindParam(':email', $email);
                    $stmt->bindParam(':birthDate', $birthDate);
                    $stmt->bindParam(':languageType', $languageType);
                    $stmt->bindParam(':interest', $interest);
                    $stmt->bindParam(':id', $id);

                    if($stmt->execute()){
                        echo "<div class='alert alert-success'>Member was updated.</div>";
                    }else{
                        echo "<div class='alert alert-danger'>Unable to update member. Please try again.</div>";
                    }

                }

                catch(PDOException $exception){
                    die('ERROR: ' . $exception->getMessage());
                }
            }
            ?>

А вот и HTML:

<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"] . "?id={$id}");?>" method="post">
                <table class='table table-hover table-responsive table-bordered'>
                    <tr>
                        <td>First Name</td>
                        <td><input type='text' name='firstName' value="<?php echo htmlspecialchars($firstName, ENT_QUOTES);  ?>" class='form-control' /></td>
                    </tr>
                    <tr>
                        <td>Last Name</td>
                        <td><input type='text' name='lastName' value="<?php echo htmlspecialchars($lastName, ENT_QUOTES);  ?>" class='form-control' /></td>
                    </tr>
                    <tr>
                        <td>ID Number</td>
                        <td><input type='text' name='idNumber' value="<?php echo htmlspecialchars($idNumber, ENT_QUOTES);  ?>" class='form-control' /></td>
                    </tr>
                    <tr>
                        <td>Mobile Number</td>
                        <td><input type='text' name='mobileNumber' value="<?php echo htmlspecialchars($mobileNumber, ENT_QUOTES);  ?>" class='form-control' /></td>
                    </tr>
                    <tr>
                        <td>Email</td>
                        <td><input type='text' name='email' value="<?php echo htmlspecialchars($email, ENT_QUOTES);  ?>" class='form-control' /></td>
                    </tr>
                    <tr>
                        <td>Birth Date</td>
                        <td><input type='date' name='birthDate' value="<?php echo htmlspecialchars($birthDate, ENT_QUOTES);  ?>" class='form-control' /></td>
                    </tr>
                    <tr>
                        <td>Language</td>
                        <td>

                            <select name='languageType' class='form-control' value="<?php echo $languageType;  ?>" />

                              <option>Select One...</option>
                              <option>Afrikaans</option>
                              <option>English</option>
                              <option>Zulu</option>
                              <option>Xhosa</option>
                              <option>Venda</option>
                              <option>French</option>

                        </td>
                    </tr>
                    <tr>
                        <td>Interest</td>
                        <td>

                            <select name='interest' class='form-control' value="<?php echo htmlspecialchars($interest, ENT_QUOTES);  ?>" />

                                  <option>Select One...</option>
                                  <option>Golf</option>
                                  <option>Rugby</option>
                                  <option>Tennis</option>
                                  <option>Cricket</option>
                                  <option>Swimming</option>
                                  <option>Hiking</option>
                                  <option>Surfing</option>
                                  <option>Movies</option>
                                  <option>Swords</option>

                        </td>
                    </tr>
                    <tr>
                        <td></td>
                        <td>
                            <input type='submit' value='Save Changes' class='btn btn-primary' />
                            <a href='index.php' class='btn btn-danger'>Back to read members</a>
                        </td>
                    </tr>
                </table>
            </form>
0
jproux 2 Авг 2017 в 11:39
Значение должно быть включено, опция не выбирается
 – 
Masivuye Cokile
2 Авг 2017 в 11:45

1 ответ

Лучший ответ

Это все неправильно:

<select name='languageType' class='form-control' value="<?php echo $languageType;  ?>" />

                              <option>Select One...</option>
                              <option>Afrikaans</option>
                              <option>English</option>
                              <option>Zulu</option>
                              <option>Xhosa</option>
                              <option>Venda</option>
                              <option>French</option>


  <select name='interest' class='form-control' value="<?php echo htmlspecialchars($interest, ENT_QUOTES);  ?>" />

                                  <option>Select One...</option>
                                  <option>Golf</option>
                                  <option>Rugby</option>
                                  <option>Tennis</option>
                                  <option>Cricket</option>
                                  <option>Swimming</option>
                                  <option>Hiking</option>
                                  <option>Surfing</option>
                                  <option>Movies</option>
                                  <option>Swords</option>

У Select нет атрибута value, атрибут value принадлежит option.

Так должен выглядеть ваш выбор:

<select name='languageType' class='form-control' />
<option value="Afrikaans">Afrikaans</option>
... <!-- Other options just like I did the first one -->
</select>

Если вы хотите, чтобы было выбрано значение из базы данных, вам нужно будет проверить, не совпадает ли параметр со значением db, а затем выбрать его с помощью атрибута параметра selected.

Любить :

<select name='languageType' class='form-control' />
    <option value="">Select One...</option>
    <option value="Afrikaans"<?php if($languageType == "Afrikaans"){echo "selected='selected'";?>>Afrikaans</option>
    <option value="English" <?php if($languageType == "English"){echo "selected='selected'";?>>English</option>
    <option value="Zulu" <?php if($languageType == "English"){echo "selected='selected'";?>>Zulu</option>
    <option value="Xhosa" <?php if($languageType == "Xhosa"){echo "selected='selected'";?>>Xhosa</option>
    <option value="Venda" <?php if($languageType == "Venda"){echo "selected='selected'";?>>Venda</option>
    <option value="French" <?php if($languageType == "French"){echo "selected='selected'";?>>French</option>
</select>

Затем выполните второй раскрывающийся список, следуя приведенным выше инструкциям, также не забудьте закрыть опцию выбора </select>

0
Masivuye Cokile 2 Авг 2017 в 11:57
Это прекрасно работает. Спасибо Masivuye Cokile. Просто небольшая ошибка - отсутствует закрывающий} в выражении php в теге
 – 
jproux
2 Авг 2017 в 12:33