首页 > 解决方案 > 一次在 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_categFOREIGN KEY ( id_categ) REFERENCES categorii( id_categ) ON DELETE CASCADE ON UPDATE CASCADE) 并且数据只在第一个表中引入。有人可以帮我处理这段代码吗?db 中的表已正确完成,因为如果我从 db 插入数据,我可以插入数据。问题出在代码上。

标签: phpmysqlpdo

解决方案


推荐阅读