如何使用外键将 PHP 表单中的数据插入到 MySQL 数据库中?
How to insert data from a PHP form into a MySQL db with Foreign keys?
我正在处理包含复选框和 MySQL 数据库的 PHP 表单。我终于通过遍历数组实现了插入多行,每个所选项目一行。
但是现在,我不得不面对另一个问题:在我的数据库中,我有一个主体 table 来存储单选题,另一个 table 来存储复选框中的答案。
我想首先执行查询,将单选答案插入主体 table(每个表格一行),以便它生成一个序列 ID。
其次,取回此 ID 并将其关联到插入复选框 table 的每一行,以便 link 通过此 ID 的两个 table。
请问这样可以吗,我该怎么办?
这里是HTML代码:
<input type="checkbox" name="nature_contact[]" value="1"><label >Phone</label><br/>
<input type="checkbox" name="nature_contact[]" value="2"><label >Mail</label><br/>
<input type="checkbox" name="nature_contact[]" value="3"><label >Visit</label><br/>
<input type="checkbox" name="nature_contact[]" value="4"><label >Unk</label> <br/><br/>
<input type="text" name="coord"/>
<br/>
<input type="text" name="tel"/>
<br/><br/>
<input type="submit" name="add" value="SEND"/>
这里是 PHP 部分:
try {
if(isset($_POST['add'])){
if(isset($_POST['coord'])) {
$coord=$_POST['coord'];
}
else { $coord = '';
}
if(isset($_POST['tel'])) {
$tel=$_POST['tel'];
}
else { $tel = '';
}
$query="INSERT INTO nmp_mfs.general (coord, tel) VALUES ('".$coord."', '".$tel."')";
$statement_gnl = $pdo->prepare($query);
$statement_gnl->execute();
}
}
catch(PDOException $e) {
$msg = 'ERREUR PDO dans ' . $e->getFile() . ' L.' . $e->getLine() . ' : ' . $e->getMessage();
die($msg);
}
try {
if(isset($_POST['add'])){
if(isset($_POST['nature_contact'])) {
$sql = "INSERT INTO nmp_mfs.t_temporaire (nature_contact) VALUES ".rtrim(str_repeat('(?),', count($_POST["nature_contact"])), ',');
$statement = $pdo->prepare($sql);
$count = 1;
foreach($_POST["nature_contact"] as $nature_contact) {
$statement->bindValue($count++, $nature_contact);
}
$statement->execute();
}
}
}
catch(PDOException $e) {
$msg = 'ERREUR PDO dans ' . $e->getFile() . ' L.' . $e->getLine() . ' : ' . $e->getMessage();
die($msg);
}
是的,这是可能的。
您需要主体 table 行的最后插入 ID,例如:
$lastInsertedID = $db->lastInsertId();
1.) 在数据库中插入问题table (principal)
2.) 获取最后插入的id ($lastInsertedID)
3.) 在答案中插入与问题相关的答案table并提供最后插入的id。
$query = "INSERT INTO nmp_mfs.t_temporaire (questionID, nature_contact)
VALUES ($lastInsertedID, $nature_contact)"; // Example
4.) Select 您问题的 ID。
5.) 得到相应答案:
$query = "SELECT awnsers WHERE question_id = questionID"; // Simple example
为了确保你的数据同步,你可以使用mysql.Sorry中的交易因为我的英语不好,我只是想做点有用的事情。
我正在处理包含复选框和 MySQL 数据库的 PHP 表单。我终于通过遍历数组实现了插入多行,每个所选项目一行。
但是现在,我不得不面对另一个问题:在我的数据库中,我有一个主体 table 来存储单选题,另一个 table 来存储复选框中的答案。
我想首先执行查询,将单选答案插入主体 table(每个表格一行),以便它生成一个序列 ID。
其次,取回此 ID 并将其关联到插入复选框 table 的每一行,以便 link 通过此 ID 的两个 table。
请问这样可以吗,我该怎么办?
这里是HTML代码:
<input type="checkbox" name="nature_contact[]" value="1"><label >Phone</label><br/>
<input type="checkbox" name="nature_contact[]" value="2"><label >Mail</label><br/>
<input type="checkbox" name="nature_contact[]" value="3"><label >Visit</label><br/>
<input type="checkbox" name="nature_contact[]" value="4"><label >Unk</label> <br/><br/>
<input type="text" name="coord"/>
<br/>
<input type="text" name="tel"/>
<br/><br/>
<input type="submit" name="add" value="SEND"/>
这里是 PHP 部分:
try {
if(isset($_POST['add'])){
if(isset($_POST['coord'])) {
$coord=$_POST['coord'];
}
else { $coord = '';
}
if(isset($_POST['tel'])) {
$tel=$_POST['tel'];
}
else { $tel = '';
}
$query="INSERT INTO nmp_mfs.general (coord, tel) VALUES ('".$coord."', '".$tel."')";
$statement_gnl = $pdo->prepare($query);
$statement_gnl->execute();
}
}
catch(PDOException $e) {
$msg = 'ERREUR PDO dans ' . $e->getFile() . ' L.' . $e->getLine() . ' : ' . $e->getMessage();
die($msg);
}
try {
if(isset($_POST['add'])){
if(isset($_POST['nature_contact'])) {
$sql = "INSERT INTO nmp_mfs.t_temporaire (nature_contact) VALUES ".rtrim(str_repeat('(?),', count($_POST["nature_contact"])), ',');
$statement = $pdo->prepare($sql);
$count = 1;
foreach($_POST["nature_contact"] as $nature_contact) {
$statement->bindValue($count++, $nature_contact);
}
$statement->execute();
}
}
}
catch(PDOException $e) {
$msg = 'ERREUR PDO dans ' . $e->getFile() . ' L.' . $e->getLine() . ' : ' . $e->getMessage();
die($msg);
}
是的,这是可能的。
您需要主体 table 行的最后插入 ID,例如:
$lastInsertedID = $db->lastInsertId();
1.) 在数据库中插入问题table (principal)
2.) 获取最后插入的id ($lastInsertedID)
3.) 在答案中插入与问题相关的答案table并提供最后插入的id。
$query = "INSERT INTO nmp_mfs.t_temporaire (questionID, nature_contact)
VALUES ($lastInsertedID, $nature_contact)"; // Example
4.) Select 您问题的 ID。
5.) 得到相应答案:
$query = "SELECT awnsers WHERE question_id = questionID"; // Simple example
为了确保你的数据同步,你可以使用mysql.Sorry中的交易因为我的英语不好,我只是想做点有用的事情。