2013-04-01 67 views
-2

假設您有網站,用戶可以提交他們的姓名以參與某些類。用戶將填寫表單,然後點擊提交,然後點擊他們的姓名和電話號碼會去一個MySQL數據庫中的表格。我想要做的事情是,我想阻止用戶通過檢查電話號碼是否相同來提交他/她的名字兩次(我知道這是愚蠢的,但我只是說作爲一個例子)。所以,我該怎麼辦,我用這個方法來插入表單數據到數據庫:不允許在mysql表中插入同一行數據

$pdo = new PDO('mysql:host=localhost;dbname=form', 'formuser', 'password'); 
    $fname = $_REQUEST['fname']; //first name from the form 
    $lname = $_REQUEST['lname']; //last name from the form 
    $pnumber = $_REQUEST['pnumber'] //phone number from the form 
    $query = 'INSERT INTO list SET 
      firstname = "' . $fname . '", 
      lastname = "' . $lname . '", 
      phonenumber ="' . $pnumber . '", 
      date = CURDATE()'; 
    $pdo->exec($query); 

而且我知道這是不是將數據插入到一個安全的方式數據庫。我試圖找出一種方法,然後爲s部署更好的解決方案泄露數據。

+3

使用pdo並不意味着你從sql注入是安全的你的代碼仍然容易受到sql注入的影響你需要使用prepared語句 –

+0

正如我所說的,我知道這段代碼是不安全的。我只是跳過了準備好的語句和其他安全的東西),以簡化代碼。但謝謝反正 – roostaamir

+0

瘋狂的想法。如果你想查看錶中是否存在數據,請嘗試'選擇'它。 'SELECT COUNT(*)FROM list where phonenumber =?'。 – DCoder

回答

1

就像你在你的問題說,與表的通信是不安全的。

但是,爲了回答你的問題,這裏是一個示例查詢:

SELECT IF(COUNT(*) > 0, TRUE, FALSE) 
    FROM list 
    WHERE firstname = $fname 
     AND lastname = $lname 
     AND phonenumber = $pnumber 

我不熟悉php,也許你可以工作了這一點。查詢輸出TRUE是否存在重複名字,姓氏電話號碼。如果查詢輸出TRUE,則可以阻止將記錄插入到表中。

1

Fristly你需要檢查的電話號碼
如果(isset($ _ POST [ 'your_button']))
{
$電話= $ _ POST [ 'PHONENUMBER'];
$ query =「選擇*從列表中找到phonenumber ='$ phone'」;
$ result = mysql_query($ query)或die(mysql_error());
$ row = mysql_fetch_array($ result);
如果($行> 0){
回聲 「的電話號碼存在!」}
否則{

$ FNAME = $ _REQUEST [ 'FNAME'];從表單//第一名稱
$ L-NAME = $ _REQUEST [ 'L-NAME'];從形式//姓氏
$ pnumber = $ _REQUEST [ 'pnumber'] //電話從形式
$查詢號碼= 'INSERT INTO SET
姓=名單「'。$ FNAME'。「
lastname =「'。$ lname。'」,
phonenumber =「'。$ pnumber。'」,
date = CURDATE()';
$ pdo-> exec($ query);

}

+0

不要將'mysql_'與PDO混合使用。對於這個問題,根本不要使用'mysql_'。 – DCoder