我无法理解我错了什么。 我正在创建一个Android应用程序,人们注册输入他们的电话号码,然后在另一个活动中输入姓名和姓名,注册完成。 问题是我有一个带有2个表的数据库,一个名为" Numbers" (字段是ID和电话号码)和表"客户" (字段是ID,Name,Surname和idNumbers_fk)。 我无法将数据保存在第二个表中,如何管理二级密钥? 从某种意义上说,你与"数字"的主键相关联。表,但我不能在ID字段中传递它的值。 我有一个PHP代码在表中插入数据,但我不明白为什么它不起作用。
你能帮助我吗?
这是我在db中的内容: 名称数据库:Test1 表格数量:2
表1:
表2:
这是我的电话号码注册PHP代码(可行):
<?php
if($_SERVER['REQUEST_METHOD']=='POST'){
include 'Test1config.php';
$con = mysqli_connect($HostName,$HostUser,$HostPass,$DatabaseName);
$Pnumber = $_POST['NumberPhone'];
$CheckSQL = "SELECT * FROM Numbers WHERE Phone_number='$Pnumber'";
$check = mysqli_fetch_array(mysqli_query($con,$CheckSQL));
if(isset($check)){
echo 'Number already registered';
}
else{
$Sql_Query = "INSERT INTO Numbers (Phone_number) values ('$Pnumber')";
if(mysqli_query($con,$Sql_Query))
{
echo 'Registration Successfully';
}
else
{
echo 'Something went wrong';
}
}
}
mysqli_close($con);
?>
这是给我错误的PHP文件的代码,在这里我将数据插入&#34; Costumers&#34; table,但它给了我错误,但是如果我从&#34; Costumers&#34;中删除了外键。它有效的表,为什么?我哪里错了?
<?php
if($_SERVER['REQUEST_METHOD']=='POST'){
include_once("Test2congig.php");
$first_name = $_POST['nameC'];
$last_name = $_POST['surnameC'];
if($first_name == '' || $last_name == '' ){
echo json_encode(array( "status" => "false","message" => "Parameter missing!") );
}else{
$query= "SELECT * FROM Costumers WHERE Name='$first_name' AND Surname='$last_name'";
$result= mysqli_query($con, $query);
if(mysqli_num_rows($result) > 0){
echo json_encode(array( "status" => "false","message" => "User already exist!") );
}else{
$query = "INSERT INTO Costumers (Name,Surname) VALUES ('$first_name','$last_name')";
if(mysqli_query($con,$query)){
$query= "SELECT * FROM Costumers ";
$result= mysqli_query($con, $query);
$emparray = array();
if(mysqli_num_rows($result) > 0){
while ($row = mysqli_fetch_assoc($result)) {
$emparray[] = $row;
}
}
echo json_encode(array( "status" => "true","message" => "Successfully registered!" , "data" => $emparray) );
}else{
echo json_encode(array( "status" => "false","message" => "Error occured, please try again!") );
}
}
mysqli_close($con);
}
} else{
echo json_encode(array( "status" => "false","message" => "Error occured, please try again!") );
}
?>
答案 0 :(得分:1)
在您的Costumers
表格中,将字段idNumbers_fk
的默认值设为NULL
。这样,当您不为此字段设置数据时,它将为NULL,这是可接受的外键值。
它失败的原因是默认情况下很可能插入0,而Numbers表中不存在id为0的电话号码。
然而,对您的问题的更广泛的答案是,您必须在应用中的某处保存电话号码的ID,以便当客户想要在之后添加姓名和姓氏时,您同时使用该电话ID。
像这样:
INSERT INTO Costumers (Name,Surname,idNumbers_fk) VALUES ('$first_name','$last_name', '$phoneNumberIdFromSomeSessionOrCache')
$phoneNumberIdFromSomeSessionOrCache
是客户保存电话号码后需要存储的值...