Php 如果“投票”表中不存在客户端IP,如何正确添加费率
你好,堆栈溢出社区 到目前为止,我已经做了两个关于评级系统的主题,很高兴在你们的帮助下,我成功地实现了这一目标。它工作正常,每个人都可以投票,所以我在每次投票后将客户的IP添加到数据库表“投票”中。我想帮我做一个检查,比如:1如果客户已经投票通过,则不将其评级存储在数据库中Php 如果“投票”表中不存在客户端IP,如何正确添加费率,php,sql,Php,Sql,你好,堆栈溢出社区 到目前为止,我已经做了两个关于评级系统的主题,很高兴在你们的帮助下,我成功地实现了这一目标。它工作正常,每个人都可以投票,所以我在每次投票后将客户的IP添加到数据库表“投票”中。我想帮我做一个检查,比如:1如果客户已经投票通过,则不将其评级存储在数据库中 $ip = $_SERVER['REMOTE_ADDR']; $sql = $connection->prepare("SELECT postid, ip FROM votes WHERE ip = :ip"); $s
$ip = $_SERVER['REMOTE_ADDR'];
$sql = $connection->prepare("SELECT postid, ip FROM votes WHERE ip = :ip");
$sql->bindParam(':ip', $id, PDO::PARAM_INT);
$sql->execute();
if($sql->rowCount() > 0){
// I prefer to use the rowCount() but also a fetch will be ok for your task
echo 'You already voted.';
} else { // do your saving tasks here }
另外,我如何避免插入postid和ip?它们是否已经存在于“投票”中?
例如,我为id为2的帖子投票一次,它会创建:
-身份证号码:1
-职位:2
-ip:客户端的ip
当再次为同一帖子投票时,它会创建相同的信息,因此这是无用的,应该被阻止
投票表结构:
CREATE TABLE IF NOT EXISTS `votes` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`postid` int(11) NOT NULL,
`ip` varchar(15) DEFAULT NULL,
`time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
更新:/Full-Rate.php/
注意。您可以使用SELECT查询检查数据库中是否已存在ip地址
$ip = $_SERVER['REMOTE_ADDR'];
$sql = $connection->prepare("SELECT postid, ip FROM votes WHERE ip = :ip");
$sql->bindParam(':ip', $id, PDO::PARAM_INT);
$sql->execute();
if($sql->rowCount() > 0){
// I prefer to use the rowCount() but also a fetch will be ok for your task
echo 'You already voted.';
} else { // do your saving tasks here }
在我发布整个代码之前,我想让你试试这个。如果它有效,那么我将发布更新查询的第二部分
嗯,也许我做错了什么…它不起作用,也许我把它整合错了。我会上传整个价格。php@Stephan882你遇到了什么问题?嗯,我试着用你的代码实现了它,没有你的代码,它的行为是一样的…可能我做错了什么,但这是可以理解的,因为我是php初学者^^上面更新的代码没有你的select查询就很清楚了,但是我可以再次添加它,这样你们就可以检查我是否做错了什么,或者问题是否来自其他地方。我可以建议你们只使用INSERT查询,这样只需一次操作就可以在数据库中插入ip、postid和评级。另一个建议是将更新和插入操作分开,这样可以更有效地调试代码。是的,它可以工作,但它仍然会在DB中添加相同的新行,即使它说不成功^^^^我已经设法修复了,但我的方式有点糟糕。然而,我真的很感激你对我的一切帮助:P
<?php
$servername = "localhost";
$username = "root";
$password = "oregon";
$dbname = "project";
try {
$connection = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = $connection->prepare("SELECT * FROM votes");
if ($sql->execute()) {
$row_votes = $sql->fetch();
if ($row_votes['postid'] == $_POST['post_id'] && $row_votes['ip'] == $_SERVER['REMOTE_ADDR']) {
echo "You've already voted for this post. You cannot vote again.";
} else {
$sql = $connection->prepare("INSERT INTO votes (postid, ip) VALUES (:postid, :ip)");
$sql->bindParam(':postid', $postid);
$sql->bindParam(':ip', $ip);
$postid = $_POST['post_id'];
$ip = $_SERVER['REMOTE_ADDR'];
if ($sql->execute()) {
echo "INSERT was successeful";
} else {
echo "INSERT was unseccessful";
}
}
} else {
echo "Could not execute query";
}
}
catch(PDOException $e) {
echo "Error: " . $e->getMessage();
}
$connection = null;
?>