比较数据和更新表

时间:2015-04-29 06:54:11

标签: php html mysql

我有两个表:voted_sites(USN,URL,vote,votefor)sites(URL,status,upvotes,downvotes,id)

对于登录用户,我根据他给出的有效投票更新了他的声誉,存储在声誉字段中,其中voted_sites拥有他投票的内容,而sites表是该网站的结果所在的位置(要么被阻止,要么被阻止。

如果用户也赞成取消阻止并且网站表状态也是解除阻止,那么我必须将他的声誉增加5,这应该通过所有元组发生(遍历)并为用户提供最终的声誉分数

我尝试了很多种方法,但在所有尝试中都没有成功。 当你只能使用mysqli_fetch_assoc($sql)连接到1个表时,我不知道如何同时对2个表进行操作。

这就是我的尝试:



<!Doctype html>
<html>
<?php
$c=$_GET['param'];// users name
$d=$_GET['param1'];// usesrs id
$e=$_GET['param2'];//  users repute


// Create connection
$con=mysqli_connect("localhost","root","","repute system");
    if(mysqli_connect_errno()){
        echo "ERROR ".mysqli_connect_error();
} 

$qwe = mysqli_query($con,"SELECT * FROM sites");
$sql = mysqli_query($con,"SELECT * FROM v_sites");
if (mysqli_num_rows($sql) > 0) {
    // output data of each row
    while($row = mysqli_fetch_assoc($sql)) 
    {
        
        if($d == $row['teacher_id'])
        {
            while ($raw = mysqli_fetch_assoc($qwe))
            {       
                 $rt = $row['votefor'];
                 $qt = $raw['status'];
                    if($row == $raw)
                    {
                        $er = mysqli_query($con,"UPDATE teacher set repute = repute + '5'  where name == '$c' ");
                    }
                    else 
                    {
                        $er = mysqli_query($con,"UPDATE teacher set repute = repute - '5'  where name == '$c' ");
                    }
            }
            
      
       }
    }
}
 
?>
</html>
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:2)

您在where子句中使用两个相等的符号而不是一个,并且在您想要增加它的数字周围使用字符串文字。

UPDATE teacher set repute = repute + '5'  where name == '$c'
                                                     ^^

UPDATE teacher set repute = repute - '5'  where name == '$c'
                                                     ^^

这些内容应为:

UPDATE teacher set repute = repute + 5  where name = '$c'

UPDATE teacher set repute = repute - 5  where name = '$c'

分别

测试时,将or die(mysqli_error($con))添加到mysqli_query(),以便查看在开发过程中发生的语法错误。

  • 旁注:确保您的repute列确实是int并且长度合适。

error reporting添加到文件的顶部,这有助于查找错误。

<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);

// rest of your code

旁注:错误报告应仅在暂存时完成,而不是生产。

答案 1 :(得分:-1)

首先确保所有(在您的情况下都是)表格都已规范化。 一旦确定,要同时处理两个表,您需要将这些表表示为Relational db的一部分。 然后,您很可能同时在多个表上实现操作。

如果我错了,请纠正我,但mysql不支持关系数据库。