malik727
malik727

Reputation: 179

MySQL Insert adding 2 Rows Instead of 1

I know that this question has been asked multiple times here at Stack Overflow but even after carefully reading all those questions I couldn't figure out the problem with my code. I am Inserting a record from one table into the other but MySQL inserts 2 rows instead of one row in the new table. I am using php prepared statements to insert into the database. My PHP code is as follows:

if(isset($_POST["articleID"]) && isset($_POST["action"]))
        {
            $articleID = $_POST["articleID"];
            $action = $_POST["action"];
            if($action == "publish" && $infoUserRank >= 2)
            {
                $article_sql = "UPDATE blog_db.draft_articles SET status = 1 WHERE articleID = :articleID";
                $article_stmt = $pdo->prepare($article_sql);
                $article_stmt->bindValue(':articleID', $articleID);
                $article_stmt->execute();
                header("Location: http://localhost/admin/pending");
                exit();
            }
            else if($action == "examine" && $infoUserRank >= 3)
            {
                //This is the statement which inserts two records instead of one
                $insertarticle_sql = "INSERT INTO blog_db.articles (userID, full_title, short_title, meta_desc, meta_keywords, cover_pic, content, html_content, main_category) SELECT userID, full_title, short_title, meta_desc, meta_keywords, cover_pic, content, html_content, main_category FROM blog_db.draft_articles WHERE articleID = :articleID";
                $insertarticle_stmt = $pdo->prepare($insertarticle_sql);
                $insertarticle_stmt->bindValue(':articleID', $articleID);
                $insertarticle_stmt->execute();

                $insertsubcat_sql = "INSERT INTO blog_db.article_subcategories (articleID, subCategoryID) SELECT articleID, subCategoryID FROM blog_db.draftarticle_subcategories WHERE articleID = :articleID";
                $insertsubcat_stmt = $pdo->prepare($insertsubcat_sql);
                $insertsubcat_stmt->bindValue(':articleID', $articleID);
                $insertarticle_stmt->execute();

                $deletedraft_sql = "DELETE FROM blog_db.draftarticle_subcategories WHERE articleID = :articleID";
                $deletedraft_stmt = $pdo->prepare($deletedraft_sql);
                $deletedraft_stmt->bindValue(':articleID', $articleID);
                $deletedraft_stmt->execute();

                $deletedraft_sql = "DELETE FROM blog_db.draft_articles WHERE articleID = :articleID";
                $deletedraft_stmt = $pdo->prepare($deletedraft_sql);
                $deletedraft_stmt->bindValue(':articleID', $articleID);
                $deletedraft_stmt->execute();

                header("Location: http://localhost/admin/published");
                exit();
            }
        } 

And the html code from where this form is submit:

<div id="confirm-box" class="confirm-popbox">
    <div class="confirm-popbox-div">
        <span id="confirm-close-btn" class="confirm-close-btn"><i class="fas fa-times"></i></span>
        <div class="confirm-main-head"><i class="fas fa-check-square"></i> Confirmation Box</div>
        <hr class="confirm-box-hr" />
        <div class="confirm-main-content">Are you sure you want to publish this article? Once you press on confirm button you can't undo your action.</div>
        <div class="confirm-box-btns">
            <form action="http://localhost/admin/config/article-publish.php" method="POST" id="articlePublishForm1">
                <div id="confirm-cancel-btn" class="publish-confirm-btn1"><i class="fas fa-times"></i> Cancel</div>
                <div id="confirm-publish-btn1" name="publishSubmit" class="publish-confirm-btn1 pub-purple-btn"><i class="fas fa-check"></i> Confirm</div>
            </form>
        </div>
    </div>
</div>
<script>
        $(document).on('click', '#confirm-publish-btn1', function(){
            $("#articlePublishForm1").append('<input type="hidden" name="articleID" value="<?php echo $articleID; ?>" /> ');
            $("#articlePublishForm1").append('<input type="hidden" name="action" value="<?php echo $action; ?>" /> ');
            $("#articlePublishForm1").submit();
        });
</script>

I also tried adding exit() in my php code in order to check if it was called twice but still mysql was inserting two rows instead of one. Is there something wrong with my insert code? Help will be highly appreciated.

Upvotes: 0

Views: 359

Answers (1)

Trukken
Trukken

Reputation: 111

You have $insertarticle_stmt->execute(); twice and $insertsubcat_stmt is never executed.

Either reuse the variable or make sure they are separated completly.

Upvotes: 3

Related Questions