MySQL数据库条目仅插入来自多个表单输入克隆的最后一个用户输入

时间:2018-06-21 09:29:10

标签: php html mysql

Example of the SQL/php code, the second query is applicable。我创建了一个将id变量提交到MySQL数据库的用户输入。这些用户输入在表单中被多次克隆,从而导致多个重复的ID /名称,但是每个克隆的一个列(称为1列)是不同的。

现在,一旦添加了输入并提交了表单,它只会将最后一个表单项附加到数据库表中,这是我所期望的。

是否有可能将所有这些副本添加到表中的方法(也许基于第1列的差异)?我在想类似的东西:对于每个Column 1 INSERT INTO database1 ...

编辑

某些代码:

HTML:

<style> 
.hidden {
    display: none;
}
</style>

<body>
    <div id="samplesinfo" class="samplesinfo hidden">
        <input type="text" id="column1" name="column1" value="1" readonly>
        <input type="text" name="column2">
    </div>
    <button id="btn">Paste</button>
    <div>
        <h3>Paste Below</h3>
    </div>
    <form>
        <div id="paste">    
        </div>
        <button type="submit" name="submit">Submit</button> 
    </form>

jQuery:

$(document).ready(function() {
        var sample = 1;
        $("#btn").click(function() {
            var element = $(".samplesinfo.hidden").clone(true);
            element.removeClass("hidden").appendTo("#paste:last");
            sample++;
            $("#column1").val(sample)
        });

    });

和php:

if (isset($_POST['submit'])) {  
    $column1 = mysqli_real_escape_string($conn, $_POST['column1']);
    $column2 = mysqli_real_escape_string($conn, $_POST['column2']);

    $query = "INSERT INTO db1 ('column1', 'column2')
    VALUES ('$column1', '$column2');";

    mysqli_query($conn, $query);
    header("Location: ../web_page/analysis_page.php?add_order=success");
}

2 个答案:

答案 0 :(得分:1)

仅将新输入发送到后端是因为原始#column1#column2<form>之外。如果要发送所有内容,请将其放在<form>中。

接下来,如果您想将所有内容插入数据库并在更改现有记录的同时更新它们,则可以want to read this

如果要添加同一对象的多个记录,则必须将它们作为相同类型的记录发送到后端,然后将它们视为数组。

<form>
    <input name="column1[0][name]" value="first one">
    <input name="column1[1][name]" value="second one">
    <input name="column1[2][name]" value="third one">
</form>

提交此示例将为您提供3个column1数组条目,这些条目具有名称和相关值。

// example value of received data
$_POST = [
    'column1' => [
        0 => [
            'name' => 'first one',
        ],
        1 => [
            'name' => 'second one',
        ],
        2 => [
            'name' => 'third one',
        ],
    ],
];

要将全部转储到数据库中,请在foreach()循环中使用查询。如:

foreach ($_POST['column1'] as $column) {
     $query = "INSERT INTO db1 ('column1') VALUES (" . $column['name'] . ");";
}

很明显,您必须针对用例在此处“ n”对其进行一些更新,并且不要忘记清理此数据。

答案 1 :(得分:0)

我用类替换了id,并在输入字段名称中添加了[],因此$_POST['column1']$_POST['column2']是数组。

HTML:

<style> 
.hidden {
    display: none;
}
</style>

<body>
    <div id="samplesinfo" class="samplesinfo hidden">
        <input type="text" class="column1" name="column1[]" value="1" readonly>
        <input type="text" class="column2" name="column2[]">
    </div>
    <button class="btn">Paste</button>
    <div>
        <h3>Paste Below</h3>
    </div>
    <form>
        <div class="paste">    
        </div>
        <button type="submit" name="submit">Submit</button> 
    </form>

Javascript:

$(document).ready(function() {
        var sample = 1;
        $(".btn").click(function() {
            sample++;
            $(".samplesinfo.hidden").find(".column1").val(sample);
            var element = $(".samplesinfo.hidden").clone(true);
            element.removeClass("hidden").appendTo(".paste:last");
        });

    }); 

PHP:

if (isset($_POST['submit'])) {  
    $n = count($_POST['column1']);
    for($i = 0; $i<$n; ++$i) {
        $column1 = mysqli_real_escape_string($conn, $_POST['column1'][$i]);
        $column2 = mysqli_real_escape_string($conn, $_POST['column2'][$i]);

        $query = "INSERT INTO db1 (column1, column2)
        VALUES ('$column1', '$column2');";

        mysqli_query($conn, $query);
    }
    header("Location: ../web_page/analysis_page.php?add_order=success");
}