<?php
$ip = htmlspecialchars($_GET["ip"]);
$serverIp = "a";
$a = "a";
include("mysql.php");
$votes = "serverVotes";
$results = mysql_query("SELECT * FROM toplist WHERE serverIp = $_POST[serverIp] ORDER BY $votes DESC");
if($row['serverIp'] = $_POST[serverIp]) {
echo 'Yes1.'; //debugging
}
if($row['serverIp'] != $_POST[serverIp]) {
echo 'No1.'; //debugging
}
while($row = mysql_fetch_array($results)){
if($row['serverIp'] = $_POST[serverIp]) {
echo 'Yes2.'; //debugging
}
if($row['serverIp'] != $_POST[serverIp]) {
echo 'No2.'; //debugging
}
}
?>
我试图制作它,所以如果&#34; serverIp&#34;存在于数据库中,它将回显某些信息,如果它不存在,它将什么也不做。我不这么认为 实际上从表单中获取IP,但我可能是错的,这可能是其他一些问题。
答案 0 :(得分:2)
如果在$_POST
中使用它,则需要转义IP并将其括在引号中。而不是htmlspecialchars()
,使用mysql_real_escape_string()
来转义SQL查询的输入:
$results = mysql_query("SELECT * FROM toplist WHERE serverIp = '" . mysql_real_escape_string($_POST['serverIp'] . "' ORDER BY $votes DESC");
在此之后,您需要在$row
具有任何值之前实际获取一行。在某些地方,当您打算使用等于运算符=
时,您错误地也使用了赋值运算符==
:
$row = mysql_fetch_array($results);
// Now do stuff with $row:
// All of these should use == for equality, not = for assignment
// Also, enclose array keys in quotes inside $_POST['serverIp]. Though it may work
// without the quotes, it is bad practice to omit them, and will fill your error logs
// with warnings.
if($row['serverIp'] == $_POST['serverIp']) {
echo 'Yes1.'; //debugging
}
if($row['serverIp'] != $_POST['serverIp']) {
echo 'No1.'; //debugging
}
while($row = mysql_fetch_array($results)){
if($row['serverIp'] == $_POST['serverIp']) {
echo 'Yes2.'; //debugging
}
if($row['serverIp'] != $_POST['serverIp']) {
echo 'No2.'; //debugging
}
答案 1 :(得分:1)
$ip = htmlspecialchars($_GET["ip"]);
$serverIp = "a";
$a = "a";
include("mysql.php");
$votes = "serverVotes";
$results = mysql_query("SELECT * FROM toplist WHERE serverIp = '".$_POST['serverIp']."' ORDER BY $votes DESC");
$row = mysql_fetch_array($results);
if($row['serverIp'] === $_POST['serverIp']) {
echo 'Yes1.'; //debugging
}
if($row['serverIp'] != $_POST['serverIp']) {
echo 'No1.'; //debugging
}
while($row = mysql_fetch_array($results)){
if($row['serverIp'] === $_POST['serverIp']) {
echo 'Yes2.'; //debugging
}
if($row['serverIp'] != $_POST['serverIp']) {
echo 'No2.'; //debugging
}
}
答案 2 :(得分:1)
当您点击第一个if
语句时,您尚未向$row
分配任何内容。尝试删除第一个if
语句并进入while
循环,然后再访问$row
。
答案 3 :(得分:1)
我真的没有得到你的问题,但无论如何,这是错误的:
if($row['serverIp'] = $_POST[serverIp]) {
这会将$ row ['serverIp']设置为$ _POST [serverIp],而不是检查它是否为真。你可能想要
if($row['serverIp'] == $_POST[serverIp]) {
代替。
另外,$_POST[serverIp]
是错误的,这将寻找常量'serverIp'(可能不存在)。它会工作,因为PHP使它成为一个字符串,但你会从它获得PHP通知。
此外,您的MySQL查询不安全。有人可以使用MySQL-Injections做一些讨厌的事情。
和
if($row['serverIp'] = $_POST[serverIp]) {
echo 'Yes2.'; //debugging
}
您不需要if语句,因为您已将WHERE
放入MySQL查询中。所以它永远都是真的。