2016-01-04 199 views
0

我目前正在一个有2个链接的网站上工作。 Upvote & downvote。 投票存储在mysql中,在一个名为“数据”,列“是”和“否”的表中PHP Mysql IF语句

我已经成功创建了一个查询来更新yes或no的计数,然后将值这一页。但是,目前用户可以通过垃圾邮件点击按钮,计数将继续增加。

我已经开始使用$ ip = $ _SERVER ['REMOTE_ADDR']记录IP地址; &把它们放在名为“ips”的表格中,并添加了“ipaddresses”列。

现在,我想改变我的代码,以便它会查询MySQL和检查“IPS”表$ IP,如果返回true,则死亡();否则,如果...执行upvote查询。这将使得一个人只能为每个IP投票一次。

这里是我当前的代码:

<?php 
if ($_GET['vote']=="yes") { 
    // Connection to database 
    $connection=mysqli_connect("hostname-here","username-here","password-here","database-here"); 
    // Check connection 
    if (mysqli_connect_errno()) 
    { 
     echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
    } 
    mysqli_query($connection,"UPDATE data SET yes = (yes + 1) WHERE ID = $_GET[id];"); 
    mysqli_close($connection); 

    echo "Voted.";  
} 
?> 

帮助,将不胜感激,我GOOGLE了很多,无法找到任何工作。谢谢!

+1

[你的脚本是在对SQL注入攻击的风险。(http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php) –

+0

为什么不只用会话/令牌来做?当然不得不设置另一张桌子。并可能添加一个JS按钮来提交一次。使用IP地址不是非常有效。 –

+0

我不关心SQLi。它是本地主机,不会去任何地方。我对会话/令牌没有经验,我只想为此做一个简单的修复。没有其他的。 –

回答

1

如果某人已投票,您不应该将IP作为决定性因素。多个用户可以来自同一个IP。

如果你想这样做,你应该创建一个新表。我们称之为“user_action”。该表应该有一个名为IP的列,另一个名为VOTE。您必须记录每个单独的用户操作,并在更新“数据”表之前检查IP。

编辑:一些伪代码,以帮助您更多。

创建表:

CREATE TABLE user_action (IP varchar(39), VOTE tinyint(1)); 

简单的PHP逻辑。只是实际的MySQL命令填写(你显然已经知道如何从OP做到这一点)

$sSql = "SELECT vote FROM user_action WHERE IP = '" . $_SERVER['REMOTE_ADDR'] ."'"; 

    If (rowcount > 1) { 
     //User already voted, update their answer. 
     $sSql = "UPDATE user_action SET vote = " .$_GET['vote']. " WHERE IP = '" . $_SERVER['REMOTE_ADDR'] ."'"; 
    } 
    Else { 
     //User hasn't voted, insert their answer 
     $sSql = "INSERT INTO user_action (vote, ip) VALUES(" .$_GET['vote']. ", '" . $_SERVER['REMOTE_ADDR'] ."'"; 
    } 

如果你想告诉你有多少upvotes有:

$sSql = "SELECT sum(vote) FROM user_action WHERE vote = 1"; 
+0

这几乎是说我已经知道。我知道我想创建另一个表并运行一个查询来检查一行是否存在,如果它确实会死,如果它不存在,则继续。我只是想弄清楚如何写这个,因为我到目前为止已经尝试了很多东西,而没有工作。 –

+0

@markjennings增加了一点,以帮助澄清。 –

0

在这里你去:

<?php 

if ($_GET['vote']=="yes") { 
    // Connection to database 
    $connection=mysqli_connect("fdb13.your-hosting.net","1789869_gow","niggers1","1789869_gow"); 
    // Check connection 
    if (mysqli_connect_errno()) 
     { 
      die("Failed to connect to MySQL: " . mysqli_connect_error()); 
     } 

    // Check if they've already voted 

    $result = mysqli_query($connection, "SELECT COUNT(*) AS already_voted FROM ips WHERE ip = '{$_SERVER['REMOTE_ADDR']}'") or die("Failed to query ips: " . mysqli_error()); 
    $row = mysqli_fetch_assoc($result); 
    if ($row['already_voted']) { 
     die("You already voted"); 
    } 

    // Increasing the current value with 1 
    mysqli_query($connection,"UPDATE girlsdata SET yes = (yes + 1) WHERE ID = $_GET[id];") or die("Failed to add vote: " . mysqli_error()); 
    mysqli_close($connection); 

    echo "PHP successfully executed. Edit this out later.";  
} 
?> 
+0

是的,但我希望它执行我的upvoting查询,如果它不返回一个条目。你能把它放进我的完整代码吗? –

+0

投票代码紧随其后。 – Barmar

+0

你不需要'else',因为'die'结束脚本。如果它离开了'if',则条件必须是错误的。 – Barmar