2015-06-24 6 views
2

После отправки информации в мою базу данных, я хочу обновить страницу, чтобы показать эти изменения, как при обработке формы. Страница «перезагружается» после отправки, но не отражает изменений, поэтому я предположил, что мне нужно будет добавить команду обновления, когда будет нажата кнопка отправки, но она кажется слишком быстрой?Обновление страницы после обновления 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> 
+0

где/в какой момент SQL, результаты Загруженный в страницу? –

+0

Извините, я не понимаю на 100%, что вы подразумеваете под этим? –

+0

Вопрос, отредактированный для отображения всего кода. –

ответ

2

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

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

Edit:

Люди изобрели 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> 
+0

Я получаю ту же проблему независимо от того, где я помещаю вышеуказанный код. –

+0

Почему вы не помещаете весь свой код, связанный с обновлением, в '' '' if''', проверяя, была ли форма отправлена? Они должны быть обновлены после того, как форма была отправлена ​​в любом случае ... – Avalanche

+0

Хороший вопрос! Выполнена. Dosen't исправить ошибку, хотя –

0

просто использовать JavaScript's-

window.location.reload(). 

В PHP вы можете потребительный

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

Спасибо за предложение, но я искал лучший способ сделать это только на PHP. –

+0

@ DanielMinett Я только что отредактировал свой ответ. вы пробовали этот путь? –

+0

Использование обновления в заголовке не очень причудливое решение. Намного лучше использовать встроенную функцию [sleep] (http://php.net/sleep), но она по-прежнему является решением, которое я бы не пересчитал. – Avalanche

0

мне удалось получить желаемый результат, добавив 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'); 
} 
Смежные вопросы