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

对于已登录的用户,我已根据其给定的有效票数更新了他的声誉,该声誉存储在repute字段中,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>

最佳答案

您在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


旁注:错误报告仅应在登台进行,而不应在生产过程中进行。

09-19 21:45