Php 表单中收集多个同名值的数组是否可能?

Php 表单中收集多个同名值的数组是否可能?,php,mysql,session,arrays,Php,Mysql,Session,Arrays,下午好 我将首先从我试图实现的目标开始,然后给出一个我需要做的非常基本的示例 目标 我决定放弃收集几个变量并用键分别命名它们,而是使用数组结构来处理相同类型和规则的所有输入。一旦我有了这些变量,我将根据它们进行验证,如果“确定”,则将它们存储在MySQL表中。该表将保存消费者信息,并且需要存储多行相同类型的信息 第一关 我将省略这个问题的验证部分,因为我觉得我需要首先了解基本知识 <form action="?" method="POST" name="Form"> Member 1

下午好

我将首先从我试图实现的目标开始,然后给出一个我需要做的非常基本的示例

目标 我决定放弃收集几个变量并用键分别命名它们,而是使用数组结构来处理相同类型和规则的所有输入。一旦我有了这些变量,我将根据它们进行验证,如果“确定”,则将它们存储在MySQL表中。该表将保存消费者信息,并且需要存储多行相同类型的信息

第一关 我将省略这个问题的验证部分,因为我觉得我需要首先了解基本知识

<form action="?" method="POST" name="Form">
Member 1 First Name:<input type="text" name="MemberFirstName[]" /><br />
Member 1 Last Name: <input type="text" name="MemberLastName[]" /><br />
Member 1 Email: <input type="text" name="MemberEmail[]" /><br />

Member 2 First Name:<input type="text" name="MemberFirstName[]" /><br />
Member 2 Last Name: <input type="text" name="MemberLastName[]" /><br />
Member 2 Email: <input type="text" name="MemberEmail[]" /><br />

Member 3 First Name:<input type="text" name="MemberFirstName[]" /><br />
Member 3 Last Name: <input type="text" name="MemberLastName[]" /><br />
Member 3 Email: <input type="text" name="MemberEmail[]" /><br />

<input type="submit" name="submit" value="Continue" />          
</form>

成员1姓名:
成员1姓氏:
成员1电子邮件:
成员2姓名:
成员2姓氏:
成员2电子邮件:
成员3姓名:
成员3姓氏:
成员3电子邮件:
我希望为名字(必填字段)提供的每个输入将为该特定条目生成一个唯一的键,而不会覆盖输入的任何数据。因为我将信息从一页传递到另一页(签出表单),所以我将POST变量转换为会话变量,然后最终存储在mysql数据库中。我的希望是:

<?php

$conn = mysql_connect("localhost", "username", "password");
mysql_select_db("DBname",$conn);

$sql = "INSERT INTO tablename VALUES ('$_SESSION[Member1FirstName]', '$_SESSION[Member1LastName]', '$_SESSION[Member1Email]', '$_SESSION[Member2FirstName]', '$_SESSION[Member2LastName]', '$_SESSION[Member2Email]', '$_SESSION[Member1FirstName]', '$_SESSION[Member3LastName]', '$_SESSION[Member3Email]')";


$result = mysql_query($sql, $conn) or die(mysql_error());
Header ("Location: completed.php");
?>

如果需要关联特定数量的集合中的字段,但仍希望它们位于数组中,则应在名称中添加索引。只有当您不知道最终数组将包含多少元素时,空索引才有用

Member 1 First Name:<input type="text" name="MemberFirstName[1]" /><br />
Member 1 Last Name: <input type="text" name="MemberLastName[1]" /><br />
Member 1 Email: <input type="text" name="MemberEmail[1]" /><br />
成员1的名字:
成员1姓氏:
成员1电子邮件:

根据您的列名,可以选择以下选项

INSERT INTO tablename 
VALUES ('$_SESSION[Member1FirstName]', '$_SESSION[Member1LastName]', '$_SESSION[Member1Email]'),
       ('$_SESSION[Member2FirstName]', '$_SESSION[Member2LastName]', '$_SESSION[Member2Email]'), 
       ('$_SESSION[Member1FirstName]', '$_SESSION[Member3LastName]', '$_SESSION[Member3Email]')"
将在mysql上工作,请参阅

然而,如果您不清理输入,这个答案将导致很多麻烦

编辑: 清理是指攻击,直接传递到数据库的字符串可能包含允许攻击者更改数据库密码或更新或销毁数据的结构

编辑2:
至于php语法,我认为有合理的答案,您可以从中学习。

您的问题到底是什么?我只是不理解为什么需要数组-这是完全可能的,但您应该在不同的情况下使用,如产品的颜色范围或类似的情况。在您的情况下,一个简单的memberfirstname1、memberfirstname2可以完成这项工作,并在开始时保持代码的简单性。@Felix King-我如何创建这样的值数组。我收集这个时不懂数组data@RonaldoJunior-原因是我实际上有12个字段,用于20个不同的成员,传递200多个会话变量是一件过分的事情,而且还导致我创建大量代码和验证。我希望能够创建一个单一的表单布局,并根据第1页上所需的注册人数,让表单自动创建其他字段以供选择population@JM4:这已经是将表单元素指定为数组的一部分的方法
$\u POST['MemberFirstName']
应该为您提供一个数组。你还没有试过吗?我的总体目标是使用数组来找出如何循环'insert'语句。如果我使用上面的方法(我已经这样做了,我为20多个成员提供了12个输入),这需要大量代码。你能解释一下“净化输入”吗?@JM4-我扩展了我的答案,重新净化/注入问题。至于PHP中的数组循环,问题是什么?foreach和其他方法由您决定。我认为在您上面给出的示例中,我在循环时遇到的问题是,我不知道输入了多少成员,所以我不确定在哪里运行循环。注册者可以选择一次注册1到20个成员,因此“插入到tablename”中的唯一保证是“$\u会话['Member1FirstName']值。根据我的估计,我需要将其全部更改为:插入tablename值('MemberFirstName[0],'MemberLastName[0]…等等,其中密钥的更改由注册人数决定entered@JMR-添加了一个关于通过php将多行插入mysql的问题的链接