0

I would like to ask something here. now I make form that insert data into table. this table kemaskini that already have

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

when I type "Speaker" in form then I submit it. it trace and say try again. it because already have. coding that I write here. it only trace row 1 of table kemaskini. when I type "Laptop" in form then I submit it. it insert normally.

i more thing how I can trace "Speaker" and "speaker" are same.

        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");

        }
        }
4

2 回答 2

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
}

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

于 2013-03-24T03:51:05.773 回答
0

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

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

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

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

于 2013-03-24T04:15:48.657 回答