评分图像

时间:2014-03-31 07:56:17

标签: javascript php jquery sql ajax

我正在做一个教程,您可以将图像和图像信息上传到网站。 图像将保存到文件夹,而信息将存储在数据库中。

它还有一个功能,它还可以创建每个上传图像的缩略图。在此缩略图旁边,您可以找到存储在数据库中的上传图像信息。

现在我想提高它并添加一个评级系统。 我已经创建了一个发送数字(1-5)的评级系统,具体取决于所点击的星形图像,并将其存储在txt文件中。

所以我的问题是,将评级与每张图片连接起来的最简单方法是什么? 我希望评级显示在缩略图旁边,就像图像信息一样。

编辑: 图片上传:

<div id="uploadform">
                <form action="laddaupp.php" method="post" enctype="multipart/form-data">
                    <input type="hidden" name="MAX_FILE_SIZE" value="500000" />
                    <label for="file"><strong>Filename:</strong></label>
                    <input type="file" name="file" id="file" />
                    <input type="text" name="uppladdare" placeholder="Uploader:" title="What's your name?"/>
                    <input type="text" name="titel" placeholder="Title" title="Give a title to your piece of work"/>
                    <input type="text" name="history" placeholder="History" title="Tell us the story behind your image. Where is it taken, etc."/>
                    <input type="submit" name="submit" value="Upload" />    
                </form>

 //Send data to database
            if(isset($_POST['submit']))
            {   
$dbcon = mysqli_connect("localhost","user1","test1","tutorial");



$stored_file = $_FILES["file"]["name"];
$file = "";

$query="INSERT INTO mountains (filname, uppladdare, titel, History) 
VALUES ('$stored_file','$_POST[uppladdare]','$_POST[titel]','$_POST[history]')";
if(!mysqli_query($dbcon ,$query));
            }

星级评分:

<form name="rating" id="rating">    
    <div id="rating-area" class="shadow">   

    <img src="stjärna.png" id="thumb1" data-value="1" />
    <img src="stjärna.png" id="thumb2" data-value="2" />
    <img src="stjärna.png" id="thumb3" data-value="3" />
    <img src="stjärna.png" id="thumb4" data-value="4" />
    <img src="stjärna.png" id="thumb5" data-value="5" />

    </div>


</form>
<!--Skickar information till textfilen när man klickar på en stjärna-->
<script>
    jQuery('div#rating-area img').click(function(e){
        var val = jQuery(this).data('value') ;
        console.log(val) ;
        jQuery.post('post.php',{ rating : val },function(data,status){
            console.log('data:'+data+'/status'+status) ;
        }) ;
    }) ;

</script>

2 个答案:

答案 0 :(得分:1)

您可以在数据库上创建与当前(我猜)Image表相关的另一个表。让我们说ImageRate

由于你以1-5的速率发送价值,你可以这样建立你的表

表格ImageRate

ID    Rate    ImageID (FK)
1     3       50
2     5       50
3     2       50

每个投票/费率都是ImageRate的一行,其中包含自动增量IDRate值和ImageID作为外键,这是主要的表Image的关键。

因此,当用户评价图像时,您必须以这种方式插入此表:

INSERT INTO ImageRate(ID, RATE, ImageID) VALUES(null, ?, ?);

其中第一个?将是费率值,第二个?是已评级的图片ID。

然后获得图像的有效率,你可以简单地做

SELECT AVG(rate) from imagerate where ImageID = 50

注意

这是一种非常基本的方式来做你需要的。但是,这个表可以扩展为几个更有用的列,例如时间戳,User id,以防止用户可以投票两次,等等...你需要考虑所有这些事情视具体情况而定。

答案 1 :(得分:0)

最简单的方法是将投票存储在数据库中。您可以通过图像的ID将它们连接到图像。

你必须考虑以下几点:

  • 您想阻止来自唯一身份用户的多次投票吗? - &GT;如果是,您必须单独存储所有选票
  • 你只需要AVG的选票吗? - 如果是(对其他人没有),您可以存储投票数和点数之和。 (AVG将是积分/数量)
  • 您想查看趋势吗? - 如果是,您应该单独存储所有选票并为每次投票存储时间戳。

我个人不建议将投票存储在文本文件中!要解决的问题太多(例如,确定性)。