我在提交数据方面遇到了一些问题。我正在尝试使用PHP和Ajax创建一个简单的聊天框,但每当我尝试提交数据时,它只会在多次提交之后发布。我希望有人能告诉我代码的问题。
我是一个非常新手的编码员,这是我第一次使用这个网站所以如果它是一个明显的错误就好了^^“
主聊天框:
<head>
<link href="CSS.css" rel="stylesheet" type="text/css">
<script type="text/javascript">
function sendmessage()
{
if (window.XMLHttpRequest)
{
xmlhttp=new XMLHttpRequest();
}
else
{
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
var name=encodeURIComponent(document.getElementById("name").value);
var message=encodeURIComponent(document.getElementById("message").value);
xmlhttp.open("POST","insert.php",true);
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.send("name="+name+"&message="+message);
}
</script>
</head>
<body>
<center>
<table width="600">
<tr>
<td height="400">
<center>
<iframe src ="output.php" width="580px" height="386px">
<p>Your browser does not support iframes.</p>
</iframe>
</center>
</td>
</tr>
<tr>
<td>
<form method="POST"></br>
  Name:      
<input type="text" id="name" autocomplete="off" size="15"/><br/><br/>
  Message:  
<input type="text" id="message" autocomplete="off" size="70"/>  
<input type="submit" value="Send" onclick="sendmessage()"/>
</form>
</td>
</tr>
</table>
</center>
</body>
PHP文件,它读取输入数据并将其写入日志文件:
<head>
答案 0 :(得分:0)
每个人都应采取的一个好措施是安全性,从不明确地相信您的用户是好的并准确输入您期望的用户。总是,在使用之前,请务必检查POST和GET变量是否安全。应该探索诸如“strip_tags”,“mysql_real_escape”(如果你将它们放入数据库中)这样的函数。
答案 1 :(得分:0)
我抓住你的代码并在我的电脑上测试它。做了一些小的改变但是如果工作正常的话。我刚评论过
xmlhttp.execCommand('mceRemoveControl',false,'content');
然后一切都在FireFox上运行良好。
下面你可以看到我运行的代码:
HTML:
<html>
<head>
<!--link href="CSS.css" rel="stylesheet" type="text/css"-->
<script type="text/javascript">
function sendmessage()
{
if (window.XMLHttpRequest)
{
xmlhttp=new XMLHttpRequest();
}
else
{
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
var name=encodeURIComponent(document.getElementById("name").value);
var message=encodeURIComponent(document.getElementById("message").value);
xmlhttp.open("POST","insert.php",true);
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
//xmlhttp.execCommand('mceRemoveControl',false,'content');
xmlhttp.send("name="+name+"&message="+message);
}
</script>
</head>
<body>
<center>
<table width="600">
<tr>
<td height="400">
<center>
<iframe src ="output.php" width="580px" height="386px">
<p>Your browser does not support iframes.</p>
</iframe>
</center>
</td>
</tr>
<tr>
<td>
<form method="POST"></br>
  Name:      
<input type="text" id="name" autocomplete="off" size="15"/><br/><br/>
  Message:  
<input type="text" id="message" autocomplete="off" size="70"/>  
<input type="submit" value="Send" onclick="sendmessage()"/>
</form>
</td>
</tr>
</table>
</center>
</body>
</html>
PHP:
<?php
try{
$name='<table><tr><td width="100%">'.$_POST['name']." Says:</td>";
$message="<table><tr><td>".$_POST['message']."</td></tr></table></br>\n";
$time="<td>".date("d/m/y-G:i")."</td></tr></table>";
$file = "output.php";
$write = fopen($file, 'a') or die("Can't open file");
fwrite($write, $name);
fwrite($write, $time);
fwrite($write, $message);
fclose($write);
}catch(Exception $err){
echo $err;
}
?>
我刚试过FireFox 3.6 Safari 5和Chrome 6.我正在使用Mac,所以我没有在IE中尝试过。在这3个浏览器中,一切都在我开头告诉你的那条线之后工作得很好。你能证明你有关问题的更多细节吗?
答案 2 :(得分:0)
好的,我已经成功解决了这个问题。就像将ajax异步更改为false一样简单。希望这不应该创建任何其他发布。多谢你们!