使用MySql和phpmyadmin,我有两个表person
和report
,它们使用字段person_id
作为report
表中的外键进行链接。使用一个PHP表单我试图将人员详细信息添加到person
表。使用相同的表单,我希望它将日期发布到report
表,然后生成一个自动增量report_id
,并使用person_id
外国人将该人与该日期的特定报告相关联键。
这是我目前的代码
<?php
if (isset($_POST['submitted'])) {
include('dbcon.php'); //link to connection file
$pid = "SELECT person_id FROM person\n"
. "ORDER BY person_id DESC\n"
. "LIMIT 1"; //variable finds last generated person_id
$sqlinsert1 = "INSERT INTO person (person.title, person.first_name, person.last_name, person.address, person.contact_no, person.email, person.ha_id) VALUES ('$_POST[title]' , '$_POST[first_name]' , '$_POST[last_name]' , '$_POST[address]' , '$_POST[contact_no]' , '$_POST[email]' , '$_POST[ha_id]')";
$sqlinsert2 = "INSERT INTO report (report.date) VALUES ('$_POST[date]') WHERE ($pid = report.person_id)";
if (!mysqli_query($dbcon, $sqlinsert1)) {
die('Error inserting record');
} //end of nested if statement
if (!mysqli_query($dbcon, $sqlinsert2)) {
die('Error inserting record');
} //end of nested if statement
$newrecord = "new record added to database";
} //end of if statement
?>
我已经创建了变量$pid
,它将找到person_id
表中生成的最后一个person
,我已对此进行了测试,并且它在phpmyadmin中有效。我想使用此变量将日期与person_id
相关联,并将其放入report
表。
这可能听起来很复杂,但我确信有一个简单的答案。
答案 0 :(得分:0)
我认为错误在$ _POST [date]中使用'引号'。你的代码如下......
当您插入一个人后,取用人名。
然后插入报告
$sqlinsert2 = "INSERT INTO report (report.pid,report.date) VALUES ('$pid',"$_POST['date']");//changed check it
然后你的两个表将用pid(引用键)链接在一起。
答案 1 :(得分:0)
在与我的讲师交谈并花费数小时回应所有结果后,我们发现连接sqli语句('mysqli_query')连接到服务器但实际上并没有连接到数据库本身,因此不允许person_id使用select语句从person表中提取。
我们输入标准的sql连接语句并分别指定数据库名称。这似乎工作,我已经从另一个表('defect_id')添加了另一个外键,并为缺陷表添加了另一个插入语句。我现在可以运行此代码,它工作正常。
<?php
if (isset($_POST['submitted'])) {
include('dbcon.php');
//insert statement 1
$sqlinsert1 = "INSERT INTO person (title, first_name, last_name, address, contact_no, email, ha_id) VALUES ('$_POST[title]' , '$_POST[first_name]' , '$_POST[last_name]' , '$_POST[address]' , '$_POST[contact_no]' , '$_POST[email]' , '$_POST[ha_id]')";
if (!mysqli_query($dbcon, $sqlinsert1)) {
die('Error inserting record1');
} //end of nested if statement1
// connect to database
$dbcon2 = mysql_connect('localhost' , 'root' , '' ); //mysqli query would not connect to db so using mysql connection
if (!$dbcon2){
die('error connecting to database');
}
$dbselect = @mysql_select_db('potholes_v2');
if (!$dbselect){
die('error connecting database');
}
//insert statement 2
$sqlinsert2 = "INSERT INTO defect (road, location, carriageway, lane, diameter, depth, speed, description) VALUES ('$_POST[road]' , '$_POST[location]' , '$_POST[carriageway]' , '$_POST[lane]' , '$_POST[diameter]' , '$_POST[depth]' , '$_POST[speed]' , '$_POST[description]')";
if (!mysqli_query($dbcon, $sqlinsert2)) {
die('Error inserting record2');
} //end of nested if statement1
mysql_close(); //close database connection
//connect to database
$dbcon2 = mysql_connect('localhost' , 'root' , '' ); //mysqli query would not connect to db so using mysql connection
if (!$dbcon2){
die('error connecting to host');
}
$dbselect = @mysql_select_db('potholes_v2');
if (!$dbselect){
die('error connecting database');
}
//select person_id value
$value = mysql_query("SELECT person_id FROM person ORDER BY person_id DESC" , $dbcon2); //selects last entry of person_id in person table
if (!$value) {
die ('error, no values'); //error if no value selected
}
$value2 = mysql_result($value,0); //specifies new value to be inserted into report table as person_id foreign key
//select defect_id value
$defect = mysql_query("SELECT defect_id FROM defect ORDER BY defect_id DESC" , $dbcon2); //selects last defect_id entry from defect table
if (!$defect) {
die ('Error, no values for defect'); //error if no value selected
}
$defect2 = mysql_result($defect,0); //specifies new defect value to be placed in report table
//insert statement 3
$sqlinsert3 = "INSERT INTO report (date, person_id, defect_id) VALUES ('$_POST[date]' , $value2 , $defect2)"; //inserts date, person_id and defect_id values into report table
if (!mysqli_query($dbcon, $sqlinsert3)) {
die('Error inserting record 3');
} //end of nested if statement1
mysql_close(); //close database connection
$newrecord = "new record added to database"; //gives feedback for successful submission
} //end of initial if statement
?>