PHP / MySQL:获取表单信息,而不是按计划工作

时间:2012-02-22 13:33:38

标签: php mysql forms

 <?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,但我可能是错的,这可能是其他一些问题。

4 个答案:

答案 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查询中。所以它永远都是真的。