如何避免在数据库中发布相同值的php

时间:2016-06-10 12:17:18

标签: php

我在这里有一个问题,在php中我有一个break和循环的东西。我有一个输入类型,如果我给ex的id为2,如果在db中有2只那么"你已经喜欢这个url&#34 ;应该出现。这是有效的。如果我给出了id 3它就说#34; Data添加了#34;。现在很好。但是如果我再次输入id 3它会说:

Data added!You liked this url already

并且在db中发布了一个新值3.如何避免这种情况?这是我的功能:

<form method="post">
    Url id: <input type="text" name="urlid" id="urlid">
    <input type="submit" name="givelikes" value="Give Likes">
    <br />
    <br />

</form>
<?php
        if(isset($_POST['givelikes'])){

        $urlid = $_POST['urlid'];


        $con = mysqli_connect('localhost','root','root', 'db');

        $user = $_SESSION['sess_user'];

        $query=mysqli_query($con,"SELECT likes FROM users WHERE user='".$user."'");
        $row = mysqli_fetch_array($query);
        $array = explode(" ", $row['likes']);
        foreach ($array as $value) {
            echo $value;
            echo $urlid;
            if($value == $urlid){
                echo "You liked this url already";
                break;
            }
            else{
            $array = $row['likes'];
            $array .= " ";
            $array .= "$urlid";
                $query = ("Update  users set likes = '".$array."' where user = '".$user."'");
                if(mysqli_query($con,$query)){
                    echo "Data added!";
                }
                else{
                    echo "ERROR: Could not able to execute sql: " . mysqli_error($con);

                }
            }
        }

        }

    ?>

1 个答案:

答案 0 :(得分:1)

目前,您正在循环所有&#34;喜欢&#34;并比较它们。所以步骤的顺序如下:

  • 输入2
  • 还不喜欢,所以添加了数据
  • 输入2
  • 循环播放喜欢,找到2,已添加数据
  • 输入3
  • 循环播放喜欢,找到2,不匹配,以便添加数据
  • 输入3
  • 循环播放喜欢,找到2,不匹配,以便添加数据
  • 继续循环,找到3,已添加数据

纠正这个问题将涉及改变你的设计。现在你有一个去标准化记录,其中包含一些空格分隔的&#34;喜欢&#34;。规范化您的数据。每个&#34;和#34;有一个记录。而不是不断更新单个记录,插入新记录。

然后当你想看一个&#34;喜欢&#34;已存在,您可以使用WHERE子句。像这样:

SELECT * FROM users WHERE user=? AND like=?

(注意:这是使用查询参数作为预备语句。这是强烈推荐。您当前的代码是全开 SQL注入。)

如果找到任何记录,那么该项目已经被&#34;已经被喜欢&#34;你可以输出信息。如果没有找到任何记录,INSERT新的记录和#34;喜欢&#34;。

无需循环。