我的代码如下:
<?php
include("config.php");
$ip=$_SERVER['REMOTE_ADDR'];
if($_POST['id'])
{
$id=$_POST['id'];
$id = mysql_escape_String($id);
$ip_sql=mysql_query("select ip_add from Voting_IP where mes_id_fk='$id' and ip_add='$ip'");
$count=mysql_num_rows($ip_sql);
if($count==0)
{
$sql = "update Messages set up=up+1 where mes_id='$id'";
mysql_query($sql);
$sql_in = "insert into Voting_IP (mes_id_fk,ip_add) values ('$id','$ip')";
mysql_query($sql_in) or die(mysql_error());
echo "<script>alert('Thanks for the vote');</script>";
}
else
{
echo "<script>alert('You have already voted');</script>";
}
$result=mysql_query("select up from Messages where mes_id='$id'");
$row=mysql_fetch_array($result);
$up_value=$row['up'];
echo "<img src='button.png' width='110' height='90'>";
echo $up_value;
}
?>
我的问题是插入过程根本不会发生。 script
标记回显了一个警告框。甚至img
标记也会回显到网页。但插入过程不会发生。配置文件很好。
注意:此代码适用于具有PHP 5.3的本地计算机,但它不适用于具有PHP 5.2的服务器。
答案 0 :(得分:0)
唯一的解释是$count==0
检查是错误的。尝试使用此解决方法:
$ip_sql=mysql_query("select count(*) from Voting_IP where mes_id_fk='$id' and ip_add='$ip'");
$rc=mysql_fetch_row($ip_sql);
$count=$rc[0];
而不是:
$ip_sql=mysql_query("select ip_add from Voting_IP where mes_id_fk='$id' and ip_add='$ip'");
$count=mysql_num_rows($ip_sql);
答案 1 :(得分:0)
您是否尝试过乱搞报价?如果我错了,请有人纠正我,但AFAIK,单引号内的变量不会在PHP中扩展。
$ip_sql=mysql_query("select ip_add from Voting_IP where mes_id_fk='".$id."' and ip_add='".$ip."'");
答案 2 :(得分:0)
看看答案和评论,是时候上学了:
$sql = "update Messages set up=up+1 where mes_id='$id'";
echo $sql . '<br>';
mysql_query($sql);
$sql_in = "insert into Voting_IP (mes_id_fk,ip_add) values ('$id','$ip')";
echo $sql_in . '<br>';
mysql_query($sql_in) or die(mysql_error());
echo "<script>alert('Thanks for the vote');</script>";
你在找什么?
你正在为$ id和$ ip设置值 - 也许其中一个是空的或者包含一个以某种方式使结果“奇怪”的字符。通过仔细查看您将要执行的原始查询,您将看到它的可变部分是否令人不快。
答案 3 :(得分:0)
您没有检查第一个查询是否成功:
$ip_sql=mysql_query("select ip_add from Voting_IP where mes_id_fk='$id' and ip_add='$ip'");
$count=mysql_num_rows($ip_sql);
那里没有... or die(mysql_error())
,但这很可能不是问题,因为如果查询失败,当你进行mysql_num_rows()
调用时,你会得到一个“无效语句句柄”类型错误之后立即。作为一个风格提示,我建议重写第一个查询如下:
SELECT COUNT(*) FROM Voting_IP
WHERE (mes_id_fk = $id) AND (ip_add = $ip)
您没有使用任何检索到的值,只使用行数,因此执行“select *”类型查询没有任何意义,这会强制数据库对所有可能的值执行至少一些处理。如果此系统扩展到非常多的投票和IP,则使用count()版本将更有效。
你说插入没有发生,但是没有说明发生了哪个alert()
,这意味着插入查询出错,或者你的第一个查询返回0,整个块都带有跳过插入查询。
您是否尝试过手动运行更新/插入查询?您没有检查更新是否成功,因为之后没有or die(mysql_error())
。也许有外键错误,语法错误等......
答案 4 :(得分:0)