Сгенерированный <form> внутри Bootstrap-Modal должен иметь уникальный идентификатор

Ну, я искал весь интернет в последние дни, чтобы найти способ прикрепить уникальный ID и / или name к произведенным form внутри Bootstrap-Modal, и мне никогда не удавалось...

Я знаю, что я делаю ошибки в коде, но у меня закончились идеи, я не знаю, что использовать.

* Изменить: я использую Bootstrap 3, я создал таблицу, имеющую поле поиска в реальном времени с использованием JavaScript. Строки таблицы отображаются из базы данных с помощью запроса. В последнем столбце строки появляется Bootstrap-Modal, внутри которого находится форма, теперь вот проблема! Мне удалось присвоить уникальный идентификатор каждому модальному и каждой модальной всплывающей кнопке, кроме формы! Отсюда все туман.

Вот код:

<div id="fm-<?php echo $row['PacientID']; ?>" class="modal fade" role="dialog">
<div class="modal-dialog modal-lg">
    <!-- Modal content-->
    <div class="modal-content">
        <div class="modal-header">
            <button type="button" class="close" data-dismiss="modal">
                &times;
            </button>

            <h4 class="modal-title">
                <b>
                    Fișa medicală #<?php echo $row['PacientID']; ?>: <?php echo $row['Name'].' '.$row['Surname']; ?>
                </b>
            </h4>

            <?php
                if (isset ($entranceSuccess))
                {
            ?>
                    <div class="alert alert-success text-center">
                        <?php echo $entranceSuccess; ?>
                    </div>
            <?php
                }
            ?>

            <?php
                if (isset ($entranceError))
                {
            ?>
                    <div class="alert alert-danger text-center">
                        <?php echo $entranceError; ?>
                    </div>
            <?php
                }
            ?>
        </div>

        <form data-toggle="validator" id="entranceForm" role="form" method="POST">
            <div class="modal-body">
                <table class="table table-hover table-bordered">
                    <thead>
                        <tr>
                            <th class="text-center">Data Intrării</th>
                            <th class="text-center">Medic Stomatolog</th>
                            <th class="text-center">Tratament</th>
                            <th class="text-center">Achitat</th>
                        </tr>
                    </thead>

                    <tbody>
                        <?php
                            $intrari = "SELECT * FROM intrari";
                            $intrariResults = $db -> query($intrari);

                            while ($row2 = $intrariResults -> fetch_assoc())
                            {
                                if ($row2['Pacient'] == $row['PacientID'])
                                {
                        ?>
                                    <tr class="text-center">
                                        <th scope="row" class="text-center">
                                            <?php echo $row2['EntranceDate'];?>
                                        </th>

                                        <td>
                                            <?php
                                                if ($row2['Medic'] == 1)
                                                {
                                                    echo 'Dr. Carmen Pădurean';
                                                }
                                                else if ($row2['Medic'] == 2)
                                                {
                                                    echo 'Dr. Claudiu Șuc';
                                                }
                                                else if ($row2['Medic'] == 3)
                                                {
                                                    echo 'Dr. Mihaela Toncean';
                                                }
                                                else if ($row2['Medic'] == 4)
                                                {
                                                    echo 'Dr. Alexandra Cenan';
                                                }
                                                else
                                                {
                                                    echo 'MEDICUL STOMATOLOG NU A FOST DEFINIT!';
                                                }
                                            ?>
                                        </td>

                                        <td>
                                            <?php echo $row2['Treatment'];?>
                                        </td>

                                        <td>
                                            <?php echo $row2['Achitat'];?>
                                        </td>
                                    </tr>
                        <?php
                                }
                            }
                        ?>

                        <tr>
                            <th scope="row" class="text-center">
                                <div class="form-group">
                                    <div class="input-group date entranceDateField">
                                        <input type="text" class="form-control" id="entranceDate" name="entranceDate">
                                        <div class="input-group-addon">
                                            <span class="glyphicon glyphicon-th"></span>
                                        </div>
                                    </div>
                                </div>
                            </th>

                            <td>
                                <div class="form-group">
                                    <select class="form-control" id="medic" name="medic">
                                        <option value="1">Dr. Carmen Pădurean</option>
                                        <option value="2">Dr. Claudiu Șuc</option>
                                        <option value="3">Dr. Mihaela Toncean</option>
                                        <option value="4">Dr. Alexandra Cenan</option>
                                    </select>
                                </div>
                            </td>

                            <td>
                                <div class="form-group">
                                    <input type="text" class="form-control" id="treatment" name="treatment">
                                </div>
                            </td>

                            <td>
                                <div class="form-group">
                                    <input type="text" class="form-control" id="achitat" name="achitat">
                                </div>
                            </td>
                        </tr>
                    </tbody>
                </table>
            </div>

            <div class="modal-footer">
                <button type="submit" class="btn btn-success" id="addEntrance" name="addEntrance-<?php echo $row['PacientID'];?>">
                    <span class='glyphicon glyphicon-plus'></span> Adaugă Intrare
                </button>

                <?php
                    if (isset ($_POST['addEntrance-<?php echo $row[PacientID]; ?>']))
                    {
                        $entranceDate = $_POST['entranceDate'];
                        $pacient = $row['PacientID'];
                        $medic = $_POST['medic'];
                        $treatment = $_POST['treatment'];
                        $achitat = $_POST['achitat'];

                        $insertEntrance = "INSERT INTO intrari (EntranceDate, Pacient, Medic, Treatment, Achitat)
                        VALUES ('$entranceDate', '$pacient', '$medic', '$treatment', '$achitat')";

                        if (mysqli_query ($db, $insertEntrance))
                        {
                            $entranceSuccess = "Pacientul a fost adăugat în baza de date cu succes!";
                        }
                        else
                        {
                            $entranceError = "A apărut o eroare nedefinită! Suna-l pe Andrei (0755 696 200) și dictează-i: \"Error code: " . mysqli_error ($db) . "\"";
                        }
                    }
                ?>
            </div>
        </form>
    </div>
</div>

1 ответ

Решение

Глядя на ваш код, я вижу, что вы помещаете модальный HTML внутрь loop и назначив уникальный id's для модального селектора id="fm-<?php echo $row['PacientID']; ?>" пытаясь создать несколько модальных с уникальным id(s), это заставит страницу загружаться медленными и выполняющимися запросами внутри каждого уникального модального извлечения записей из базы данных, даже если вам не нужны извлеченные записи при загрузке страницы, это не очень хорошая практика,

так что давайте сделаем один шаг назад и удалим модальное while loop и положить его на улицу и удалить <?php echo $row['PacientID']; ?> из модал id селектор.

<div id="fm" class="modal fade" role="dialog">
  <div class="modal-dialog">
    <div class="modal-content">
         //Modal-Header, Modal-Body, Modal-Footer Comes Here
    </div>
  </div>
</div>

Теперь, как вы заявили, в последнем столбце строки появляется Bootstrap-Modal.

Предполагая, что вы запускаете модальное поведение по умолчанию с атрибутами данных data-toggle="modal" data-target="#fm" и у вас есть другая информация в других столбцах строк, таких как <?php echo $row['Name'].' '.$row['Surname']; ?> поэтому у вас должно быть что-то вроде

<tr>
    <td><?php echo $row['PacientID']; ?></td>
    <td><?php echo $row['Name'].' '.$row['Surname']; ?></td>
    <td><button type="button" class="btn btn-info" data-toggle="modal" data-target="#fm">Open Modal</button></td>       
</tr>

Теперь давайте передадим pacientid а также name к модальному, добавь data-attribute data-pacient в name col и к modal trigger button так что над таблицей col будет

<tr>
    <td><?php echo $row['PacientID']; ?></td>
    <td><span class="pacientname" data-pacient="<?php echo $row['PacientID']; ?>"><?php echo $row['Name'].' '.$row['Surname']; ?></span></td>
    <td><button type="button" data-pacient="<?php echo $row['PacientID']; ?>" class="btn btn-info" data-toggle="modal" data-target="#fm">Open Modal</button></td>       
</tr>

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

$(document).ready(function(){ //Dom Ready
    $('#fm').on('show.bs.modal', function (e) { //Show event listener
        var id = $(e.relatedTarget).data('pacient'); //Fetch val from modal data-attribute
        var name = $('.pacientname[data-pacient="' + id +'"]').html(); //fetch val from selector `pacientname` data-attribute with match the val of modal button data-attribute
        $(".pid").html(id); //selector inside modal header to pass id
        $(".pname").html(name); //selector inside modal header to pass name
        $("#addEntrance").val(id); //Passing id to hidden input in form, explained below
        //Ajax method comes here which explains below
    });
});

Модальные-заголовок

<div class="modal-header">
    <button type="button" class="close" data-dismiss="modal">&times;</button>
    <h4 class="modal-title"><span class="pid"></span> <span class="pname"></span></h4>
</div>

Пример скрипки для передачи информации в модал

Теперь о запросе, который вы выполняете внутри модального режима, это можно сделать с помощью метода Ajax и отобразить информацию в модальном режиме. Поскольку у нас уже есть требуемая переменная var id = $(e.relatedTarget).data('pacient'); может использовать его для получения необходимой информации с помощью метода Ajax

var dataString = 'id='+ id;
alert(dataString);
$.ajax({
    type: "POST",
    url: "file.php", //Create this file and handle query in it.
    data: dataString,
    cache: false,
    success: function (data) {
        $("#morecontent > tbody.showHere").html(data); //show fetched information from database
    }
});

а также file.php будет

<?php
//Database Connection Here
if(isset($_POST["id"])) {
    $id = $_POST["id"]; //escape the string
    $queryIntrari = "SELECT * FROM intrari WHERE Pacient = '$id'";
    $intrariResults = $db -> query($queryIntrari);
    while ($row2 = $intrariResults -> fetch_assoc()){
?>
        <tr class="text-center">
            <th scope="row" class="text-center">
                <?php echo $row2['EntranceDate'];?>
            </th>
            <td>
                <?php
                    if ($row2['Medic'] == 1)
                    {
                        echo 'Dr. Carmen Pădurean';
                    }
                    else if ($row2['Medic'] == 2)
                    {
                        echo 'Dr. Claudiu Șuc';
                    }
                    else if ($row2['Medic'] == 3)
                    {
                        echo 'Dr. Mihaela Toncean';
                    }
                    else if ($row2['Medic'] == 4)
                    {
                        echo 'Dr. Alexandra Cenan';
                    }
                    else
                    {
                        echo 'MEDICUL STOMATOLOG NU A FOST DEFINIT!';
                    }
                ?>
            </td>
            <td><?php echo $row2['Treatment'];?></td>
            <td><?php echo $row2['Achitat'];?></td>
        </tr>
<?php } } ?>

и модальное тело, модальный нижний колонтитул с form и информация извлекается из базы данных с использованием Ajax будет как

<table class="table table-hover table-bordered" id="morecontent">
<form data-toggle="validator" id="entranceForm" role="form" method="POST">
<input type="hidden" id="addEntrance" name="addEntrance" value="">
    <div class="modal-body">
        <table class="table table-hover table-bordered">
            <thead>
                <tr>
                    <th class="text-center">Data Intrării</th>
                    <th class="text-center">Medic Stomatolog</th>
                    <th class="text-center">Tratament</th>
                    <th class="text-center">Achitat</th>
                </tr>
            </thead>
            <tbody class="showHere">
                //Information Fetched from Database Using Ajax will show Here
            </tbody>
            <tbody>
                <tr>
                    <th scope="row" class="text-center">
                        <div class="form-group">
                            <div class="input-group date entranceDateField">
                                <input type="text" class="form-control" id="entranceDate" name="entranceDate">
                                <div class="input-group-addon">
                                    <span class="glyphicon glyphicon-th"></span>
                                </div>
                            </div>
                        </div>
                    </th>
                    <td>
                        <div class="form-group">
                            <select class="form-control" id="medic" name="medic">
                                <option value="1">Dr. Carmen Pădurean</option>
                                <option value="2">Dr. Claudiu Șuc</option>
                                <option value="3">Dr. Mihaela Toncean</option>
                                <option value="4">Dr. Alexandra Cenan</option>
                            </select>
                        </div>
                    </td>
                    <td>
                        <div class="form-group">
                            <input type="text" class="form-control" id="treatment" name="treatment">
                        </div>
                    </td>
                    <td>
                        <div class="form-group">
                            <input type="text" class="form-control" id="achitat" name="achitat">
                        </div>
                    </td>
                </tr>
            </tbody>
        </table>
    </div>
    <div class="modal-footer">
        <button type="submit" class="btn btn-success">
            <span class='glyphicon glyphicon-plus'></span> Adaugă Intrare
        </button>
    </div>
</form>

Примечание. Создан скрытый вход в <form> выше, передал значение <?php echo $row['PacientID']; ?> к скрытому вводу при модальном показе, опубликуйте этот скрытый ввод вместе с другими вводами при отправке формы в модальном режиме, чтобы вставить или обновить значения в базе данных

пример здесь

Миссия выполнена и надеюсь, что вы поймете, как пройти и получить информацию в модальном

Примечание: вы можете отправить модальную форму, как вы делаете, или также можете сделать это с Ajax и показать success или же error сообщение внутри модального окна, не закрывая его и не покидая страницу, но это другая история, которую нужно рассказать в другой раз.

Удачного кодирования.

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