PHP/MySQL:不插入数据库
好吧,我正试图让人们每24小时投票选举一个“服务器”,但目前,我被困在这里:PHP/MySQL:不插入数据库,php,mysql,Php,Mysql,好吧,我正试图让人们每24小时投票选举一个“服务器”,但目前,我被困在这里: function vote1() { $pull = $_SERVER['REMOTE_ADDR']; $votersIp = "select votersIp from voters"; $usersIp = $_SERVER['REMOTE_ADDR']; $fetch = mysql_query("SELECT * FROM voters WHERE voters
function vote1() {
$pull = $_SERVER['REMOTE_ADDR'];
$votersIp = "select votersIp from voters";
$usersIp = $_SERVER['REMOTE_ADDR'];
$fetch = mysql_query("SELECT * FROM voters WHERE votersIp = '".$_SERVER['REMOTE_ADDR']."'");
while($rude = mysql_fetch_array($fetch)){
if($rude[votersIp] != $pull) {
$zoot="INSERT INTO voters (votersIp, lastVoted) VALUES ('$usersIp', '0')";
mysql_query($zoot) or die ( mysql_error() );
echo 'Voters IP not in database'; //debugging
}
if($rude[votersIp] = $pull) {
echo 'found ip'; //debugging
}
}
所以,如果你说不出来的话,我试着让每次有人投票时,它都会将他们的IP地址添加到数据库中。我知道我在这里犯了一些非常基本的错误,但我仍在学习
如果您能发布修复,但也能解释我做错了什么,我将不胜感激,任何建议都将非常好
谢谢大家! 您没有提到实际出了什么问题,但您在这里遇到了一个问题:
if($rude[votersIp] = $pull) {
在这里,您分配的是$rude[votersIp]
值$pull
,而不是比较它-它应该是:
if($rude[votersIp] == $pull) {
您的逻辑需要改进—您执行一个查询以获取其中包含特定IP的所有记录,然后循环这些结果,如果您刚刚告诉数据库为您获取的IP不在结果中,则插入一条记录 这就像走进一家餐馆,点了一份牛排,然后向服务员抱怨说你吃了牛排(IP在数据库中)。如果餐厅没有牛排(IP未列出),您的代码不会执行任何操作,只会忽略投票,因为您只记录数据库中已读取的IP 你应该有这样的东西:
$fetch = mysql_query("SELECT count(*) AS cnt FROM voters WHERE votersIp='{$_SERVER['REMOTE_ADDR']}'") or die(mysql_error());
$row = mysql_fetch_assoc($fetch);
if ($row['cnt'] == 0) {
// ip is not in the database, allow the vote
} else {
// ip is listed, no vote for you!
}
使用以下命令:
function vote1() {
$mysqli=new mysqli("hostname", "username", "password", "database");
//Check to see if voter is in DB
$stmt = $mysqli->prepare("SELECT id FROM voters WHERE votersIp = ?");
$stmt->bind_param('s', $_SERVER['REMOTE_ADDR']);
$stmt->execute();
$stmt->bind_result($rude);
$stmt->fetch();
$stmt->close();
//If not, add him to the DB
if($rude[votersIp] != $_SERVER['REMOTE_ADDR']) {
//The DateTime
$mySqlDateTime= date("Y-m-d H:i:s", $_SERVER['REQUEST_TIME']);
//Insert Into DB
$stmt = $mysqli->prepare("INSERT INTO voters (votersIp, lastVoted) VALUES (?, ?,)");
$stmt->bind_param('ss', $_SERVER['REMOTE_ADDR'], $mySqlDateTime);
$stmt->execute();
$stmt->close();
echo "User Added";
}
else{ echo "User Already Exhists"; }
}
代码中有几个问题
while
或函数
WHERE
子句,如下所示:selectvotersip fromsvotersip=$userIp
$rude[votersIp]
是错误的,而$rude['votersIp']
是正确的。(没有引号,PHP将其解释为常量,而不是字符串。)$rude[votersIp]=$pull
语句是一个变量赋值。您应该使用正确的运算符来比较值:$rude[votersIp]==$pull
while
循环根据搜索特定IP的查询结果完成。这意味着if
的第一个条件将永远不会为真(另一个IP),因此INSERT
将永远不会运行function vote()
{
$ip = $_SERVER['REMOTE_ADDR'];
$select = 'SELECT votersIp FROM voters WHERE votersIp = "' . mysql_real_escape_string($ip) . '"';
$search = mysql_query($select);
$voter = mysql_fetch_array($search);
if (!empty($voter))
{
echo 'found ip'; //debugging
}
else
{
echo 'Voters IP not in database'; //debugging
$insert = 'INSERT INTO voters (votersIp, lastVoted) VALUES ("' . mysql_real_escape_string($ip) . '", "0")';
mysql_query($insert);
}
}
建议:你应该阅读和学习一本关于初学者编程的好书。由于我不能为你推荐一本特定的书,我建议你要求一本推荐书。对于初学者来说,这是一本学习编程的好书。也缺少了
votersIp
的引号,不过如果没有定义votersIp
常量,PHP会礼貌地将其视为带引号的字符串。我不确定这一点,因为我从来没有像他那样写过,但我不想说万一我错了,哈哈,它也不应该读if($rude[votersIp]==$pull)
,而应该读else
。没错,至少现在他们知道在比较中哪里出了问题-应该有助于防止将来出现更多问题。正确缩进代码,删除不必要的换行符并删除未使用的变量。感谢固定版本,更感谢你告诉我出了什么问题!