Form中的数组可以收集多个具有相同名称的值吗?

时间:2010-05-17 23:12:57

标签: php mysql session arrays

下午好,

我将首先介绍我要完成的目标,然后给出我需要做的基本样本。

目标

我决定放弃并使用数组结构来处理相同类型和规则的所有输入,而不是收集几个变量并用键分别命名它们。一旦我有变量,我将验证它们,如果'ok'将它们存储在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>

我希望为First Name(必填字段)提供的每个输入都将为该特定条目生成唯一键,而不会覆盖输入的任何数据。因为我从页面到页面(结账表单)携带信息,我将POST变量转换为SESSION变量,然后最终存储在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");
?>

其中Member1,Member2和Member3值将显示在表中的各自行中。我知道我的代码是错误的,但我正在尝试实现我想要实现的整体业务目的,并试图学习如何以正确的方式编写代码。

我对编程非常非常新,因此非常感谢任何“宝贝建议”。

2 个答案:

答案 0 :(得分:1)

如果您想要在特定数量的集合中关联字段并仍然希望它们在数组中,那么您应该在名称中放置一个索引。只有当您不知道最终数组将包含多少元素时,空索引才有用。

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)

具体取决于您的列名

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

可以在mysql上运行,请参阅INSERT

然而,如果你不对输入进行消毒,这个答案会导致很多麻烦。

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

EDIT2: 至于php语法,我认为this question有合理的答案,你可以从中学习。