我在这里有一个问题,在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);
}
}
}
}
?>
答案 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;。
无需循环。