2011-06-03 34 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)) 
相關問題