2012-01-10 135 views
4

也是非法插入如何防止將空白數據插入到MySQL表中?

我已經看到了這個問題,問,但沒有響應的工作對我來說(或者說我太傻,以使他們的工作)。我想我需要個性化的幫助。每次刷新我的PHP頁面時,它都會插入空白數據。如何防止插入空白和/或惡意數據。

這是我的代碼:

<?php 

    $con = mysql_connect("localhost","user","pass") or die ("Couldn't connect!"); 
    if (!$con) 
    { 
     die('Could not connect: ' . mysql_error()); 
    } 

    mysql_select_db("streams") or die ("Couldn't find db"); 

    $sql="INSERT INTO streams (streamname) 
    VALUES ('$_POST[streamname]')"; 

    if (!mysql_query($sql,$con)) 
    { 
     die('Error: ' . mysql_error()); 
    } 

    echo "1 record added"; 


    mysql_close($con) 

?> 

<form action="submit.php" method="POST"> 
    Stream Name: <input type="text" name="streamname" id="streamname" /><br /> 
    <input type="submit" name="submit" value="Stream" /> 
</form> 
+0

你didnt't驗證$ _ POST [streamName中。 「空白數據」是指「'還是NULL? – Jaxedin 2012-01-10 00:46:25

+1

您有一個SQL注入漏洞。 – SLaks 2012-01-10 00:48:22

+0

@SLaks我該如何保護? – 2012-01-10 00:57:59

回答

5

一些防禦性邏輯繞它:

if(!empty($_POST['streamname'])) { 

    // Your code here 
} 
+0

另外,如果有人輸入一個空值,你應該給他們一個警告信息,說明這是一個必填字段,這樣他們就明白了爲什麼表單不會提交。 – dqhendricks 2012-01-10 00:50:15

+0

從mysql打開關閉完整的php包裝? – 2012-01-10 00:51:03

+0

我得到它的工作!謝謝老兄:D – 2012-01-10 00:58:56

2

嘗試檢查,如果post數據設置:

<?php 

if($_POST) { 

    $con = mysql_connect("localhost","user","pass") or die ("Couldn't connect!"); 
    if (!$con) 
    { 
     die('Could not connect: ' . mysql_error()); 
    } 

    mysql_select_db("streams") or die ("Couldn't find db"); 

    $sql="INSERT INTO streams (streamname) 
    VALUES ('$_POST[streamname]')"; 

    if (!mysql_query($sql,$con)) 
    { 
     die('Error: ' . mysql_error()); 
    } 

    echo "1 record added"; 


    mysql_close($con); 
} 

?> 

<form action="submit.php" method="POST"> 
    Stream Name: <input type="text" name="streamname" id="streamname" /><br /> 
    <input type="submit" name="submit" value="Stream" /> 
</form> 
+0

只是因爲後設置參數已設置,並不意味着它們不會爲空。 – dqhendricks 2012-01-10 00:49:15

0

你應該逃脫輸入。

$sql='INSERT INTO streams (streamname) 
VALUES ("'.mysql_real_escape_string($_POST[streamname]).'")'; 
+0

雖然重要,但這是一個評論,而不是對問題的回答。 – dqhendricks 2012-01-10 00:48:11

+0

我想這可能是一個修復,因爲數組引用在插入語句中正確使用。 – amccausl 2012-01-10 00:59:13

+0

@amccausl轉義字符串有什麼作用? – 2012-01-10 01:03:53