将文本从提示框添加到DataBase

时间:2011-06-03 06:18:12

标签: php javascript mysql

我进行简单的网络聊天,并使用<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键而不是一些提示框按钮时才得到空记录。我仍然不知道如何解决这个问题,但因为一直很不稳定,我仍在寻找建议。

2 个答案:

答案 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))