Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 需要帮助插入MySQL数据库中的记录吗_Php_Mysql_Arrays_Insert_Loops - Fatal编程技术网

Php 需要帮助插入MySQL数据库中的记录吗

Php 需要帮助插入MySQL数据库中的记录吗,php,mysql,arrays,insert,loops,Php,Mysql,Arrays,Insert,Loops,我有一个在线表单,它收集成员信息并将其存储到一个很长的MySQL数据库中。我们允许最多16名成员一次注册,最初的DB结构允许这样做 例如: 如果有一名成员注册,他的个人信息(名字、姓氏、地址、电话、电子邮件)将存储在一行中 如果15个成员同时注册,他们的个人信息将存储在同一行中 该行包含所有“可能”输入的信息列。我正试图整合这段代码,并让每一个注册的第n个成员在数据库中加入一条新记录 我以前见过插入多个记录的建议,例如: 插入到表名值中 (“$f1name”、“$f1address”、“$f1p

我有一个在线表单,它收集成员信息并将其存储到一个很长的MySQL数据库中。我们允许最多16名成员一次注册,最初的DB结构允许这样做

例如: 如果有一名成员注册,他的个人信息(名字、姓氏、地址、电话、电子邮件)将存储在一行中

如果15个成员同时注册,他们的个人信息将存储在同一行中

该行包含所有“可能”输入的信息列。我正试图整合这段代码,并让每一个注册的第n个成员在数据库中加入一条新记录

我以前见过插入多个记录的建议,例如:

插入到表名值中 (“$f1name”、“$f1address”、“$f1phone”)、(“$f2name”、“$f2address”、“$f2phone”)

这个问题有两个方面:
  • 我不知道有多少记录 由一个人登记到另一个人 所以唯一的办法就是 上面的语句是使用循环
  • 从数据库中收集的信息 表单不是单个数组,所以我 无法循环通过一个数组和 把它解析出来,我的信息是 作为单个输入字段收集 例如:Member1FirstName, Member1LastName、Member1Phone、, Member2Firstname、Member2LastName、, Member2Phone…等等

  • 是否可以在不使用循环的情况下将信息存储在单独的行中(因此必须返回并完全重新构造我的表单字段名称等)(由于验证规则的构建方式,这是不可能发生的。)

    我想您可能想看看“变量”:


    然后,您可以在1到15之间循环,而不必重命名表单字段。

    如果表单的结构使所有字段都正确编号,从而使“firstname#1”与所有其他“#1”编号字段匹配,那么循环是最简单的解决方案

    start_transaction();
    $errors = false;
    for ($i = 1; $i <= 16; $i++) {
       if (... all $i fields are properly filled in ...) {
          $field = $_POST["field$i"];
          $otherfield = $_POST["otherfield$i"];
          etc...
    
          ... insert into database ...
       } else {
          ... handle error condition here
          $errors = true;
       }
    }
    if (!$errors) {
       commit_transaction();
    } else {
       rollback();
    }
    
    您可以通过以下查询提取完整的注册记录集:

    SELECT signups.id, signups.name, signup_members.id, firstname, lastname
    FROM signups
    LEFT JOIN signup_members ON signups.id = signup_members.signup_id
    ORDER BY ...
    
    这将为您提供一系列行,每个“成员”注册一行。要构建CSV,请执行一个简单的循环,并进行一些状态检查,以查看您是否已达到新注册:

    $oldid = null;
    $csv = ... put column headers here if you want ...
    while ($signup = $result->fetchrow()) {
        if ($signup['signups.id'] != $oldid) {
            // current signup doesn't match previous seen id, so got a new signup record
            $csv .= "\n"; // start new line in CSV
            $csv .= ... add first few columns to new csv row ...
            $oldid = $signup['signups.id']; // store new record id
        } else {
            $csv .= ... add extra member columns to current csv row ...
        }
     }   
    

    您试图做的事情可能更简单,但要解决这个问题,您可以将用户信息合并到一个变量中,由您选择的字符分隔,然后将其发送到Mysql DB

    $user1 = $f1name . ';' . $f1address . ';' . $f1phone;
    $user2 = $f2name . ';' . $f2address . ';' . $f2phone;
    $user3 = $f3name . ';' . $f3address . ';' . $f3phone;
    
    INSERT INTO table-name VALUES('$user1','$user2','$user3')
    
    要提取,只需通过“;”来“分解”值。 如果对所有用户数据使用相同的顺序,并且如果在一个用户将字段留空时发送验证字符串,则效果很好:) 哼……如果用户不允许使用“;”作为“个人数据”,这项工作就可以了:


    希望它能帮助你

    当变量名称末尾的num出现时,您的命名约定是否确定?@Babiker-我猜您的意思是我上面的“Name2”等等?实际值在整个过程中存储在会话中,并通过mysql\u real\u escape\u string()运行。实际上,插入值看起来像“$f1fname”、“$f1lname”、“$f1phone”、“$f2fname”、$f2lname”、“$f2phone”),但并不完全清楚您想要实现什么。“你是说,你现在不想像以前那样把所有15个人都放在一行,而是想让每个人都放在自己的一行吗?”埃德·丹尼尔-是的,这正是我想要做的。但是,我还没有数组中的成员(由于我验证每个字段的方式,我不会这样做)嘿,JM4,我认为让你的应用程序因为验证而向后弯曲可能会影响你以后的工作。变量不能与超全局变量一起使用,函数或类方法。不确定您的答案是否接近,因此可能是误读或键入错误。在这个场景中,我根本不使用POST变量。该示例显示了我的变量格式,即F(数字变量)(字段):即F1FirstName。您所做的就是向我展示如何循环将POST变量存储到另一个全局变量中,我已经这样做了。我正在尝试将注册结束时的每一条信息插入数据库。谢谢您的帮助。老实说,我们将其保留在一行中的唯一原因是,客户机需要能够在不同时间提取数据库数据的CSV文件,没有比较两个CSV文件(父文件和子文件)的技术能力,并且我不确定如何使用两个或多个表中的数据编译单个CSV
    $oldid = null;
    $csv = ... put column headers here if you want ...
    while ($signup = $result->fetchrow()) {
        if ($signup['signups.id'] != $oldid) {
            // current signup doesn't match previous seen id, so got a new signup record
            $csv .= "\n"; // start new line in CSV
            $csv .= ... add first few columns to new csv row ...
            $oldid = $signup['signups.id']; // store new record id
        } else {
            $csv .= ... add extra member columns to current csv row ...
        }
     }   
    
    $user1 = $f1name . ';' . $f1address . ';' . $f1phone;
    $user2 = $f2name . ';' . $f2address . ';' . $f2phone;
    $user3 = $f3name . ';' . $f3address . ';' . $f3phone;
    
    INSERT INTO table-name VALUES('$user1','$user2','$user3')