2013-07-26 21 views
1

我已經開始在php中建立一些非常基本的shoutbox \ Chat。它只使用一個基本的mysql表(int)id作爲唯一索引和(文本)消息列。 它可以工作,但它只存儲數據庫中的數字。 我到處搜索了一個解決方案,但找不到一個。我懷疑這個問題存在於mysql數據庫或查詢中,但也許代碼有問題。我只能在數據庫中存儲數字,在php中有一個簡單的留言箱

下面是代碼:

<?php 
// **************** 
// Database Settings 
// **************** 

$sql_hst = "localhost"; 
$sql_db = "chatbox"; 
$sql_usr = "chatbox"; 
$sql_pwd = "chatbox"; 

// **************** 
// Core Functions 
// **************** 

function connectdb() 
{ 
    //conection: 
    global $sql_srv,$sql_usr,$sql_pwd,$sql_db; 
    $link = mysqli_connect($sql_srv,$sql_usr,$sql_pwd,$sql_db) or die("Error " . mysqli_error($link)); 
    return $link; 
} 

function getMessages() 
{ 
     $result = mysqli_query(connectdb(),"SELECT message FROM messages"); 
     while($row = mysqli_fetch_array($result)) 
     { 
      echo $row['message']; 
      echo "<br>"; 
     } 
} 

function postMessage() 
{ 
if (isset($_POST['message'])) 
{ 
    mysqli_query(connectdb(), "INSERT INTO messages (message) VALUES (".$_POST['message'].")"); 
    //echo $_POST['message']; //test post data 
} 
} 

connectdb(); 
postMessage(); 

//END OF MAIN PHP 
?> 
<!DOCTYPE html> 
<html> 
    <head><title>Chatbox</title> 
    <style> 
    body { background-color: gray; } 
    input{width:375px;display:block;border: 1px solid #999;height: 25px;--moz-box-shadow: 0px 0px 8px rgba(0, 0, 0, 0.3);box-shadow: 0px 0px 8px rgba(0, 0, 0, 0.3);} 
    .message_box{ background-color: white; height: 500px; width: 100%;} 
    .message_form{width: 100%;} 
    .message_input{width: 100%;} 
    .message_submit{} 
    </style> 
    </head> 
    <body> 

    <div class="message_box"><?php getMessages(); ?></div> 
    <form class="message_form" action="chatbox.php" method="post"> 
    <input class="message_input" type="text" name="message"> 
    <!-- <input type="submit"> --> 
    </form> 
    </body> 
</html> 
+0

你能'DESCRIBE messages'?你也應該準備這個。 –

+1

你很容易受到[SQL注入攻擊](http://bobby-tables.com)的影響。請勿使用此代碼。話雖如此,這段代碼「很好」(很容易受到攻擊,但......'很好')。數據庫中'message'字段的類型是什麼?炭? VARCHAR?詮釋? –

+1

在你做任何其他事情之前,你必須閱讀[正確的SQL轉義](http://bobby-tables.com/php)以避免嚴​​重的[SQL注入漏洞](http:// bobby- tables.com/)出現在這裏。當使用'mysqli'時,你應該使用['bind_param'](http://php.net/manual/en/mysqli-stmt.bind-param.php)爲你的查詢添加值。不要使用字符串連接來爲查詢字符串添加'$ _POST'值。 – tadman

回答

0

看看這有助於:

function postMessage($message){ 
    mysqli_query(connectdb(), "INSERT INTO messages (message) VALUES ("'".mysqli_real_escape_string($message)."'")"); 
} 

// connectdb(); // this is probably not needed since this function 
// is called in postMessage function 
if (isset($_POST['message'])){ 
    postMessage($_POST['message']); 
} 
+0

要麼使用準備好的查詢,要麼必須使用'mysqli_real_escape_string()'。 – Barmar

+1

數據庫中的消息字段使用TEXT類型。 我同意代碼容易受到攻擊,但它只是一個本地主機開發的東西,我不關心任何攻擊者,因爲他們沒有任何訪問本地服務器的權限。一旦我處理「唯一數字」錯誤,我一定會提高它的安全性。 行爲如下:一旦我輸入一個數字,頁面將像往常一樣更新,並向我顯示新條目以及數據庫。但如果我輸入甚至一個字母,我什麼也得不到,甚至沒有錯誤。它只是更新並顯示相同的舊條目。 – meta11144

+0

當你刪除postMessage函數,並使用這個: if(isset($ _ POST ['message'])) { mysqli_query(connectdb(),「INSERT INTO messages(message)VALUES('」)會發生什麼。 $ _POST [ '消息'] 「')」)。 } – Maximus2012

相關問題