【问题标题】:Insert multiple forms into same table - only last form is inserted将多个表格插入同一个表格 - 仅插入最后一个表格
【发布时间】:2016-10-25 11:41:36
【问题描述】:

我的网站上有 2 个表格。第一种形式是静态的(一般信息)。如果人们想要插入多个项目,可以复制第二个(项目信息)(使用 jQuery)。如果提交的项目超过 1 个,则仅在数据库中插入最后一个项目。这不是它应该如何工作的。应提交所有项目表格。表格如下所示(有 2 个项目):

PHP 代码:

<?php include './includes/database.php';
if(isset($_POST['submit'])){
   $company_name = mysqli_real_escape_string($connection, $_POST['company_name']);
   $contact_name = mysqli_real_escape_string($connection, $_POST['contact_name']);
   $email_address = mysqli_real_escape_string($connection, $_POST['email_address']);
   $phone_number = mysqli_real_escape_string($connection, $_POST['phone_number']);
   $project_name = mysqli_real_escape_string($connection, $_POST['project_name']);
   $house_amount = mysqli_real_escape_string($connection, $_POST['house_amount']);
   $people_type = mysqli_real_escape_string($connection, $_POST['people_type']);
   $delivery_date = mysqli_real_escape_string($connection, $_POST['delivery_date']);

//Set date
$signup_date = date('Y-m-d', time());

//Lowercase email
$email_address = strtolower($email_address);

mysqli_autocommit($connection, false);

$flag = true;

    $query = "INSERT INTO developers_prospects (signup_date, company_name, contact_name, email_address, phone_number)
    VALUES ('$signup_date','$company_name','$contact_name','$email_address','$phone_number')";

    $result = mysqli_query($connection, $query);

    if (!$result) {
       $flag = false;
        echo "Error details: " . mysqli_error($connection) . ".";
    }

    $query1 = "INSERT INTO developers_prospects_projects2 (company_name, project_name, house_amount, people_type, delivery_date)

    VALUES ('$company_name','$project_name','$house_amount','$people_type','$delivery_date')";    

    $result = mysqli_query($connection, $query1);

    if (!$result) {
       $flag = false;
        echo "Error details: " . mysqli_error($connection) . ".";
    }

if ($flag) {
    mysqli_commit($connection);
    $success = "Bedankt $contact_name! We hebben je gegevens in goede orde ontvangen.";
    header ("Location: index.php?success=".urlencode($success));
} else {
    mysqli_rollback($connection);
    $error = "Oeps. Sorry $contact_name! Er ging iets mis.";
    header ("Location: index.php?error=".urlencode($error));  

} 

mysqli_close($connection);

}

?>

还有jQuery部分的代码:

 <script>
        $(document).ready(function() {
            var max_fields      = 10; //maximum input boxes allowed
            var wrapper         = $(".developers-signup-form-container"); //Fields wrapper
            var add_button      = $(".developers-signup-form-add"); //Add button ID
            var x = 1; //initlal text box count

            $(add_button).click(function(e){ //on add input button click
                e.preventDefault();
                if(x < max_fields){ //max input box allowed
                    x++; //text box increment
                    $len= $(".developers-signup-form-container").children("div").length+1;
                    $(wrapper).append("<div class='developers-signup-form-wrapper'><a href='#' class='developers-signup-remove-field'>X Sluiten</a><label class='developers-signup-form-label'>Projectnaam:</label><input class='developers-signup-form-field' type='text' name='project_name' ><label class='developers-signup-form-label'>Aantal woningen:</label><input class='developers-signup-form-field' type='text' name='house_amount' ><label class='developers-signup-form-label'>Type bewoners:</label><input class='developers-signup-form-field' type='text' name='people_type' ><label class='developers-signup-form-label'>Gewenste afleverdatum:</label><input class='developers-signup-form-field' type='text' name='delivery_date' ></div>");} });

            $(wrapper).on("click",".developers-signup-remove-field", function(e){ //user click on remove text
                e.preventDefault(); $(this).parent('div').remove(); x--;
            }) });
    </script>

我做错了什么?期待您的回答。

【问题讨论】:

    标签: php jquery mysql forms


    【解决方案1】:

    首先,由 jQuery 添加的所有输入都具有相同的名称(project_name、house_amount、people_type、delivery_date)

    然后你的php 代码又不能处理新项目的多次插入。

    重命名输入,以便将它们声明为数组

    '<input class="..." name="projectName[]"/>'
    

    或

    '...<input class="..." name="projectName[' + index + ']"/>...'
    

    其中index 将是php 数组中的一个键 - 在您的情况下,您可能可以使用x 变量

    然后在你的 php 脚本中 $_POST['projectName'] 将是一个你应该循环的数组

    另一种方法是像这样命名输入:

    '<input class="..." name="projects[' + index + '][projectName]" />
    <input class="..." name="projects[' + index + '][house_amount]" />'
    

    然后在$_POST['projects'] 你将拥有多维数组,你可以这样做:

    foreach ($_POST['projects'] as $projectKey => $project) {
        $projectName = $project['projectName']; // don't forget to escape
        $houseAmount = $project['houseAmount'];
        // 
        // do insert to db
    }
    

    【讨论】:

    • 嗨,米哈尔。我已将 foreach 循环添加到我的 php 脚本中(在 $query1 部分之后,在 if-submit-statement 中(这是正确的位置)并添加了一个新查询以将其插入数据库。此外,在 jQuery部分我已将输入重命名为(项目名称示例):name='project["+$len+"][project_name]。$len 在代码顶部声明。它确实插入了通用表单和第一个项目表单(这与我的第一次尝试不同) ,但是它不会插入第二个/第三个/第四个/等表单。
    • 我的 foreach 语句如下所示: ` foreach ($_POST['projects'] as $projectKey => $project) { $project_name = $project['project_name']; $house_amount = $project['house_amount']; $people_type = $project['people_type']; $delivery_date = $project['delivery_date'];休息; `
    • 它不会插入第二个/第三个等,因为您的循环中有break。而不是break 将您的项目插入逻辑放在那里
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-07
    相关资源
    最近更新 更多