如何跟踪重复数据

时间:2013-03-24 03:46:54

标签: php mysql sql

我想问一下这里的问题。 现在我制作将数据插入表格的表格。 这个表kemaskini已经有了

+------+----------+----------+
|  no  |    Item  | kuantiti |    
+------+----------+----------+
|  1   | Speaker  |   10     |
+------+----------+----------+
|  2   | Laptop   |   10     |
+------+----------+----------+
|  3   | Mouse    |   10     |
+------+----------+----------+

当我在表格中键入“发言人”时,我提交它。 它追踪并说再试一次。因为已经有了。 我在这里写的编码。它只跟踪表kemaskini的第1行。 当我在表格中键入“笔记本电脑”时,我提交它。 它正常插入。

我更多的是如何跟踪“扬声器”和“扬声器”是一样的。

        if (isset($_POST['submit']))
        { 
        $result = mysql_query("SELECT Item FROM kemaskini");
        $test = mysql_fetch_array($result);
        $trace=$test['Item'];


        if($_POST['Item']==$trace)
        {

        echo "Try Again";

        }

        else
        {   
        $item=$_POST['Item'] ;
        $kuantiti= $_POST['kuantiti'] ; 

        mysql_query("INSERT INTO `kemaskini`(Item,kuantiti) 
        VALUES ('$item','$kuantiti')"); 

        header("Location: kemaskini.php");

        }
        }

2 个答案:

答案 0 :(得分:1)

原因是因为您没有从mysql_fetch_array()循环结果,这就是您只检查结果的第一个值的原因。如果您不想迭代,可以将查询更改为:

$itemToSearch = "Speaker";
$result = mysql_query("SELECT COUNT(*) result 
                       FROM kemaskini
                       WHERE Item = '$itemToSearch'")

将为您提供找到的项目总数,

$test = mysql_fetch_array($result);
$trace = $test['result'];

if($trace > 0)
{
    echo "Try Again";
}
else
{
 // insert value
}

作为旁注,如果变量的值( s )来自外部,则查询易受SQL Injection攻击。请查看下面的文章,了解如何防止它。通过使用PreparedStatements,您可以摆脱在值周围使用单引号。

答案 1 :(得分:0)

关于,如何跟踪“Speaker”和“speaker”是否相同,您可以使用大多数数据库引擎支持的upper()或lower()函数。我不使用mysql所以我在这里假设。你的支票会是这样的:

select count(*) records 
from kemaskini
where lower(item) = 'speaker'

话虽如此,我必须警告你,使用where子句中的函数会使查询运行得更慢。

如果JW关于PreparedStatements的评论包括使用查询参数(我也不使用php),这是非常好的建议。它们不仅可以提高应用程序的安全性,还可以逃避特殊字符,如撇号。由于您正在进行字符搜索,因此如果用户向您的应用程序提交了“Dave键盘”之类的内容,则不希望查询崩溃。