PHP операторы if / else не работают - PullRequest
0 голосов
/ 20 декабря 2011

Я создал несколько операторов if / else для получения имени из URL, например http://website.com/page.php?name=Love Это выглядит хорошо и не выдает ошибок, но по какой-то причине я не получаю данные из базы данных. По сути, он получает 'name' из url, и проверка его является одной из разрешенных категорий, если да, он выбирает статью из базы данных, которая имеет st_category = для того, кого выбрал пользователь. Но опять же по какой-то причине это не работает.

Вот фрагмент кода, который, как мне кажется, вызывает проблему.

       <?php
        $category = preg_replace('#[^a-z]#i', '', $_GET["name"]);

        if ($category = "Love") {
        $st_category = "Love";
        }
        else if ($category = "Work") {
        $st_category = "Work";
        }
        else if ($category = "Money") {
        $st_category = "Money";
        }
        else if ($category = "Kids") {
        $st_category = "Kids";
        }
        else if ($category = "Health") {
        $st_category = "Health";
        }
        else if ($category = "Friends") {
        $st_category = "Friends";
        }
        else if ($category = "Education") {
        $st_category = "Education";
        }
        else if ($category = "Other") {
        $st_category = "Other";
        }
        else {
        header("Location: http://www.inelmo.com/");
        exit;
        }

$sql = mysql_query("SELECT * FROM stories WHERE showing = 1 AND st_category = '$st_category' ORDER BY st_date DESC LIMIT 10") or die (mysql_error("There was an error in connection"));
        //And another stuff here to display article
?>

Ответы [ 5 ]

9 голосов
/ 20 декабря 2011

= не совпадает с ==.В ваших операторах if вы выполняете назначения, а не сравнение.
if ($category = "Love") следует изменить на if ($category == "Love") (или на if ($category === "Love") и т. Д. *

7 голосов
/ 20 декабря 2011

Это может привести к уменьшению кода, гораздо более удобному для обслуживания, используя in_array().

$categories = array(
  'Love',
  'Work',
  'Money',
  'Kids',
  'Health',
  'Friends',
  'Education',
  'Other'
);

$category = preg_replace('#[^a-z]#i', '', $_GET["name"]);

if (!in_array($category, $categories)) {
  header("Location: http://www.inelmo.com/");
  exit;
}

$sql = mysql_query("SELECT * FROM stories WHERE showing = 1 AND st_category = '$category' ORDER BY st_date DESC LIMIT 10") or die (mysql_error("There was an error in connection"));

И это также исправляет проблему, которую правильно указал @matino: вы присваивали, а не сравнивали.

4 голосов
/ 20 декабря 2011

Вы использовали один «=» в каждом if.Правильный синтаксис: «==» или «===», например:

<?php
    $category = preg_replace('#[^a-z]#i', '', $_GET["name"]);

    if ($category == "Love") {
        $st_category = "Love";
    }
    else if ($category == "Work") {
        $st_category = "Work";
    }
    ...
?>
0 голосов
/ 20 декабря 2011

В своих операторах if вы использовали =, в то время как вы должны были использовать знак ==.С помощью = вы присваиваете значение переменной слева, например $sum = 1 + 2;, которое вы хотели получить $sum==3.

0 голосов
/ 20 декабря 2011

Пожалуйста, используйте двойной знак равенства, например

if($foo=="foo1")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...