Я не могу понять, что я не так. Я создаю приложение для Android, где люди регистрируются, чтобы ввести свой номер телефона, а затем в другом действии они вводят имя и фамилию и регистрация завершена. Проблема в том, что у меня есть база данных с двумя таблицами, одна из которых называется "Числа" (поля - это идентификатор и номер телефона), а таблица "Клиенты" (поля - это ID, имя, фамилия и idNumbers_fk). Я не могу сохранить данные во второй таблице, как мне управлять вторичным ключом? В том смысле, что вы связаны с первичным ключом таблицы "Числа", но я не могу передать его значение в поле "Идентификатор". У меня есть PHP-код для вставки данных в таблицы, но я не понимаю, почему он не работает.
Вы можете мне помочь?
Вот что я имею в db: NAME DATABASE: 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, который дает мне ошибку, здесь я вставляю данные в таблицу "Costumers", но это дает мне ошибку, но если я удалю внешний ключ из таблицы "Costumers", это работает, почему? Где я ошибаюсь?
<?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!") );
}
?>
В вашей Costumers
таблице, сделать поле idNumbers_fk
значения по умолчанию NULL
. Таким образом, когда вы не установите данные в это поле, это будет NULL, что является приемлемым значением внешнего ключа.
Причина, по которой это не удается, заключается в том, что по умолчанию по умолчанию установлено значение 0, и в таблице Numbers нет номеров телефонов с id из 0.
Однако более широкий ответ на вашу проблему заключается в том, что вы должны сохранить идентификатор телефонного номера где-то в своем приложении, так что, когда клиент захочет добавить имя и фамилию впоследствии, вы будете использовать этот идентификатор телефона одновременно.
Как это:
INSERT INTO Costumers (Name,Surname,idNumbers_fk) VALUES ('$first_name','$last_name', '$phoneNumberIdFromSomeSessionOrCache')
$phoneNumberIdFromSomeSessionOrCache
- это значение, которое необходимо сохранить после того, как клиент сохранит номер телефона...