使用PHP表单将外键数据插入表时出现问题

使用PHP表单将外键数据插入表时出现问题,php,mysql,Php,Mysql,我是PHP和MySQL的新手,需要帮助 我在数据库中有两个表,分别是Staff和Position。职员表StaffId、Name、PositionID fk。职位表中填充了不同的职位经理、主管等。这两个表通过Staff表中的PositionID外键链接。我有一份员工登记表,上面有文本字段,要求提供相关属性,还有一个动态填充的下拉列表来选择职位。我需要将用户条目与所选职位一起插入staff表。但是,在插入数据时,出现以下错误:无法添加或更新子行:外键约束失败。如何将用户选择的职位插入staff表?

我是PHP和MySQL的新手,需要帮助

我在数据库中有两个表,分别是Staff和Position。职员表StaffId、Name、PositionID fk。职位表中填充了不同的职位经理、主管等。这两个表通过Staff表中的PositionID外键链接。我有一份员工登记表,上面有文本字段,要求提供相关属性,还有一个动态填充的下拉列表来选择职位。我需要将用户条目与所选职位一起插入staff表。但是,在插入数据时,出现以下错误:无法添加或更新子行:外键约束失败。如何将用户选择的职位插入staff表? 这是我的一些代码

...
echo "<tr>";
echo "<td>";
echo "*Position:"; 
echo "</td>";
echo "<td>";

//dynamically populate the staff position drop down list from the position table
$position="SELECT PositionId, PositionName
            FROM Position
            ORDER BY PositionId";
$exeposition = mysql_query ($position) or die (mysql_error());
echo "<select name=position value=''>Select Position</option>";
while($positionarray=mysql_fetch_array($exeposition))
{
echo "<option value=$positionarray[PositionId]>$positionarray[PositionName]</option>";
}
echo "</select>";   
echo "</td>";
echo "</tr>"

//the form is processed with the code below

$FirstName = $_POST['firstname'];
$LastName = $_POST['lastname'];
$Address = $_POST['address'];
$City = $_POST['city'];
$PostCode = $_POST['postcode'];
$Country = $_POST['country'];
$Email = $_POST['email'];
$Password = $_POST['password'];
$ConfirmPass = $_POST['confirmpass'];
$Mobile = $_POST['mobile'];
$NI = $_POST['nationalinsurance'];
$PositionId = $_POST[$positionarray['PositionId']];

//format the dob for the database
$dobpart = explode("/", $_POST['dob']);
$formatdob = $dobpart[2]."-".$dobpart[1]."-".$dobpart[0];
$DOB = date("Y-m-d", strtotime($formatdob));

$newReg = "INSERT INTO Staff (FirstName, LastName, Address, City, PostCode,     
Country, Email, Password, Mobile, DOB, NI, PositionId) VALUES ('".$FirstName."', 
'".$LastName."', '".$Address."', '".$City."', '".$PostCode."', '".$Country."',  
'".$Email."', '".$Password."', ".$Mobile.", '".$DOB."', '".$NI."', '".$PostionId."')";

非常感谢您的时间和帮助。

您的插页好像打错了。变量$PostionId应为$PostionId


此外,请确保您了解代码易受攻击。

在insert SQL查询中,您使用的是:

, '".$PostionId."')"
在前面几行中,您声明:

$PositionId = $_POST[$positionarray['PositionId']];
insert查询中使用的变量与包含数据的变量不同:它缺少一个i-我想这是不好的

如果这还不足以解决您的问题,那么在执行SQL查询之前回显它可能会帮助您找出其中的错误

这种关于外键的错误通常是由插入错误的id引起的,该id在引用的表中没有对应的行

除此之外,您的代码容易受到攻击:您应该转义并过滤数据

对于字符串值,可以使用:

对于整数值,可以确保在SQL查询中注入整数,例如使用:


不确定这里是否有整数值,所以我只是以“数据”为例

非常感谢您的快速响应…我更正了输入错误,但仍然收到了相同的错误消息。我通过如下方式回显,检查是否正在以正确的方式检索用户输入的PositionId$PositionId=$\u POST[$positionarray['PositionId'];echo$PositionId;这没有显示任何内容,你能看到这里出了什么问题吗?再次感谢!谢谢大家的评论!我已经弄明白了…我应该使用$PositionId=$\u POST['position']来检索位置的值。吉迪恩:很高兴你解决了这个问题。如果您觉得有帮助,您可以通过单击绿色勾号将答案标记为已接受。如果您进一步询问有关堆栈溢出的问题,这将帮助您获得更多答案。@Gideon:很高兴您发现:-即使这与您的问题无关,顺便说一句,我所说的SQL注入仍然是正确的-
$FirstName = mysql_real_escape_string($_POST['firstname']);
$data = intval($_POST['data']);