2010-05-27 43 views
2

我有一個我用來發布數據到MySQL的表單。如果數據庫包含特定的ID,如何停止向mysql發送數據?

提交我要檢查數據庫,看看是否有列「客戶ID」即等於「用戶ID」,如果是沒有張貼任何形式的字段的形式之前。

基本上,我想可以發佈不止一次限制我的用戶。用戶將能夠登錄到我的系統並創建一篇文章。他們將能夠刪除和修改他們的帖子,但僅限於一個帖子。

我將如何做到這一點???到目前爲止的代碼:

<?php 

include '../login/dbc.php'; 
page_protect(); 

$userid = $_SESSION['user_id']; 

$sql="INSERT INTO content (customerid, weburl, title, description) 
VALUES 
('$_POST[userid]','$_POST[webaddress]','$_POST[pagetitle]','$_POST[pagedescription]')"; 

if (!mysql_query($sql)) 
    { 
    die('Error: ' . mysql_error()); 
    } 
echo "1 record added"; 

?> 
+3

我知道這可能是無關你的問題,但請閱讀:http://en.wikipedia.org/wiki/SQL_injection – typeoneerror 2010-05-27 16:43:24

+0

是不是這個問題一樣,因爲這一個:http://stackoverflow.com/問題/ 2923428 /停止 - 用戶發佈 - 多於一次? – Kurucu 2010-05-27 18:39:50

回答

3

您應該使用兩個查詢。如果已經存在具有該ID的記錄,則第一個SELECT customerid FROM content WHERE customerid = @ID將返回一行。從那裏,一條if語句會告訴你的用戶他們已經有一個帖子,或者繼續用你現有的代碼插入記錄。

0

不要放棄你想檢查參數的SELECT語句 - 如果它返回任何行則不做插入。

僞碼 -

$query = "SELECT customerid FROM content WHERE customerid = $_POST['userid']"; 
+2

嗯,這是很好的SQL注入 – typeoneerror 2010-05-27 16:41:26

+0

顯然,這不是幾個原因生產代碼 - 1:我將其標記爲僞。 2:這是原始問題使用的格式。 – 2010-05-27 17:31:17

0

1)您可以使用MySQL Procedures - 您可以將一個過程看作是一種MySQL函數,您可以在其中編寫像您想要的規則一樣的規則,然後從您的PHP文件中只讀call

0

你可以這樣做:

<?php 

session_start(); // this is important if you are missing one 

include '../login/dbc.php'; 
page_protect(); 

$userid = mysql_real_escape_string($_SESSION['user_id']); 

$check_query = "select userid from content where userid = $userid"; 
$result = mysql_query($check_query) or die(mysql_error()); 

if (mysql_num_rows($result)) 
{ 
    exit('User is already their for a post !!'); 
    // or redirect using header function. 
} 

$sql="INSERT INTO content (customerid, weburl, title, description) 
VALUES 
('$_POST[userid]','$_POST[webaddress]','$_POST[pagetitle]','$_POST[pagedescription]')"; 

if (!mysql_query($sql)) 
    { 
    die('Error: ' . mysql_error()); 
    } 
echo "1 record added"; 

?> 
+1

也是美味的SQL注入。 – typeoneerror 2010-05-27 16:42:16

+1

如果您使用此代碼,我希望Bobby Tables不會在您的網站上註冊。 – Jeff 2010-05-27 16:46:13

+0

@Typeoneerror,@Jeff:錯過了完全,假設'userid'是一個字符串,我已經使用了正確的函數現在雖然前面加上語句將是更好的路徑。 – Sarfraz 2010-05-27 16:48:13

0

你到SQL注入非常脆弱:

$sql="INSERT INTO content (customerid, ...) VALUES ('$_POST[customerid]', ...)"; 
                ^

This article解釋SQL注入,以及如何避免在PHP中的漏洞。

相關問題