2011-06-03 56 views
0

我做一个简单的网络聊天,我用在<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”作为nickname.For这个目的,我使用下面的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); 

?> 

但代码会产生问题,当没有输入任何内容时,我仍然可以在数据库中获得数据ame填满了我得到空值,有时候,这不会发生,有时甚至如果我输入一些文本,它不会将它推到DB.I'm在这里输了,因为当我做检查If(is_null($u)有时它在我设置为0时有效,有时在我将其设置为1时有效。表格结构非常简单,只是id和名称字段,但我想知道是否也可能存在问题?谢谢.Leron

我不知道,但也许我找出问题的真正原因是什么 - 现在只有当我按下ESC键而不是某些提示框按钮时,我才得到空记录。我仍然不知道如何解决这个,但因为一直很不稳定我仍然在寻找建议。

+0

看来,当ESC按下时,变量获得默认值“null”,所以现在通过简单地检查$ u!='null“,我避免了以null作为名称值的记录。更多的测试和我如果它工作,它是稳定的,我会认为它解决了。很高兴听到一些意见或解释正在发生的事情。 – Leron 2011-06-03 07:42:11

回答

0

试试这个,而不是is_null($ u);

if (!empty($_GET["u"])) 

$u= mysql_real_escape_string($_GET["u"]); 

这样,如果其空它不会运行

,如果它运行时,它会被正确转义防止SQL注入

UPDATE:

以下是您的代码如何工作

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'; 
} 
+0

$ u的值不会为空,如果用户将它留空,它将是一个空字符串,所以最好使用!空函数 – Ibu 2011-06-03 06:26:16

+0

((!empty($ u))更改它,但是仍然如果没有文本输入我得到一个数据库记录作为名称字段的值为空 – Leron 2011-06-03 06:33:34

+0

嗯我想我找出真正的问题是什么,现在我得到空记录时,我按Esc而不是点击框按钮,我该如何避免这种情况? – Leron 2011-06-03 06:37:20

0

我不知道很多关于PHP,但在我看来,你需要检查“U”参数是否为空:

代替:

if(is_null($u)==1) 

使用

if(!is_null($u) && !empty($u)) 
相关问题