Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.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 表单中的Sql表关系_Php_Mysql - Fatal编程技术网

Php 表单中的Sql表关系

Php 表单中的Sql表关系,php,mysql,Php,Mysql,我有一个表格,用来收集联系人的信息,并在联系人簿中使用。我需要创建两个表。一个用于大多数数据,另一个用于单独的电话号码,因为每个人可以有多个电话号码。显然,我希望这些表是可关联的,但我不知道如何将表单中的数据输入到两个表中,以便它们共享一个关系。我还需要能够将数据连接到主表中的单个PhoneNumber列中 这一想法可以从以下几个方面得到说明: (来源:) 使用tableA_id填充PhoneNumber字段。我如何从表单中输入数据才能做到这一点 更新代码 11 //Form Validati

我有一个表格,用来收集联系人的信息,并在联系人簿中使用。我需要创建两个表。一个用于大多数数据,另一个用于单独的电话号码,因为每个人可以有多个电话号码。显然,我希望这些表是可关联的,但我不知道如何将表单中的数据输入到两个表中,以便它们共享一个关系。我还需要能够将数据连接到主表中的单个PhoneNumber列中

这一想法可以从以下几个方面得到说明:


(来源:)

使用tableA_id填充PhoneNumber字段。我如何从表单中输入数据才能做到这一点

更新代码

11 //Form Validation
12 $name = $email = $gender = $comment = $website = "";
13
14 if ($_SERVER["REQUEST_METHOD"] == "POST")
15 {
16   $firstname = test_input($_POST["firstname"]);
17   $email = test_input($_POST["email"]);
18   $lastname = test_input($_POST["lastname"]);
19   $street = test_input($_POST["street"]);
20   $city = test_input($_POST["city"]);
21   $state = test_input($_POST["state"]);
22   $country = test_input($_POST["country"]);
23   $workphone = test_input($_POST["workphone"]);
24   $mobilephone = test_input($_POST["mobilephone"]);
25   $homephone = test_input($_POST["homephone"]);
26   $phonearray = array("$workphone","$mobilephone","$homephone");
27
28
29 }
30
31 function test_input($data)
32 {
33   $data = trim($data);
34   $data = stripslashes($data);
35   $data = htmlspecialchars($data);
36   return $data;
37 }
//After validation we input the data into the tables.
84
85 $sql="INSERT INTO nameaddress
86 (FirstName, LastName, Street, City, State, Country,email,photo)
87 VALUES
88     ('$firstname','$lastname','$street','$city','$state','$country','$email','$uploadfile')";
89
90
91
92
93
94 if (!mysqli_query($con,$sql))
95   {
96   die('Error: ' . mysqli_error($con));
97   }
98
99 $lastInsertId=mysqli_insert_id($con);
100 foreach ($phonearray as $a) {
101 $select="INSERT INTO userphones(phonenumbers,nameaddress_id)102
102         VALUES ($a,".$lastInsertId.")";
103 mysqli_query($con,$select);
104 }

为大多数数据在第一个表中添加一个主键(例如,“id”)。phonenumber数据的第二个表应具有第一个表中主键的索引字段。

然后,您需要首先将非电话号码数据插入此表。然后使用SELECT LAST_INSERT_ID()获取此INSERT的主键,并将其添加到第二个表的INSERT中。这样,phonenumber表中的所有条目都将有一个索引字段,该字段将指向第一个表中的用户。

此stackoverflow线程对使用LAST_INSERT_ID()进行了很好的讨论:


要插入数据,需要在php的循环中插入数据,如下所示(伪代码):

单个
插入表格(名字、姓氏、地址、电子邮件)

获取上次插入的id(或)

在循环中插入所有电话号码:
foreach$phonenumber
插入电话(电话号码,从插入表格A的最后一个ID)

对于需要使用的输出,您的查询将如下所示:

select a.*, group_concat(b.phonenumbers)
from tableA as a
inner join
phones as b
on (a.id=b.tableA_id)
group by a.id
select *
from tableA as a
inner join
(
    select tableA_id, group_concat(phonenumbers)
    from tableB
    group by tableA_id
) as q
on (a.id=q.tableA_id)
group by a.id
注意:使用严格模式的mysql将不允许您使用group by中只有a.id的*,您需要这样做:

select a.*, group_concat(b.phonenumbers)
from tableA as a
inner join
phones as b
on (a.id=b.tableA_id)
group by a.id
select *
from tableA as a
inner join
(
    select tableA_id, group_concat(phonenumbers)
    from tableB
    group by tableA_id
) as q
on (a.id=q.tableA_id)
group by a.id

我无法使环路正常工作。我将在原始问题中发布一段代码。@user2872127为什么要将变量$lastsinsert设置为奇怪的字符串值并尝试将其插入数据库?也许您想执行它并存储结果?或者你应该使用mysqli_insert_id-会更简单好吧,我更改了它,我认为mysqli_insert_id语法是正确的,但我不确定。@user2872127语法不正确,如果你处理mysqli_查询中的错误,你会看到它,将它更改为
$lastInsertId=mysqli_insert_id($con)
在FOREACH之前和其中
$select=“插入到用户电话(mobilephone,nameaddress_id)102个值($a,“.$lastInsertId”)”