2011-12-20 2 views
0

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

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

 <?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 
?> 
+2

Вы проверили, что '$ _GET ['name']' передает значение в '$ category'? – RobFos

+1

Используйте переключатель, если вы не можете использовать if-else – matino

+0

, что это # ​​в preg_replace. regexes ограничены символом \ right? Также проверьте, имеет ли значение $ _GET ['name'] какое-либо значение? – Shades88

ответ

7

Это может быть прибиралась гораздо меньше кода, гораздо более ремонтопригодны, используя 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 справедливо отметил, что является то, что вы назначая и не сравниваю.

+0

Только preg_replace не очень эффективен. – Spikey21

+0

Это работает для меня)) спасибо, мне нужно подождать еще 5 минут, чтобы принять ответ, что бы вы предложили вместо preg_replace? – Ilja

+0

@ Spikey21 true, но я не могу передать комментарий, не видя, откуда это значение строится - и он делает полезную работу, удаляя все не-альфа-символы из строки, эффективно дезинфицирует пользовательский ввод для SQL, и я не делаю не знаю более эффективного способа сделать * эту конкретную задачу * ... – DaveRandom

9

= не то же самое, как ==. В ваших операциях if вы выполняете присваивания, а не сравнение.
if ($category = "Love") должен быть изменен на if ($category == "Love") (или if ($category === "Love") и так далее ...

0

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

if($foo=="foo1") 
4

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

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

    if ($category == "Love") { 
     $st_category = "Love"; 
    } 
    else if ($category == "Work") { 
     $st_category = "Work"; 
    } 
    ... 
?> 
+1

Это даже не синтаксическая ошибка - '=' - оператор присваивания, поэтому код работает успешно, за исключением того, что '$ category' * становится *' Love'. Компьютер послушно делает то, что пользователь * дал указание * ему, - он не может проверить, что пользователь * хотел *, хотя;) – Piskvor

+0

да, спасибо :). Я знаю, что это «реальная» синтаксическая ошибка, я написал это потому, что это была ошибка для того, что ему нужно: D –

+1

Ошибка синтаксиса! = Ошибка потока программы, пожалуйста, не связывайте их.Это очень разные звери. Приведенный выше код * не * синтаксическая ошибка. Если бы это было так, интерпретатор PHP не смог бы запустить код. – Piskvor

0

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