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 :: Передача данных по нескольким полям. [2]

 PHP.SU

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


 Страниц (3): « 1 [2] 3 »   

> Описание: Передача данных по нескольким полям
EuGen Администратор
Отправлено: 12 Марта, 2008 - 11:15:25
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


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




Да не за что... всегда пожалуйста..


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Altynayka
Отправлено: 19 Марта, 2008 - 11:58:13
Post Id


Частый гость


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


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




EuGen
можно ли добавить еще одно ограничение внутри запроса, например:
CODE (text):
скопировать код в буфер обмена
  1. <?
  2. $rgWheres=array();
  3. if ($name)
  4.    $rgWheres[]="name LIKE '%".addslashes($name)."%'";
  5. if ($date1)
  6.    $rgWheres[]="date_reg >= ".($date1)." and date_reg <= ".($date2);
  7. strWhere=join(" OR ", $rgWheres);
  8. if ($strWhere)
  9.    $strWhere=" WHERE ".$strWhere;
  10. mysql_query("SELECT `nomer` ,`name` FROM `note` $strWhere");
  11. ?>
  12.  

вообщем мне нужно, чтобы была проверка в проверке, получается.
пожалуйста посмотрите, подскажите как правильно

(Отредактировано автором: 19 Марта, 2008 - 12:05:40)

 
 Top
EuGen Администратор
Отправлено: 19 Марта, 2008 - 15:48:53
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


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




Это зависит от того, что Вы именно хотите. Пока что я не понял точного смысла, но, судя по всему, нужно добавить условие "или дата регистрации от..до". Если так, тогда:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?
  3. $rgWheres=array();
  4. if ($name)
  5.    $rgWheres[]="LOWER(name) LIKE '%".strtolower(addslashes($name))."%'";
  6. if ($nomer)
  7.    $rgWheres[]="LOWER(nomer) LIKE '%".strtolower(addslashes($nomer))."%'";
  8. if($date1&&$date2)//нам нужны оба параметра - `от` и `до`
  9.    $rgWhers[]="(date_reg BETWEEN '".addslashes($date1)."' AND '".addslashes($date1)."')";
  10. $strWhere=join(" OR ", $rgWheres);
  11. if ($strWhere)
  12.    $strWhere=" WHERE ".$strWhere;
  13. mysql_query("SELECT `nomer` ,`name` FROM `note` $strWhere");
  14. ?>
  15.  


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Altynayka
Отправлено: 20 Марта, 2008 - 04:23:08
Post Id


Частый гость


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


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




EuGen
Это то что надо ! спасибо.
Я просто не могла сообразить как передать сразу два значения.
Улыбка
Еще вопрос:

А если у меня есть еще другой запрос и в нем надо еще указать другое условие, запрос на количество записей. Примерно так:
CODE (text):
скопировать код в буфер обмена
  1.  
  2. $query='select count (key_note) from note inner join ispolnenie on note.key_note=ispolnenie.key_note $strwhere and ispolnenie.key_note="2" group by key_note' ;

Однако этот запрос с $strWhere не работает, без него работает, но выдает,как положено, общее количество записей, а мне надо, чтобы и удовлетворяло условию $strWhere.
Как быть?

(Отредактировано автором: 20 Марта, 2008 - 07:26:52)

 
 Top
EuGen Администратор
Отправлено: 20 Марта, 2008 - 10:27:57
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


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




А он и не обязан работать. Поля же в новых таблицах могут бить новыми, или, например, пересекаться. Так что если Вы хотите, чтобы я Вам помог, сообщите структуру таблиц, хотя бы.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Altynayka
Отправлено: 20 Марта, 2008 - 10:38:23
Post Id


Частый гость


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


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




tab1. note
1.1.key_note
1.2. number
1.3. name
1.4. key_ispo

tab2.ispol
2.1 key_ispol
2.2 name_ispol

На самом деле структура другая оказывается, ошиблась:

CODE (text):
скопировать код в буфер обмена
  1. $query='select count (key_note) from note inner join ispolnenie on note.key_ispol=ispolnenie.key_ispol $strwhere and ispolnenie.key_ispol="2" group by key_note'


А теперь получится?
$strwhere - тоже, что и было

(Отредактировано автором: 20 Марта, 2008 - 10:55:47)

 
 Top
EuGen Администратор
Отправлено: 20 Марта, 2008 - 11:22:54
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


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




А что это у Вас за объекты tab1.note и tab2.ispol .. ? по правилам это таблица note из БД tab1 и таблица ispol из БД tab2. Это так и задумано или я неправильно понял?
Насколько я помню, в последнем варианте $strWhere присутствовало условие на поле date_reg, но даже такого названия я тут не вижу, так что не заработает.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Altynayka
Отправлено: 20 Марта, 2008 - 11:39:58
Post Id


Частый гость


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


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




да, эта примерная структура была, я понимаю, что так не заработает.
Сейчас скину правильную

ispolnenie

key_ispol int(11)
ispol varchar(25)



note

key_note int(11)
nomer int
date1 date
date2 date
name varchar(30)
key_ispol int(11)
 
 Top
EuGen Администратор
Отправлено: 20 Марта, 2008 - 12:19:30
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


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




Ну вот, уже более понятно. Неясно, правда, что несет смысл date_reg, но можете сделать так:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $rgWheres=array();
  4. if ($name)
  5.    $rgWheres[]="LOWER(note.name) LIKE '%".strtolower(addslashes($name))."%'";
  6. if ($nomer)
  7.    $rgWheres[]="LOWER(note.nomer) LIKE '%".strtolower(addslashes($nomer))."%'";
  8. if($date1&&$date2)
  9.    $rgWheres[]="(note.date1 BETWEEN '".addslashes($date1)."' AND '".addslashes($date2)."')";
  10. if($date1&&$date2)
  11.    $rgWheres[]="(note.date2 BETWEEN '".addslashes($date1)."' AND '".addslashes($date2)."')";
  12. $strWhere=join(" OR ", $rgWheres);
  13. if ($strWhere)
  14.    $strWhere=" (".$strWhere.") AND ";
  15. $sql="SELECT COUNT(*) FROM note LEFT JOIN ispolnenie ON note.key_ispol=ispolnenie.key_ispol WHERE $strWhere ispolnenie.key_ispol=2 GROUP BY note.key_note";
  16. ?>
  17.  

(Отредактировано автором: 20 Марта, 2008 - 12:21:49)



-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Altynayka
Отправлено: 25 Марта, 2008 - 08:37:59
Post Id


Частый гость


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


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




EuGen
у меня возникла следующая ошибка:
Цитата:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '$strWhere' at line 2

даже не знаю в чем дело.
пыталась поправить
и пробовала вывести сам запрос
CODE (text):
скопировать код в буфер обмена
  1.  SELECT count (key_note) FROM note inner JOIN ispolnenie ON note.key_ispol=ispolnenie.key_ispol where $strhere and ispolnenie.key_ispol="1" group by key_note

Это после токо, как подправила код немного:
CODE (text):
скопировать код в буфер обмена
  1.  
  2. $strhere=join (" AND ",$rgWheres);
  3.  
  4. $sqlkol='SELECT count (key_note)  FROM note  inner JOIN ispolnenie ON  note.key_ispol=ispolnenie.key_ispol
  5.           where  $strhere and ispolnenie.key_ispol="1" group by key_note';
  6.  

Когда вывожу результат:
CODE (text):
скопировать код в буфер обмена
  1.  <b>".mysql_query($sqlkol)
,
ничего не выводится. Что делать?

(Отредактировано автором: 25 Марта, 2008 - 09:21:06)

 
 Top
EuGen Администратор
Отправлено: 25 Марта, 2008 - 09:21:08
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


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




Ну так у Вас значение $strWhere не подставилось в строку запроса. Скорее всего, текст запроса Вы заключили в одинарные кавычки, а нужно в двойные. Посмотрите, так ли это у Вас.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Altynayka
Отправлено: 25 Марта, 2008 - 09:51:54
Post Id


Частый гость


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


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




EuGen
запрос обрабатывается, т.е. передаются параметры, но так сказать число, т..е кол-во записей не выводится.
и я решила проблему по другому немного:
CODE (text):
скопировать код в буфер обмена
  1.  
  2.  
  3.  
  4. $sqlkolproc=mysql_query("SELECT * FROM note inner JOIN ispolnenie ON  note.key_ispol=ispolnenie.key_ispol
  5.           where  $strhere and ispolnenie.key_ispol=1 group by key_note") or die (mysql_error());
  6.  
  7. $resultproc=mysql_num_rows($sqlkolproc);
  8.  
  9.  


ВАМ СПАСИБО!!!! Радость

(Отредактировано автором: 25 Марта, 2008 - 10:28:30)

 
 Top
вщпшы
Отправлено: 25 Марта, 2008 - 10:37:41
Post Id



Новичок


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


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




подскажите плиз почти по этой же теме так можно сделать

CODE (text):
скопировать код в буфер обмена
  1. $result = mysql_query("SELECT time FROM user WHERE name = '".mysql_real_escape_string($login)."'");
  2.     while ($row = mysql_fetch_row($result)) {
  3.          printf ( strtolower(addslashes($row[0])));
  4.     }
  5.          mysql_free_result($result);


в смысле этот код работает?:

CODE (text):
скопировать код в буфер обмена
  1. printf ( strtolower(addslashes($row[0])));

(Отредактировано автором: 25 Марта, 2008 - 10:42:35)

 
 Top
EuGen Администратор
Отправлено: 25 Марта, 2008 - 10:38:39
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


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




Ну так и есть - Ваш запрос теперь заключен в двойные кавычки, поэтому значения переменных подставляются.
Вообще, наверное, совсем правильно будет так:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $sql="...".$strWhere."..."//тут мы можем применять как одинарные так и двойные кавычки.
  4. ?>
  5.  

(Отредактировано автором: 25 Марта, 2008 - 10:39:19)



-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Altynayka
Отправлено: 25 Марта, 2008 - 11:45:54
Post Id


Частый гость


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


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




EuGen
только вот еще проблема, не всегда обрабатывается этот подсчет, почеу это может быть?
(Добавление)
вщпшы
я делаю так:

для массива:
CODE (text):
скопировать код в буфер обмена
  1.  
  2. <?php
  3. $result = mysql_query("SELECT time FROM user WHERE name = '".mysql_real_escape_string($login)."'");
  4.  
  5. while ($row=mysql_fetch_array($result))
  6. {
  7.  
  8. $s=$row["time"];
  9. echo $s;
  10. }?>
  11.  

Вам ведь надо вывести массив?

Или одно значение?
значение:
CODE (text):
скопировать код в буфер обмена
  1.  
  2. <?php
  3. $result = mysql_query("SELECT time FROM user WHERE name = '".mysql_real_escape_string($login)."'");
  4.  
  5. $num_row=mysql_num_rows($result);
  6. echo $num_row;?>
 
 Top
Страниц (3): « 1 [2] 3 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB