原谅我的无知,但我对PHP / MySQL很陌生。
我想要达到的目标是,对于我的电台前十名,我想让人们为个别歌曲投票,当他们这样做时,增加数据库中投票数的价值。
我通过网址传递了他们点击的歌曲的价值:http://www.vlaamseradio.tk/top10/top10stem.php?Song= 它确实在页面上正确显示歌曲,说"您投票赞成"歌曲名称",但投票值不会在数据库中增加。 这是我使用的代码:
<?php
$host="localhost";
$user="*****";
$pwd="****";
$port="";
$sys_dbname="******";
mysqli_connect($host,$username,$password,$dbname);
$_GET[Song];
mysql_query("
UPDATE Voting
SET Votes= Votes+ 1
WHERE Song = Song'
");
echo ("You voted for $_GET[Song]" );
?>
正如我所说:消息显示正确,但投票没有增加。 知道我哪里错了吗? PS。我也尝试传递2个值,例如http:/....... / .. php?Song =&amp; id =但是这不起作用。
非常感谢任何帮助。
答案 0 :(得分:1)
您正在使用mysql_query
而不是mysqli_query
。你的WHERE
部分也没有意义(Song = Song总是会返回true)。
另请考虑在PDO
中使用MySQLi
或准备好的语句来防止SQL
注入攻击。
固定代码:(但请切换到PDO或预备语句)
<?php
$host="localhost";
$user="*****";
$pwd="****";
$port="";
$sys_dbname="******";
mysqli_connect($host,$username,$password,$dbname);
$song = mysql_real_escape_string($_GET['Song']);
$songSafeHtml = htmlspecialchars($_GET['Song']);
mysqli_query("
UPDATE Voting
SET Votes= Votes+ 1
WHERE Song = '$song'
");
echo ("You voted for $songSafeHtml" );
?>
修正了以上问题: - SQL注入(通过mysql_real_escape_string) - XSS(通过htmlspecialchars)