Обновление страницы после обновления sql

После отправки информации в мою базу данных я хочу обновить страницу, чтобы показать эти изменения, как при обработке формы. Страница «перезагружается» после отправки, но не отражает изменений, поэтому я предположил, что мне нужно будет добавить команду обновления при нажатии кнопки «Отправить», но, похоже, она слишком быстра?

Поэтому я добавил время обновления, но даже прокручивая его до 50, я получил тот же результат.

Если я дважды нажму кнопку, он обновится с правильной информацией. Есть лучший способ сделать это?

<?php ini_set('display_errors',1); error_reporting(E_ALL); include_once '../includes/conn.php'; if(!$user->is_loggedin()){ $user->redirect('../users/login.php'); } $id = $_SESSION['session']; $stmt = $conn->prepare("SELECT * FROM users WHERE id=:id"); $stmt->execute(array(":id"=>$id)); $userRow=$stmt->fetch(PDO::FETCH_ASSOC); $location = isset($_POST['location']) ? $_POST['location'] : ''; $about = isset($_POST['about']) ? $_POST['about'] : ''; $title = isset($_POST['title']) ? $_POST['title'] : ''; if($title!=''){ $sql = "UPDATE users SET title=:title WHERE id=:id"; $stmt = $conn->prepare($sql); if($stmt == false){ $error = "User Title update failed. Please try again."; } $result = $stmt->execute(array(":title"=>$title, ":id"=>$id)); if($result == false) { $error = "User Title update failed. Please try again."; } $count = $stmt->rowCount(); } if($location!=''){ $sql = "UPDATE users SET location=:location WHERE id=:id"; $stmt = $conn->prepare($sql); if($stmt == false){ $error = "User Location update failed. Please try again."; } $result = $stmt->execute(array(":location"=>$location, ":id"=>$id)); if($result == false) { $error = "User location update failed. Please try again."; } $count = $stmt->rowCount(); } if($about!=''){ $sql = "UPDATE users SET about=:about WHERE id=:id"; $stmt = $conn->prepare($sql); if($stmt == false){ $error = "about Me update failed. Please try again."; } $result = $stmt->execute(array(":about"=>$about, ":id"=>$id)); if($result == false) { $error = "about Me location update failed. Please try again."; } $count = $stmt->rowCount(); } ?> <!DOCTYPE html> <html lang="en"> <head> <title>EpicOwl UK | CMS Users Edit Profile</title> <meta charset="utf-8"> <link rel="shortcut icon" href="../images/favicon.ico" type="image/x-icon" /> <link rel="stylesheet" type="text/css" href="../css/main.css"> </head> <body> <div id="header"> <a href="index.php"><img id="logo" src="../images/logo.png" /></a> <div id="navigation"> <ul> <a href="../index.php"><li>Home</li></a> <a href="./profile.php"><li>My Profile</li></a> <a href="../admin/index.php"><li>Admin Panel</li></a> </ul> </div> </div> <div id="content"> <form method="post"><br /> <h2>Edit Profile</h2> <label><strong>User Title:</strong></label><br /> <input type="text" name="title" maxlength="50" placeholder="<?php echo ($userRow['title']); ?>" /><br /><br /> <label><strong>My Location:</strong></label><br /> <input type="text" name="location" maxlength="50" placeholder="<?php echo ($userRow['location']); ?>" /><br /><br /> <label><strong>About Me:</strong><label><br /> <textarea name="about" rows="13" cols="60" maxlength="255" placeholder="<?php echo ($userRow['about']); ?>"></textarea><br /><br /> <button type="submit" name="update">Update</button><br /><br /><br /> <?php if(isset($_POST['submit'])){ header('refresh:20; Location: '.$_SERVER['REQUEST_URI']); } ?> </form> </div> <div id="footer"> <p class="copyright">&copy; EpicOwl UK. All Rights Reserved.</p> </div> </body> </html> 

Вы делаете это неправильно, вам нужно обработать форму представления перед показом HTML. PHP выполняется по очереди, поэтому в вашем случае вы сначала показываете данные, а затем проверяете, отправлена ​​ли форма. Просто переместите этот код вверх, где находится остальная часть вашего PHP-кода (вы даже можете удалить команду обновления):

 if(isset($_POST['submit'])){ header('Location: '.$_SERVER['REQUEST_URI']); } 

Редактировать:

Люди придумали MVC из-за таких случаев, как ваш, когда вы смешиваете HTML и PHP и задаетесь вопросом, почему все не работает. Держите свой PHP-код в верхней части файлов, постарайтесь не писать код PHP где-нибудь внутри HTML, вы сэкономите массу неприятностей. Кроме того, используйте exit после вызова header чтобы продолжить выполнение кода. Вот обновленная версия вашего кода, упрощенная и более «алгоритмическая» (надеюсь, вы видите и понимаете, как идет поток кода):

 <?php ini_set('display_errors',1); error_reporting(E_ALL); include_once '../includes/conn.php'; if(!$user->is_loggedin()){ $user->redirect('../users/login.php'); } $id = $_SESSION['session']; $stmt = $conn->prepare("SELECT * FROM users WHERE id=:id"); $stmt->execute(array(":id"=>$id)); $userRow=$stmt->fetch(PDO::FETCH_ASSOC); if (isset($_POST['submit'])) { $location = isset($_POST['location']) ? $_POST['location'] : null; $about = isset($_POST['about']) ? $_POST['about'] : null; $title = isset($_POST['title']) ? $_POST['title'] : null; $sql_part = array(); $prepare = array(); if ($location) { $sql_part[] = 'location = :location'; $prepare[':location'] = $location; } if ($about) { $sql_part[] = 'about = :about'; $prepare[':about'] = $about; } if ($title) { $sql_part[] = 'title = :title'; $prepare[':title'] = $title; } $prepare[':id'] = $id; if (count($sql_part)) { $sql = 'UPDATE users SET '; $sql .= implode(', ', $sql_part); $sql .= ' WHERE id = :id'; $stmt = $dbh->prepare($sql); if ($stmt) { // Find another way too pass these through the refresh // $result = $stmt->execute($prepare); // $count = $stmt->rowCount(); header('Location: '. $_SERVER['REQUEST_URI']); exit; } } } ?> <!DOCTYPE html> <html lang="en"> <head> <title>EpicOwl UK | CMS Users Edit Profile</title> <meta charset="utf-8"> <link rel="shortcut icon" href="../images/favicon.ico" type="image/x-icon" /> <link rel="stylesheet" type="text/css" href="../css/main.css"> </head> <body> <div id="header"> <a href="index.php"><img id="logo" src="../images/logo.png" /></a> <div id="navigation"> <ul> <a href="../index.php"><li>Home</li></a> <a href="./profile.php"><li>My Profile</li></a> <a href="../admin/index.php"><li>Admin Panel</li></a> </ul> </div> </div> <div id="content"> <form method="post"><br /> <h2>Edit Profile</h2> <label><strong>User Title:</strong></label><br /> <input type="text" name="title" maxlength="50" placeholder="<?php echo ($userRow['title']); ?>" /><br /><br /> <label><strong>My Location:</strong></label><br /> <input type="text" name="location" maxlength="50" placeholder="<?php echo ($userRow['location']); ?>" /><br /><br /> <label><strong>About Me:</strong><label><br /> <textarea name="about" rows="13" cols="60" maxlength="255" placeholder="<?php echo ($userRow['about']); ?>"></textarea><br /><br /> <button type="submit" name="update">Update</button><br /><br /><br /> </form> </div> <div id="footer"> <p class="copyright">&copy; EpicOwl UK. All Rights Reserved.</p> </div> </body> </html> 

просто используйте JavaScript's-

 window.location.reload(). 

В PHP вы можете использовать-

 $page = $_SERVER['PHP_SELF']; $sec = "10"; header("Refresh: $sec; url=$page"); 

Мне удалось получить желаемый результат, добавив header('Location: ./editprofile.php'); после обновления базы данных. Смотрите ниже:

 if($title!=''){ $sql = "UPDATE users SET title=:title WHERE id=:id"; $stmt = $conn->prepare($sql); if($stmt == false){ $error = "User Title update failed. Please try again."; } $result = $stmt->execute(array(":title"=>$title, ":id"=>$id)); if($result == false) { $error = "User Title update failed. Please try again."; } $count = $stmt->rowCount(); } 

После:

 if($title!=''){ $sql = "UPDATE users SET title=:title WHERE id=:id"; $stmt = $conn->prepare($sql); if($stmt == false){ $error = "User Title update failed. Please try again."; } $result = $stmt->execute(array(":title"=>$title, ":id"=>$id)); if($result == false) { $error = "User Title update failed. Please try again."; } $count = $stmt->rowCount(); header('Location: ./editprofile.php'); }