【问题标题】:Website form issues when sending information to database将信息发送到数据库时出现网站表单问题
【发布时间】:2018-01-03 16:54:09
【问题描述】:

我会尽量以最好的方式解释这一点。所以我有一个包含 3 个表的数据库:customers、login 和 address,它们看起来像这样:

customerID
first_name
last_name
email
phone
login_fk
address_fk

loginID
username
password

addressID
housenumber
streetname
postcode
city

代码:

$query = "INSERT INTO customers ". "(first_name,last_name,phone,email) ". "VALUES('$fname','$sname','$phone','$email');"; 
$result = mysqli_query($conn, $query) or die(mysqli_error($conn)); 

我的网络表单将登录详细信息和地址详细信息发送到数据库没有问题。但是我收到了这条消息,并没有发送到客户表:

无法添加或更新子行:外键约束失败 (database1.customers, CONSTRAINT customers_ibfk_1 FOREIGN KEY (login_fk) REFERENCES login (loginID) ON UPDATE CASCADE)

除了自动递增的主键和 fk 值之外,我正在为所有字段(使用网络表单)分配值。我假设这个消息被提出是因为我没有设置 fk 值还是我错了?如果我是正确的,我如何从其他表中获取值以确保关系正确?即login_fk 和loginID 有关系,ID 应该和address_fk 和addressID 字段相同。如果我使用数据库插入值,那么关系很好,因为我手动分配 fk 值以匹配 loginID 和 addressID 所以我假设数据库很好,我只需要使用 php 从登录和地址中获取 ID并将其发送到客户表 fk 值?我曾多次使用数据库,也曾多次使用 php 和 html 网站,但这是我第一次尝试创建动态网站,所以如果这是一个愚蠢的问题,我深表歉意,但希望它能教会我更多和其他人在创建动态网站时可能会遇到同样的问题。

【问题讨论】:

  • 你的 SQL 插入语句是什么?
  • $query = "插入客户"。 “(名字,姓氏,电话,电子邮件)”。 "VALUES('$fname','$sname','$phone','$email');"; $result = mysqli_query($conn, $query) or die(mysqli_error($conn));
  • 我还要补充一点,我知道这对于 sql 注入并不安全,但我希望在继续进行参数化查询以防止它之前让其余部分正常工作
  • 好吧,那么简单的解决方案应该是在您检查用户名和密码时返回登录ID,然后将登录ID与您的插入一起传递给客户。
  • 谢谢你,Jacob,我认为这是必需的,但缺乏经验让我怀疑是否需要这样做,所以我很感激你保证这是正确的方法!

标签: php html sql database phpmyadmin


【解决方案1】:

这都是关于主键、候选键和外键概念的。 这里在您的“客户”表中声明的字段“login_fk”是子表,字段“loginID”作为在登录表中声明的主键,这是您的参考表/父表。 因此,首先您必须先将数据插入“登录”表(父表),然后才能将数据插入“客户”表。

有关主键和外键的更多详细信息,您可以访问 https://www.w3schools.com/sql/sql_foreignkey.asp

【讨论】:

    【解决方案2】:

    先在登录表中插入你的登录名和密码,然后对客户运行插入查询,这样你的外键就不会失败

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-09
      相关资源
      最近更新 更多