我进行简单的网络聊天,并使用<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();
}
然后,如果用户输入了我要在DataBase中添加的内容,或者没有输入任何内容,我只想将“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);
?>
但代码会产生问题,当没有输入任何内容时,我仍然会在数据库中获取数据,其中名称已填充,我得到null,对于值,有时,这不会发生,有时甚至如果我输入一些文本它不会把它告诉DB。我迷失在这里,因为当我做检查时If(is_null($u)
有时当我将它设置为0时它会起作用,有时当我将它设置为1时它会起作用。结构很简单只是id和name字段,但我想知道是否也有问题?Thanks.Leron
我不确定,但也许我弄清楚问题的真正原因是什么 - 现在我只有当我按下ESC键而不是一些提示框按钮时才得到空记录。我仍然不知道如何解决这个问题,但因为一直很不稳定,我仍在寻找建议。
答案 0 :(得分:0)
试试这个而不是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';
}
答案 1 :(得分:0)
我对php知之甚少,但在我看来,你需要检查空字符串的'u'参数:
而不是:
if(is_null($u)==1)
使用
if(!is_null($u) && !empty($u))