简体   繁体   中英

Image isn't updating in mysql database

So i have the following scripts:

<?php
//Posts variables
$post_id = 0;
$isEditingPost = false;
$published = 0;
$title = "";
$post_slug = "";
$body = "";
$featured_image = "";
$post_topic = "";

//Get all posts
function getAllPosts(){
    global $conn;

    if ($_SESSION['user']['role'] == "Admin") {
        $sql = "SELECT * FROM posts";
    }elseif($_SESSION['user']['role'] == "Author"){
        $user_id = $_SESSION['user']['id'];
        $sql = "SELECT * FROM posts WHERE user_id=$user_id";
    }
$result = mysqli_query($conn,$sql);
$posts = mysqli_fetch_all($result,MYSQLI_ASSOC);

$final_posts = array();
foreach($posts as $post){
    $post['author'] = getPostAuthorById($post['user_id']);
    array_push($final_posts,$post);
}
return $final_posts;

}

function getPostAuthorById($user_id){
    global $conn;

    $sql = "SELECT username FROM users WHERE id=$user_id";
    $result = mysqli_query($conn,$sql);
    if($result){
        return mysqli_fetch_assoc($result)['username'];
    }else{
        return null;
    }
}

/* - - - - - - - - - - 
-  Post actions
- - - - - - - - - - -*/
// if user clicks the create post button
if (isset($_POST['create_post'])) { createPost($_POST); }
// if user clicks the Edit post button
if (isset($_GET['edit-post'])) {
    $isEditingPost = true;
    $post_id = $_GET['edit-post'];
    editPost($post_id);
}
// if user clicks the update post button
if (isset($_POST['update_post'])) {
    updatePost($_POST);
}
// if user clicks the Delete post button
if (isset($_GET['delete-post'])) {
    $post_id = $_GET['delete-post'];
    deletePost($post_id);
}

/* - - - - - - - - - - 
-  Post functions
- - - - - - - - - - -*/
function createPost($request_values)
    {
        global $conn,$user_id, $errors, $title, $featured_image, $topic_id, $body, $published;
        $user_id = $_SESSION['user']['id'];
        $title = esc($request_values['title']);
        $body = htmlentities(esc($request_values['body']));
        if (isset($request_values['topic_id'])) {
            $topic_id = esc($request_values['topic_id']);
        }
        if (isset($request_values['publish'])) {
            $published = esc($request_values['publish']);
        }
        // create slug: if title is "The Storm Is Over", return "the-storm-is-over" as slug
        $post_slug = makeSlug($title);
        // validate form
        if (empty($title)) { array_push($errors, "Post title is required"); }
        if (empty($body)) { array_push($errors, "Post body is required"); }
        if (empty($topic_id)) { array_push($errors, "Post topic is required"); }
        // Get image name
        $featured_image = $_FILES['featured_image']['name'];
        if (empty($featured_image)) { array_push($errors, "Featured image is required"); }
        // image file directory
        $target = "../static/images/" . basename($featured_image);
        if (!move_uploaded_file($_FILES['featured_image']['tmp_name'], $target)) {
            array_push($errors, "Failed to upload image. Please check file settings for your server");
        }
        // Ensure that no post is saved twice. 
        $post_check_query = "SELECT * FROM posts WHERE slug='$post_slug' LIMIT 1";
        $result = mysqli_query($conn, $post_check_query);

        if (mysqli_num_rows($result) > 0) { // if post exists
            array_push($errors, "A post already exists with that title.");
        }
        // create post if there are no errors in the form
        if (count($errors) == 0) {
            $query = "INSERT INTO posts (user_id, title, slug, image, body, published, created_at, updated_at) VALUES($user_id, '$title', '$post_slug', '$featured_image', '$body', $published, now(), now())";
            if(mysqli_query($conn, $query)){ // if post created successfully
                $inserted_post_id = mysqli_insert_id($conn);
                // create relationship between post and topic
                $sql = "INSERT INTO post_topic (post_id, topic_id) VALUES($inserted_post_id, $topic_id)";
                mysqli_query($conn, $sql);

                $_SESSION['message'] = "Post created successfully";
                header('location: posts.php');
                exit(0);
            }
        }
    }

    /* * * * * * * * * * * * * * * * * * * * *
    * - Takes post id as parameter
    * - Fetches the post from database
    * - sets post fields on form for editing
    * * * * * * * * * * * * * * * * * * * * * */
    function editPost($role_id)
    {
        global $conn, $title, $post_slug, $body, $published, $isEditingPost, $post_id;
        $sql = "SELECT * FROM posts WHERE id=$role_id LIMIT 1";
        $result = mysqli_query($conn, $sql);
        $post = mysqli_fetch_assoc($result);
        // set form values on the form to be updated
        $title = $post['title'];
        $body = $post['body'];
        $published = $post['published'];
    }

    function updatePost($request_values)
    {
        global $conn, $errors, $post_id, $title, $featured_image, $topic_id, $body, $published;

        $title = esc($request_values['title']);
        $body = esc($request_values['body']);
        $post_id = esc($request_values['post_id']);
        if (isset($request_values['topic_id'])) {
            $topic_id = esc($request_values['topic_id']);
        }
        // create slug: if title is "The Storm Is Over", return "the-storm-is-over" as slug
        $post_slug = makeSlug($title);

        if (empty($title)) { array_push($errors, "Post title is required"); }
        if (empty($body)) { array_push($errors, "Post body is required"); }
        // if new featured image has been provided
        if (isset($_POST['featured_image'])) {
        // Get image name
        $featured_image = $_FILES['featured_image']['name'];
            // image file directory
            $target = "../static/images/" . basename($featured_image);
            if (!move_uploaded_file($_FILES['featured_image']['tmp_name'], $target)) {
                array_push($errors, "Failed to upload image. Please check file settings for your server");
            }
        }

        // register topic if there are no errors in the form
        if (count($errors) == 0) {
            $query = "UPDATE posts SET title='$title', slug='$post_slug', views=0, image='$featured_image', body='$body', published=$published, updated_at=now() WHERE id=$post_id";
            // attach topic to post on post_topic table
            if(mysqli_query($conn, $query)){ // if post created successfully
                if (isset($topic_id)) {
                    $inserted_post_id = mysqli_insert_id($conn);
                    // create relationship between post and topic
                    $sql = "INSERT INTO post_topic (post_id, topic_id) VALUES($inserted_post_id, $topic_id)";
                    mysqli_query($conn, $sql);
                    $_SESSION['message'] = "Post created successfully";
                    header('location: posts.php');
                    exit(0);
                }
            }
            $_SESSION['message'] = "Post updated successfully";
            header('location: posts.php');
            exit(0);
        }
    }
    // delete blog post
    function deletePost($post_id)
    {
        global $conn;
        $sql = "DELETE FROM posts WHERE id=$post_id";
        if (mysqli_query($conn, $sql)) {
            $_SESSION['message'] = "Post successfully deleted";
            header("location: posts.php");
            exit(0);
        }
    }
    
    // if user clicks the publish post button
if (isset($_GET['publish']) || isset($_GET['unpublish'])) {
    $message = "";
    if (isset($_GET['publish'])) {
        $message = "Post published successfully";
        $post_id = $_GET['publish'];
    } else if (isset($_GET['unpublish'])) {
        $message = "Post successfully unpublished";
        $post_id = $_GET['unpublish'];
    }
    togglePublishPost($post_id, $message);
}
// delete blog post
function togglePublishPost($post_id, $message)
{
    global $conn;
    $sql = "UPDATE posts SET published=!published WHERE id=$post_id";
    
    if (mysqli_query($conn, $sql)) {
        $_SESSION['message'] = $message;
        header("location: posts.php");
        exit(0);
    }
}

?>

Everything works fine, it updates the topic, the post body,title,published state but the image isn't updating, even tho when i create a new post the image is being inserted in the database, when i try to update, the image column in database remains empty.

Here is the create_post.php

<?php  include('../config.php'); ?>
<?php  include(ROOT_PATH . '/admin/includes/admin_functions.php'); ?>
<?php  include(ROOT_PATH . '/admin/includes/post_functions.php'); ?>
<?php include(ROOT_PATH . '/admin/includes/header.php'); ?>
<!-- Get all topics -->
<?php $topics = getAllTopics(); ?>
<title>Admin | Create Post</title>
</head>

<body>
    <!-- admin navbar -->
    <?php include(ROOT_PATH . '/admin/includes/navbar.php') ?>

    <div class="container content">
        <!-- Left side menu -->
        <?php include(ROOT_PATH . '/admin/includes/menu.php') ?>

        <!-- Middle form - to create and edit  -->
        <div class="action create-post-div">
            <h1 class="page-title">Create/Edit Post</h1>
            <form method="post" enctype="multipart/form-data" action="<?php echo BASE_URL . 'admin/create_post.php'?>">
                <?php include(ROOT_PATH . '/includes/errors.php') ?>

                <?php if($isEditingPost == true):?>
                <input type="hidden" name="post_id" value="<?php echo $post_id; ?>">
                <?php endif ?>
                <input type="text" name="title" value="<?php echo $title; ?>" placeholder="Title">
                <label style="float: left; margin: 5px auto 5px;">Featured image</label>
                <input type="file" name="featured_image">
                <textarea name="body" id="body" cols="30" rows="10"><?php echo $body; ?></textarea>
                <select name="topic_id">
                    <option value="" selected disabled>Choose topic</option>
                    <?php foreach ($topics as $topic): ?>
                    <option value="<?php echo $topic['id']; ?>">
                        <?php echo $topic['name']; ?>
                    </option>
                    <?php endforeach ?>
                </select>

                <?php if($_SESSION['user']['role'] == 'Admin'):?>
                <?php if($published == true):?>
                <label for="publish">
                    Publish
                    <input type="checkbox" value='1' name="publish" checked="checked">&nbsp;
                </label>
                <?php else:?>
                <label for="publish">
                    Publish
                    <input type="checkbox" value="1" name="publish">&nbsp;
                </label>
                <?php endif ?>
                <?php endif ?>
                <?php if ($isEditingPost === true): ?>
                <button type="submit" class="btn" name="update_post">UPDATE</button>
                <?php else: ?>
                <button type="submit" class="btn" name="create_post">Save Post</button>
                <?php endif ?>
            </form>
        </div>

</body>
</html>
<script>
    CKEDITOR.replace('body');
</script>

I think the problem might be with your if statement in updatePost function if (isset($_POST['featured_image'])) { . Change this like in createPost function

$featured_image = $_FILES['featured_image']['name'];
if (empty($featured_image)) {
 ...
}

Check also https://www.php.net/manual/en/features.file-upload.post-method.php for more information about checking uploaded files.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM