PHP / MySQL: получение информации о форме, не работает, как запланировано - PullRequest
0 голосов
/ 22 февраля 2012
 <?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
}

    }
?>

Я пытаюсь сделать это так, чтобы, если «serverIp» существовал в базе данных, он отображал определенную информацию, а если ее не было, он просто ничего не делал. Я не думаю, что это на самом деле получение IP из формы, но я могу ошибаться, это может быть другая проблема.

Ответы [ 4 ]

2 голосов
/ 22 февраля 2012

Вы должны экранировать IP-адрес, если используете его из $_POST, и заключить его в кавычки. Вместо 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 голос
/ 22 февраля 2012

Я не совсем понимаю, в чем ваша проблема, но в любом случае, это неправильно:

if($row['serverIp'] = $_POST[serverIp]) {

Это устанавливает $ row ['serverIp'] в $ _POST [serverIp], а затем проверяет, верно ли это. Возможно, вы захотите

if($row['serverIp'] == $_POST[serverIp]) {

вместо.

Кроме того, $_POST[serverIp] не так, это будет искать константу 'serverIp' (который, вероятно, не существует). Это будет работать, потому что PHP делает его строкой, но вы получите PHP-уведомления от него.

Кроме того, ваш запрос MySQL не является безопасным. Кто-то может сделать некоторые неприятные вещи с помощью MySQL-инъекций.

И

  if($row['serverIp'] = $_POST[serverIp]) {
        echo 'Yes2.'; //debugging
  }

Вы не нуждаетесь в этом операторе if, поскольку вы уже добавили WHERE в свой запрос MySQL. Так что это всегда будет правдой.

1 голос
/ 22 февраля 2012

когда вы нажали первый оператор if, вы еще ничего не присвоили $row. попробуйте удалить первый оператор if и войти в цикл while, прежде чем получить доступ к $row.

1 голос
/ 22 февраля 2012

вы пробовали это?

$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
}

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...