我做了一个简单的网络聊天,我使用<body onload>
中触发的提示框来获取用户的昵称,脚本是:
function Login()
{
var x=prompt("Please enter your name","");
var xmlhttp;
if (window.XMLHttpRequest)
{// Използваните браузъри
xmlhttp=new XMLHttpRequest();
}
else
{// Кой ли ползва тези версии..
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open("GET","login.php?u="+x,true);
xmlhttp.send();
}
然后,如果用户输入了我想在数据库中添加的内容,或者如果没有输入任何内容,我只想指定"anonymos"作为昵称。为此,我使用以下PHP脚本:
<?php
session_start();
$u=$_GET["u"];
$db_connect = mysql_connect('localhost', 'root', '******');
if(!$db_connect)
{
die('Не може да се осъществи връзка с базата данни' . mysql_error());
}
mysql_select_db("chat", $db_connect);
if(is_null($u)==1)
{
$sql = "INSERT INTO users (name) VALUES ('$u')";
mysql_query($sql);
$_SESSION['UserName']=$u;
}
else
{
$_SESSION['UserName']='Anonymos';
}
mysql_close($db_connect);
?>
但代码会产生问题,当什么都不输入时,有时我仍然会在DB中获得数据,在填充的名称中,我会得到null,对于值,有时,这不会发生,有时即使我输入了一些文本,它也不会将其发送到DB。我在这里迷失了方向,因为当我检查If(is_null($u)
时,有时当我将其设置为0时,它会工作,有时当我将其设置为1时,它会起作用。表的结构非常简单,只有id和name字段,但我想知道是否也有问题?谢谢。Leron
我不确定,但也许我弄清楚了问题的真正原因是什么——现在只有当我按下ESC键而不是一些提示框按钮时,我才会得到空记录。我仍然不知道如何解决这个问题,但由于一直很不稳定,我仍在寻找建议。
我对php了解不多,但在我看来,您需要对照空字符串检查'u'参数:
而不是:
if(is_null($u)==1)
使用
if(!is_null($u) && !empty($u))
请尝试此操作,而不是is_null($u);
if (!empty($_GET["u"]))
和
$u= mysql_real_escape_string($_GET["u"]);
这样,如果它是空的,就不会运行
如果它运行,它将被正确地转义,以防止sql注入
更新:
以下是您的代码如何工作
if(!empty($u)){
// ... obviously you will need more validation then just not empty
$sql = "INSERT INTO users (name) VALUES ('%s')";
$sql = sprintf($sql,mysql_real_escape_string($u));
mysql_query($sql);
$_SESSION['UserName']=$u;
}
else {
$_SESSION['UserName']='Anonymos';
}