Форма PHP SQL с действием JS - показывать результат только в отдельном div вместо всех - PullRequest
1 голос
/ 23 марта 2019

Мне нужно отобразить результат динамически созданного запроса на публикацию формы только в одном делении.

Исходная таблица и сценарии более сложны, но я разбил их на основы для этого примера.

Таблица:

enter image description here

form.php

<!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <title>title</title>
    <style>
        body {padding: 30px; font-family: Arial;}
        input {margin: 6px 0;}
        .result {margin-bottom: 30px; color:green;}
    </style>
</head>

<body>

<?php 

$conn = mysqli_connect('dbserver', 'dbuser', 'dbpw', 'dbname') or die("Connection failed: " . mysqli_connect_error());
$conn->query("SET NAMES 'utf8'");
    if (mysqli_connect_errno()) {
        printf("Connect failed: %s\n", mysqli_connect_error());
        exit();
    }  

$sql = "SELECT * FROM table_name ORDER BY email ASC";  

$rs_result = mysqli_query($conn, $sql);

//the following part will echo multiple individual forms, depending on the table content. In this case 5.
while ($row = mysqli_fetch_assoc($rs_result)) {

    echo '
    '.$row["email"].'

    <form action="marked.php" method="POST" id="marked_form_'.$row["id"].'" class="marked_form">
        <input type="hidden" name="email_to_mark" value="'.$row["email"].'">

        <input type="submit" name="submit" value="Submit" class="marked_submit">

    </form>

    <div class="result">
    <!--echo result here-->
    </div>
    ';  
}

?>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<script>
$(document).ready(function() {
    $(".marked_form").submit(function() {
        // Getting the form ID
        var  formID = $(this).attr('id');
        var formDetails = $('#'+formID);
        $.ajax({
            type: "POST",
            url: 'marked.php',
            data: formDetails.serialize(),
            success: function (data) {  
                // Inserting html into the result div
                $('.result').html(data);
            },
            error: function(jqXHR, text, error){
            // Displaying if there are any errors
                $('.result').html(error);           
        }
    });
        return false;
    });
});
</script>

</body>
</html>

Приведенный выше код будет отображать 5 форм в этом примере, выглядя следующим образом: enter image description here

Форма отправляется в mark.php , которая возвращает /Отобразите результат:

<?php 

$email_to_mark = $_POST['email_to_mark'];

$conn = new mysqli('dbserver', 'dbuser', 'dbpw', 'dbname');

$sql = "UPDATE table_name SET marked='1' WHERE email='$email_to_mark'";

if (mysqli_query($conn, $sql)) {
    echo 'SUCCESS';
} else {
    echo 'ERROR';
}

?>

В целом форма и запрос работают нормально, но когда я отправляю одну из форм, результат будет отображаться во всех div = class = "result" на странице в видеэто:

enter image description here

Когда я изменяю его с

<div class="result"> 

на

<div id="result"> 

, он показываетрезультат только в первом div, даже если он не ниже формы, из которой я его отправил.

=========================

Так что мне нужен результат, который будет показан только нижея только что представил, как смоделировано здесь:

enter image description here

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

<div id="result_'.$row["id"].'">

... но так как я новичок в JS, я не знаю, как индивидуально писать в эти div.

Спасибо.

Ответы [ 3 ]

1 голос
/ 23 марта 2019

Попробуйте,
Изменил свой идентификатор формы

<form action="marked.php" method="POST" id="form_'.$row["id"].'" class="marked_form">

замените класс div результата на id и добавьте уникальный идентификатор $ row или объедините его

<div id="result_form_'.$row["id"].'">
    <!--echo result here-->
</div>

JS Изменения

$(".marked_form").submit(function() {
        // Getting the form ID
        var  formID = $(this).attr('id');
        var formDetails = $('#'+formID);
        $.ajax({
            type: "POST",
            url: 'marked.php',
            data: formDetails.serialize(),
            success: function (data) {  
                // Inserting html into the result div
                $('#result_'+formID).html(data);//changes
            },
            error: function(jqXHR, text, error){
            // Displaying if there are any errors
                $('#result_'+formID).html(data);//changes       
        }
    });

только что обновил ваш результат div id

0 голосов
/ 23 марта 2019

Имеются очень простые приемы

Просто используйте функцию .next ()

$ (this) .next (). Html (data);

ИЛИ

$ (formID) .next (). Html (данные);

0 голосов
/ 23 марта 2019

Вы должны указать соответствующий идентификатор в js. Например:

HTML

<div id="result_'.$row["id"].'"> 

JS

 $('#result_' + formID).html(data);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...