【问题标题】:How to create multiple dynamic form fields and insert in mysql database如何创建多个动态表单字段并插入mysql数据库
【发布时间】:2014-12-03 13:12:43
【问题描述】:

我需要创建动态文本字段,其中包含:姓名 姓 年龄 性别。我应该有一个名为“添加新用户”的按钮,它只是添加一个新行,我可以在其中输入姓名姓氏年龄性别。我需要它是动态的,因为我不知道每个事件会添加多少用户。我还需要在数据库中存储姓名 姓 年龄 性别 (x) 添加的行数。

我需要类似于下面的东西:但是我需要另外 3 行彼此相邻。所以我会“INSERT INTO my_hobbies (name, surname, age, gender)

我知道这听起来有些牵强,但我正在为此苦苦挣扎。

<?php 
require("dbconn.php");
?>

<html>
<head>
<title></title>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
var counter = 0;
$(function(){
$('p#add_field').click(function(){
counter += 1;
$('#container').append(
'<strong>Hobby No. ' + counter + '</strong><br />' 
+ '<input id="field_' + counter + '" name="dynfields[]' + '" type="text" /><br />' );

});
});
</script> 

<body>

<?php
if (isset($_POST['submit_val'])) {
if ($_POST['dynfields']) {
foreach ( $_POST['dynfields'] as $key=>$value ) {
$values = mysql_real_escape_string($value);
$query = mysql_query("INSERT INTO my_hobbies (hobbies) VALUES ('$values')", $connection );  

}
}

echo "<i><h2><strong>" . count($_POST['dynfields']) . "</strong> Hobbies Added</h2></i>";

mysql_close();
}
?>
<?php if (!isset($_POST['submit_val'])) { ?>
<h1>Add your Hobbies</h1>
<form method="post" action="">


<div id="container">
<p id="add_field"><a href="#"><span>Click To Add Hobbies</span></a></p>
</div>

<input type="submit" name="submit_val"  value="Submit"  />
</form>
<?php } ?>

</body>
</html>

【问题讨论】:

  • 切换到 mysqli_* 或 PDO。 mysql 功能不再维护。

标签: javascript php mysql


【解决方案1】:

Mysqliprepared Statements 我也有同样的答案。

我的html

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
    <p><label>Please enter your most recent education<br>
    <input type="text" name="dynfields[]">
</p>
<p><label>Please enter any previous education<br>
    <input type="text" name="dynfields[]">
</p>
<p><label>Please enter any previous education<br>
    <input type="text" name="dynfields[]">
</p>
<input type="submit" name="submit">
</form>

和php

foreach ( $_POST['dynfields'] as $key=>$value ) {

print_r($value."<br>");

$stmt = $conn->prepare("INSERT INTO dynamic_test2 (hobbies) VALUES (?)");
$stmt->bind_param("s", $values);

$values = $conn->real_escape_string($value);


$stmt->execute();

echo "New records created successfully";


}

【讨论】:

    【解决方案2】:

    您已经有一个 javascript 计数器,因此您可以使用它来识别哪些输入字段属于一起。根据你的例子可以使用这样的东西:

    $(function(){
        $('p#add_field').click(function(){
            counter += 1;
            $('#container').append(
            '<strong>Hobby No. ' + counter + '</strong><br />' 
            + '<input id="field_' + counter + '" name="dynfields['+counter+'][name]' + '" type="text" /><br />' +
            + '<input id="field_' + counter + '" name="dynfields['+counter+'][surname]' + '" type="text" /><br />' +
            + '<input id="field_' + counter + '" name="dynfields['+counter+'][age]' + '" type="text" /><br />' +
            + '<input id="field_' + counter + '" name="dynfields['+counter+'][gender]' + '" type="text" /><br />');
    
        });
    });
    </script>
    

    您可以以同样的方式在您的 PHP 中捕获它。只需注意该值现在是一个数组而不是单个值,但您可以使用array_keysarray_values 以简单的方式创建查询。在 PHP 中试试这个:

    if (isset($_POST['submit_val'])) {
        if ($_POST['dynfields']) {
            foreach ( $_POST['dynfields'] as $key=>$fieldArray ) {
    
                $keys = array_keys($fieldArray);
                $values = array_map("mysql_real_escape_string",$fieldArray);
    
                $query = mysql_query("INSERT INTO my_hobbies (".implode(',',$keys).") VALUES ('".implode('\',\'',$values)."')", $connection );  
            }
        }
    
        echo "<i><h2><strong>" . count($_POST['dynfields']) . "</strong> Hobbies Added</h2></i>";
    
        mysql_close();
    }
    

    是的,@alda1234 是对的。您不应该使用 mysql_*,因为它已被弃用。

    【讨论】:

    • @S.Pols.for 这个答案我已经搜索了很多天。终于明白了。谢谢你让我开心。
    猜你喜欢
    • 2014-07-21
    • 2013-08-15
    • 2014-07-06
    • 1970-01-01
    • 1970-01-01
    • 2021-09-21
    • 2013-10-20
    • 2017-10-01
    • 2021-01-23
    相关资源
    最近更新 更多