После следующей строки кода:
header("Location: posts.php?source=edit_posts&p_id=$post_id");
пользователь будет перенаправлен на новую страницу и не увидит код, который выполняется после директивы заголовка. Чтобы отобразить сообщение, вы должны отправить сообщение как параметр GET или POST. Тогда как первый вариант будет более легким.
Как упоминал @Dharman, ваш код широко открыт для SQL инъекций и должен использовать параметризованные подготовленные операторы. Вы можете использовать PDO или MySQLi . Я создаю решение с PDO, но на ваше усмотрение.
Таким образом, вы можете настроить свой скрипт следующим образом:
<?php
try{
//Create new PDO Object
$conn = new PDO("mysql:host=HOST;port=PORT;dbname=DBNAME", USERNAME, PASSWORD);
//Define query
$query = $this->conn->prepare("UPDATE posts SET post_image = :postimage WHERE
post_id = :postid AND LENGTH(post_image) > 0 AND post_image <> :postimage");
$query->bindValue("postimage", $post_image);
$query->bindValue("postid", $post_id);
$query->execute();
//Redirect user and add success message as GET parameter
header("Location: posts.php?source=edit_posts&p_id=$post_id&update=success");
//Make sure script is terminated
exit();
} catch(Exception $ex){
//Log error
error_log($ex->getMessage());
//Show user custom error message
echo "Something went wrong";
//Make sure script is terminated
exit();
}
?>
На целевой странице (сообщения php) вы можете затем вставьте фрагмент кода следующим образом:
<?php
if(isset($_GET['update']) && $_GET['update'] == "success"){
echo "<p class='alert alert-success'><strong>Post Updated!</strong> <a href='../post.php?p_id=$post_id' class='alert-link' target='blank'>View Post</a><a href='' class='close' data-dismiss='alert'>x</a></p>";
}
?>