2015-02-07 102 views
0

我想在我的浏览器中显示所有我的textarea输入(因为如果我刷新我的页面,所有数据都从我通过使用jquery/ajax发送的html表单中去掉了)。所以目前使用homepage.php中的jquery/ajax信息通过我的#textarea输入发送到data.php,并在成功显示时返回是我的#status div。每次点击POST按钮时,数据都会添加到浏览器中,但是当我刷新页面数据时全部丢失(即使信息存储在我的sql表中)。我知道我需要使用while()循环,并且我已经尝试过,但是我的代码没有针对我尝试实现的方式工作。刷新浏览器时,jQuery/AJAX和SQL查询不会永久在浏览器上显示html表单输入?

Homepage.php

<?php 
include("connection.php"); 

session_start(); 


if(isset($_SESSION['user_id']) && $_SESSION['user_id'] != "") { 

     $sid = $_SESSION['user_id']; 

$conn = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME); 

$sql = "SELECT * FROM `users` WHERE id='{$sid}'"; 

$query = $conn->query($sql); 



$result = $query->fetch_assoc(); 


$fname = $result['fname']; 

$lname = $result['lname']; 

$time = time(); 


    } 


     else { 

     header("location:login.php"); 
    } 

?> 

<html> 
<head> 


<script type="text/javascript" src="jquery.js"></script> 

<script type="text/javascript"> 

//daddy code 
$ (document).ready(function() { 

//mama code 
$("button#postbutton").click(function() { 

var data = $("#formpost").serialize(); 
var posterid = <?php echo $sid; ?>; 

$.ajax({ 

type: "POST", 

url: "data.php", 

data: data, 

success: function(data) { 

$("#statustext").append(data); 
$("textarea#text1").val(''); 
} 

}); 



}); 



}); 



</script> 
</head> 

<body> 


<div id="global"> 

<form id="formpost" action="" method="post" onsubmit="return false"> 

<textarea id="text1" name="status" value="" ></textarea> 


<button id="postbutton">POST</button> 

<a href="logout.php">LOGOUT</a> 

</form> 

<br/> 
<br/> 


<div id="allstatus"> 

<!-- SKELETON --> 


<div id="wholestatus"> 


<div id="statuspic"> 
</div> 


<div id="statusinfo"> 

<div id="statusname"><?php echo " Welcome to VLE, {$fname} {$lname} ";?></div> 
<div id="statustext"> </div> 


</div> 


</div> 


<!-- SKELETON --> 


</div> 


</div> 


</body> 


</html> 

data.php

<?php 



const DB_HOST = 'localhost'; 
const DB_USER = 'root'; 
const DB_PASS = ''; 
const DB_NAME = 'forum'; 
//connecting 

$conn = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME); 

if($conn->connect_error) { 
die("Connection Failed: " . $conn->connect_error); 
} else { 

} 


if(isset($_POST['status'])) 
{ 
$var = $_POST['status']; 

$sql = "INSERT INTO `question`(id, question) VALUES ('', '{$var}')"; 
$result = $conn->query($sql); 
if($result) { } 

    else { 

    echo "failed: " . $conn->error; 
    } 


echo "<br>{$var}"; 



} 





?> 
+0

你试过Ctrl + F5键或Ctrl + R强制刷新?这可能是输出缓存在浏览器中。如果事实证明这是问题,您可以设置一个标题来告诉浏览器它不应该缓存该页面。 – GolezTrol 2015-02-07 15:13:38

+0

状态并没有真正坚持客户端,所以当你刷新时你基本上从头开始。如果你使用ajax,你为什么要刷新页面? – Slime 2015-02-07 15:15:49

+0

我只想从sql表中检索所有数据,使用一个while循环来获取assoc。问题是我的代码不会工作...我的$ var包含所有的textarea输入,并存储在sql表中的问题,但是当我刷新我的浏览器的HTML显示不见了。如果你明白我的意思.. – 2015-02-07 15:21:16

回答

0

你的选择是要求一个特定的会话ID,但您的插入不存储ID列内任何东西。

+0

它被设置为自动增量和ID正在存储在我的SQL表中,因为我检查了它 – 2015-02-07 15:29:27

+0

你的会话ID是如何连接到这个自动递增的表ID? – Tom 2015-02-07 15:45:26

0

我不确定为什么你一直在讨论页面刷新,如果你使用ajax,因为ajax允许你在没有页面刷新的情况下发送/检索数据。

在您的成功函数中,任何返回的变量都在您的变量data中,但我敢打赌,如果您查看此变量的内容,您将看到它没有任何内容,因为您的data.php未设置为给予一个适当的回应。

您需要这在data.php文件...

header('Content-Type: application/json'); 

然后当你回声响应,你需要做的是这样的... ...

echo json_encode($var); 

现在成功的内功能你的data将持有$var的内容,其实际上持有$_POST['status']的内容。

所以后来成功函数内可以显示的结果是这样的...

$('#statustext').html(data) 
+0

据我所知,我猜想我做的一切都是错误的,因为我想创建一个浏览器,用户可以在其中发布问题供其他人查看。因此,如果我刷新浏览器,所有发布的问题都消失了(尽管存在于数据库中)是毫无意义的。 – 2015-02-07 15:50:05

+0

你是什么意思创建一个浏览器?把东西放入数据库并从数据库中检索东西是两个独立的步骤。为了让我加载一个页面并查看你放入数据库的内容,该页面需要包含查询数据库并获取该信息的代码。 – Slime 2015-02-07 15:52:57

+0

是的,这是使用while()循环,但数据显示,当我点击发布。我希望它显示,而不管.click事件 – 2015-02-07 15:57:28