php - 一次在 2 个表中插入数据,使用表单 - PHP,PDO
问题描述
我正在尝试使用此表单在 2 个表中插入数据。在表单中,我有显示数据库数据的复选框。我在第二个表中引入数据时遇到问题,因为我希望它从第一个表中获取 id 并从复选框中获取数据。
这是表单的代码:
<form method="POST" action="functionsArt.php">
<fieldset class="form-group border-rounded">
<legend>Adaugare Articol<br><br></legend>
<div class="form-group">
<label>Nr. Articol:</label>
<input class="form-control" type="text" name="id_articol" placeholder="Nr. Articol">
</div> <!--form-group-->
<div class="form-group">
<label>Titlu:</label>
<input class="form-control" type="text" name="titlu" placeholder="Titlu">
</div> <!--form-group-->
<label>Categorii:</label><br>
<div class="checkbox">
<?php foreach ($results as $output){ ?>
<input type="checkbox" name="categ[]" value="<?php echo $output['id_categ'] ?>"> <?php echo $output['id_categ'] .' - '. $output['nume']; ?><br>
<?php } ?>
</div> <!--ckeckbox-->
<br>
<div class="form-group">
<label>Descriere articol:</label>
<textarea class="form-control" rows="3" id="articole" name="descriere" placeholder="Enter text here..."></textarea>
</div>
<label>Text articol:</label>
<div class="form-group">
<textarea class="form-control" rows="10" id="articole" name="text" placeholder="Enter text here..."></textarea>
</div>
<button class="btn btn-primary" type="submit" value="Submit" name="submit">Submit</button>
</fieldset> <!--fieldset-->
</form>
这是 PHP 代码,来自 functionsArt.php :
if(isset($_POST['submit'])){
$conn = DB::connect();
$id_articol = sanitizeString($_POST['id_articol']);
$titlu = sanitizeString($_POST['titlu']);
$descriere = sanitizeString($_POST['descriere']);
$text = sanitizeString($_POST['text']);
if($id_articol =="" || $titlu =="" || $descriere == "" || $text == "" || $id_categ =""){
die('All fields are required.'); //it will stop executing the code
}
if(insertArticole($conn, $id_articol, $titlu, $descriere, $text, $id_categ)){//if query returns true
$_SESSION['id_articol'] = $id_articol;
$_SESSION['titlu'] = $titlu;
$_SESSION['descriere'] = $descriere;
$_SESSION['text'] = $text;
//$id_categ = $output['id_categ'];
header("Location: adminpanel.php");
}
if(!empty($_POST['categ'])){
//$id_categ=$categ;
$id_categ = implode(",",$_POST['categ']);
$id_articol = $conn ->lastInsertId();
}
}
函数 insertArticole($conn, $id_articol, $titlu, $descriere, $text, $id_categ) {
$query = $conn ->prepare("INSERT INTO articole (id_articol, titlu, descriere, text) VALUES (:id_articol, :titlu, :descriere, :text)"); //query for inserting articles into database
$query->bindParam(":id_articol", $id_articol);
$query->bindParam(":titlu", $titlu);
$query->bindParam(":descriere", $descriere);
$query->bindParam(":text", $text);
$query->execute();
if($query -> rowCount()== 1 ){
$q = $conn ->prepare("INSERT INTO articole_categ (id_articol, id_categ) VALUES(:id_articol, :id_categ)");
$q->bindParam(":id_articol", $id_articol);
$q->bindParam(":id_categ", $id_categ);
$q->execute();
}
}
我不得不提一下,在“articole”表中,id_articol 是 PRIMARY KEY,而在“articole_categ”表中,id_articol 是 FOREIGN KEY。同样,id_categ 是 FOREIGN KEY,引用另一个表。当我按下提交按钮时,它给了我这个警告:警告:PDOStatement::execute(): SQLSTATE[23000]: 完整性约束违规:1452 无法添加或更新子行:外键约束失败(medicaldb
. articole_categ
, CONSTRAINT id_categ
FOREIGN KEY ( id_categ
) REFERENCES categorii
( id_categ
) ON DELETE CASCADE ON UPDATE CASCADE) 并且数据只在第一个表中引入。有人可以帮我处理这段代码吗?db 中的表已正确完成,因为如果我从 db 插入数据,我可以插入数据。问题出在代码上。
解决方案
推荐阅读
- c# - 如何从 C# 调用 COM 对象
- c - convert SUM function of C language to x64 assembly language
- xcode - How to run .ipa from Xcode on Mac
- java - 从另一个 APK 加载带有布局的片段
- python - 在将数据框的列中的特定单词导出为 Excel 工作表之前,有什么方法可以突出显示它?
- react-native - 在列表中反应原生多视图?
- google-calendar-api - 删除事件时未找到 Google.Apis.Requests.RequestError
- c# - 使用 c# 在 EWS 中转发/回复邮件时如何更改主题
- python - 如何在vscode中运行几行选定的代码?
- android - 如何用数组更新表中的列