Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Можно ли передать функции логическое выражение для условного оператора?

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Shtorm_sai
Отправлено: 26 Апреля, 2011 - 01:02:04
Post Id



Частый гость


Покинул форум
Сообщений всего: 135
Дата рег-ции: Янв. 2011  
Откуда: Новосибирск, Россия


Помог: 0 раз(а)




В общем есть функция удаления информации из бд. В ней есть условный оператор if. Можно ли передать ей логичское выражение в функции?
 
 Top
HotBird
Отправлено: 26 Апреля, 2011 - 02:02:04
Post Id



Гость


Покинул форум
Сообщений всего: 114
Дата рег-ции: Сент. 2010  


Помог: 2 раз(а)




Передайте в функцию переменные которые нужно сравнивать в операторе if.

(Отредактировано автором: 26 Апреля, 2011 - 02:11:40)



-----
Человек, сделавший синтаксический анализатор PHP на одном регулярном выражении, займет достойное место среди гениев.
Качественный хостинг по доступной цене
 
 Top
Shtorm_sai
Отправлено: 26 Апреля, 2011 - 02:19:34
Post Id



Частый гость


Покинул форум
Сообщений всего: 135
Дата рег-ции: Янв. 2011  
Откуда: Новосибирск, Россия


Помог: 0 раз(а)




Вопрос. Как передать полноценное логическое выражение?

например такая функция:

PHP:
скопировать код в буфер обмена
  1.  
  2. function test($if)
  3. {
  4. $fieldsSql = mysql_query("SELECT * FROM news WHERE id=5");
  5. $fieldsRes = mysql_fetch_array($fieldsSql);
  6.  
  7. if($if){
  8. echo "Работает";
  9. }
  10. else{
  11. echo "Не работает";
  12. }
  13. }
  14.  


И уже в ней прописать логическое выражение.

PHP:
скопировать код в буфер обмена
  1.  
  2. test($_SESSION['login'] == $fieldsRes['login'] && $_SESSION['city'] == $fieldsRes['city']);
  3.  


Не работает. И с ковычкам пробовал и так и сяк, что то не выходит. Опять же если прписать это всё уже в нутри самой функции всё замечательно работает. Может с переменными что то не то?
 
 Top
grefon
Отправлено: 26 Апреля, 2011 - 03:44:31
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 823
Дата рег-ции: Нояб. 2010  


Помог: 32 раз(а)




Вот так все работает:
PHP:
скопировать код в буфер обмена
  1. function test($if)
  2. {
  3.         if($if){
  4.                 echo "Работает";
  5.         } else {
  6.                 echo "Не работает";
  7.         }
  8. }
  9.  
  10. $a = 12;
  11. $b = 12;
  12.  
  13. test($a == $b);
  14.  


-----
____________________________________________________________________
Ну как то так, наверное.
http://grefon[dot]com
 
 Top
Shtorm_sai
Отправлено: 26 Апреля, 2011 - 03:48:34
Post Id



Частый гость


Покинул форум
Сообщений всего: 135
Дата рег-ции: Янв. 2011  
Откуда: Новосибирск, Россия


Помог: 0 раз(а)




Почему вот так не работает? Улыбка

PHP:
скопировать код в буфер обмена
  1. test($_SESSION['login'] == $fieldsRes['login'] && $_SESSION['city'] == $fieldsRes['city']
 
 Top
grefon
Отправлено: 26 Апреля, 2011 - 03:52:08
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 823
Дата рег-ции: Нояб. 2010  


Помог: 32 раз(а)




И так все работает:
PHP:
скопировать код в буфер обмена
  1.  
  2. function test($if)
  3. {
  4.         if($if){
  5.                 echo "Работает";
  6.         } else {
  7.                 echo "Не работает";
  8.         }
  9. }
  10.  
  11. $_SESSION['login'] = 12;
  12. $_SESSION['city'] = "Москва";
  13. $fieldsRes['login'] = 12;
  14. $fieldsRes['city'] = "Москва";
  15.  
  16. test($_SESSION['login'] == $fieldsRes['login'] && $_SESSION['city'] == $fieldsRes['city']);
  17.  


-----
____________________________________________________________________
Ну как то так, наверное.
http://grefon[dot]com
 
 Top
Shtorm_sai
Отправлено: 26 Апреля, 2011 - 04:06:33
Post Id



Частый гость


Покинул форум
Сообщений всего: 135
Дата рег-ции: Янв. 2011  
Откуда: Новосибирск, Россия


Помог: 0 раз(а)




А у меня не работает(

Функция

PHP:
скопировать код в буфер обмена
  1.  
  2. function deleteContent($base,$fields,$idContent,$if,$page) //Удаление информации
  3. {
  4.     $delSql = mysql_query("SELECT ".$fields." FROM ".$base." WHERE id='$idContent'");
  5.     $delRes = mysql_fetch_array($delSql);
  6.         if($if){
  7.             header("Location: ".$page."?error=del");
  8.         }
  9.         else{
  10.             $delNew = mysql_query("DELETE FROM ".$base." WHERE id='$idContent'");
  11.                 if($delNew == 'true'){
  12.                     header("Location: ".$page."?ok=del");
  13.                 }
  14.         }
  15. }
  16.  


Функция будь тут:

PHP:
скопировать код в буфер обмена
  1.  
  2. deleteContent("news","city",$_GET['id'],$_SESSION['login'] == $fieldsRes['login'] && $_SESSION['city'] == $fieldsRes['city'],"news.php");
  3.  


Так вот точно не работает)
 
 Top
grefon
Отправлено: 26 Апреля, 2011 - 04:15:45
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 823
Дата рег-ции: Нояб. 2010  


Помог: 32 раз(а)




И так, как Вы написали, тоже работает. Тупо скопировал Ваш код, закоментил обращение к базе, открыл сессию и присвоил значения переменным. Перепроверьте все у себя! Делайте дебаги, смотрите где потеря.
PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. function deleteContent($base,$fields,$idContent,$if,$page) {
  4.  //   $delSql = mysql_query("SELECT ".$fields." FROM ".$base." WHERE id='$idContent'");
  5.  //   $delRes = mysql_fetch_array($delSql);
  6.         if($if){
  7.             header("Location: ".$page."?error=del");
  8.         }
  9.         else{
  10.             $delNew = mysql_query("DELETE FROM ".$base." WHERE id='$idContent'");
  11.                 if($delNew == 'true'){
  12.                     header("Location: ".$page."?ok=del");
  13.                 }
  14.         }
  15. }
  16.  
  17.  
  18. $_SESSION['login'] = 12;
  19. $_SESSION['city'] = "Москва";
  20. $fieldsRes['login'] = 12;
  21. $fieldsRes['city'] = "Москва";
  22.  
  23. deleteContent("news","city",$_GET['id'],$_SESSION['login'] == $fieldsRes['login'] && $_SESSION['city'] == $fieldsRes['city'],"news.php");
  24.  


-----
____________________________________________________________________
Ну как то так, наверное.
http://grefon[dot]com
 
 Top
Shtorm_sai
Отправлено: 26 Апреля, 2011 - 17:35:27
Post Id



Частый гость


Покинул форум
Сообщений всего: 135
Дата рег-ции: Янв. 2011  
Откуда: Новосибирск, Россия


Помог: 0 раз(а)




В общем пишу вот так:



Всё работает)

Если так

PHP:
скопировать код в буфер обмена
  1.  
  2. $_SESSION['city'] != $delRes['city']
  3.  


не работает. $delRes = массив с выборокой из базы внутри функции. Я так понимаю здесь проблема) Так как если эту выборку прописать за функцией и уже указать логическое выражение в аргументе. То всё работает.
 
 Top
OrmaJever Модератор
Отправлено: 26 Апреля, 2011 - 17:38:20
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




Shtorm_sai а вы вробовали выводить каждую переменую?

(Добавление)
Shtorm_sai пишет:
Вопрос. Как передать полноценное логическое выражение?

например такая функция:

PHP:
скопировать код в буфер обмена
  1. function test($if)
  2. {
  3. $fieldsSql = mysql_query("SELECT * FROM news WHERE id=5");
  4. $fieldsRes = mysql_fetch_array($fieldsSql);
  5.  
  6. if($if){
  7. echo "Работает";
  8. }
  9. else{
  10. echo "Не работает";
  11. }
  12. }

имено так оно и работает, хотя логика немного неправильная
== возвращает true либо false, по сути их можно записать в переменую
PHP:
скопировать код в буфер обмена
  1. $a = ($b == $c) // будет либо true либо false

Но смотря куда применять, может подойдёт тернарный оператор?


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Shtorm_sai
Отправлено: 26 Апреля, 2011 - 17:51:02
Post Id



Частый гость


Покинул форум
Сообщений всего: 135
Дата рег-ции: Янв. 2011  
Откуда: Новосибирск, Россия


Помог: 0 раз(а)




PHP:
скопировать код в буфер обмена
  1.  
  2. var_dump($_SESSION['city']); - string(1) "1"
  3. var_dump($delRes['city']); - NULL
  4.  


Только не пойму зачем мне здесь тенерный оператор? 8) Мне всего лишь нужно подставить логическое выражение внутри функции) А там душа - гуляй Улыбка
 
 Top
OrmaJever Модератор
Отправлено: 26 Апреля, 2011 - 17:56:47
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




Shtorm_sai пишет:
PHP:
скопировать код в буфер обмена
  1. var_dump($_SESSION['city']); - string(1) "1"
  2. var_dump($delRes['city']); - NULL

Понятно почему не работает? Обьснять не нужно? Улыбка
Shtorm_sai пишет:
Только не пойму зачем мне здесь тенерный оператор? 8) Мне всего лишь нужно подставить логическое выражение внутри функции)

Ну обычно в функцию передают все переменые, а там уже сравнивают.
PHP:
скопировать код в буфер обмена
  1. function a($a, $b)
  2. {
  3.    if($a == $b) //true
  4.    else             // false
  5. }
  6. a($var1, $var2);


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Shtorm_sai
Отправлено: 26 Апреля, 2011 - 17:58:55
Post Id



Частый гость


Покинул форум
Сообщений всего: 135
Дата рег-ции: Янв. 2011  
Откуда: Новосибирск, Россия


Помог: 0 раз(а)




Т.е. моя ошибка была в том, что выборку из бд нужно делать за функцией и в ней уже всё сравнить? Улыбка Т.е. внутри этого делать нельзя? Улыбка
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Хранение данных, их вывод и обработка »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB