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
Форумы портала PHP.SU :: Версия для печати :: Вопрос по выборке из БД
Форумы портала PHP.SU » PHP » Программирование на PHP » Вопрос по выборке из БД

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

1. Pitmen - 30 Июля, 2009 - 17:28:12 - перейти к сообщению
Для форума на phpBB нужна фича с отметкой о прочтении именно сообщения а не всего топика. Сделал кнопочку, которая передаёт в обработчик текст сообщения обработчику, но вот столкнулся с тем что когда делаеш выборку потом из БД, а именно из таблицы phpbb_posts сравниваются только записи на английском языке! Вот код обработчика
PHP:
скопировать код в буфер обмена
  1. $id_post = $_POST["id_post"];
  2. $taim = mysql_escape_string($_POST['today']);
  3. $topic = mysql_escape_string($_POST['topic']);
  4. $user_id = mysql_escape_string($_POST['user']);
  5. $db = mysql_connect("phpBBlight","phpBBlight","phpBBlight");
  6. mysql_select_db("phpBBlight",$db);
  7. $result = mysql_query ("SELECT * FROM phpbb_posts WHERE post_text = '$id_post'");
  8. $myrow = mysql_fetch_array($result);
  9. echo $myrow[post_id];
  10. echo $myrow[poster_id];

Переменной id_post передаю текст самого сообщения. Вывести что post_id, что poster_id получается только если сам текст сообщения на английском если на русском, то просто нечего не выводит. Почему так и как с этим бороться?
2. Viper - 30 Июля, 2009 - 19:08:15 - перейти к сообщению
mysql_query("SET NAMES cp1251"); после mysql_connect

если у вас phpBB2. если 3 то там UTF и должно работать норм по-умолчанию. иначе попробуйте UTF8
3. Pitmen - 30 Июля, 2009 - 19:49:34 - перейти к сообщению
Viper
Знаеш не помогло, у меня phpBB 3 и я малость в нём запутался! Если разбираешся в нём то помоги, хоть в каком направлении копать.
Вот код кнопки из сообщения, может там что то не так?
CODE (text):
скопировать код в буфер обмена
  1. <form name="otm_1" action="otmetca_1.php" method="POST" enctype="multipart/form-data"><input type="hidden" name="id_post" value="{postrow.MESSAGE}"><input type="hidden" name="user" value="{S_USERNAME}"><input type="hidden" name="today" value="<!-- PHP --> echo $today;<!-- ENDPHP -->"><input type="hidden" name="post_num" value="{postrow.POST_SUBJECT}"><input type="submit" name="otp_11" href="./otmetca_1.php"value="Отметить прочтённым">

{postrow.MESSAGE} это текст сообщения, понимаю, что проще бы было передать просто id сообщения и по нему уже делать выборку, но не могу понять как его передать, точнее где его взять?
4. Viper - 31 Июля, 2009 - 07:24:36 - перейти к сообщению
сделайте
echo '<pre>';
print_r($_POST);
echo '</pre>';

посмотрите что приезжает при загрузке страницы, возможно id там. или вместо $_POST, можно $_REQUEST попробовать отловить оттуда.
5. Pitmen - 31 Июля, 2009 - 08:45:47 - перейти к сообщению
Viper
Спасибо за подсказку, вот применинил, при $_POST выдаёт такое
Цитата:
Array
(
[id] =>
[id_post] => Это пример сообщения ..............
[user] => bill
[today] => 2009 - 07 - 31 8:29:16
[post_num] => Добро пожаловать в phpBB3
[otp_11] => Отметить прочтённым
тоесть то что я и передаю через кнопку, а когда подставляю $_REQUEST, то
Цитата:
Array
(
[id] =>
[id_post] => Это пример сообщения ................
[user] => bill
[today] => 2009 - 07 - 31 8:37:23
[post_num] => Добро пожаловать в phpBB3
[otp_11] => Отметить прочтённым
[style_cookie] => null
[phpbb3_6lgnu_u] => 58
[phpbb3_6lgnu_k] =>
[phpbb3_6lgnu_sid] => 83b5d3eae4d6754a9a99503efe02d88a
)
То чуть побольше инфы Ну а на странице отправки $_REQUEST выдаёт оч мало инфы
Цитата:
Array
(
[f] => 2
[t] => 1
[sid] => eb78e162654d5487ff24807caae2bc57
)
$_POST вообще нечего не даёт! В чистом виде ID сообщения негде не виден!
6. Viper - 31 Июля, 2009 - 12:10:43 - перейти к сообщению
хм... откуда-то же оно его знает... нуно полазить в phpbb3 тогда смогу сказать.
7. Pitmen - 31 Июля, 2009 - 12:34:18 - перейти к сообщению
А что вот это
Цитата:
[sid] => eb78e162654d5487ff24807caae2bc57
может через него?
8. Viper - 31 Июля, 2009 - 13:54:51 - перейти к сообщению
Pitmen пишет:
А что вот это

идентификатор сессии
9. Pitmen - 31 Июля, 2009 - 15:41:34 - перейти к сообщению
Нашол переменную шаблона {postrow.POST_ID}, это Id поста, передал его через пост в обработчик, там сделас сравнение и выборку, всё ок, вот код
PHP:
скопировать код в буфер обмена
  1. header("Content-Type: text/html; charset=utf-8");
  2. $id = $_POST["id"];
  3. $post_num = $_POST["post_num"];
  4. $taim = mysql_escape_string($_POST['today']);
  5. $topic = mysql_escape_string($_POST['topic']);
  6. $user_id = mysql_escape_string($_POST['user']);
  7. $db = mysql_connect("phpBBlight","phpBBlight","phpBBlight");
  8. mysql_query("SET NAMES UTF8");
  9. mysql_select_db("phpBBlight",$db);
  10. $result = mysql_query ("SELECT * FROM phpbb_posts WHERE post_id = '$id'");
  11. $myrow = mysql_fetch_array($result);
там потом вывод типа Пользователь такой то отметил сообщение такое и прочая лабуда, всё работает. Создал таблицу в БД, хочу туда заносить данные, что бы потом можно было посмотреть кто когда отметился, но вот тут то и застопорился нечего не заносится вот код
PHP:
скопировать код в буфер обмена
  1. $id_uzer = mysql_escape_string($myrow[poster_id]);
  2. echo  $id_uzer;
  3. $forum_id = $myrow[forum_id];
  4. $post_id =  $myrow[post_id];
  5. $bd = mysql_connect("phpBBlight","phpBBlight","phpBBlight");
  6. mysql_select_db("phpBBlight",$bd);
  7. $res = mysql_query ("INSERT INTO phpbb_otmet_post (id_uzer ) VALUES ('$id_uzer')$bd");
  8. if ($res == 'true')
  9. {
  10. echo "Информация в базу добавлена успешно!";
  11.  
  12. }
  13. else
  14. {
  15. echo "Информация в базу не добавлена!";
  16. }

Вчём может быть проблема?
(Добавление)
Разобрался проблема была в самой БД, точнее в её названии почемуто 2 _ не воспринималось, интересно почему?
10. Viper - 31 Июля, 2009 - 16:04:50 - перейти к сообщению
('$id_uzer')$bd это вообще что ?
если кол-во полей в запросе не соответствует реальным в таблице, то ничего и не запишет.
11. Pitmen - 31 Июля, 2009 - 16:59:44 - перейти к сообщению
Да разобрался всё пишет, а с переменными сам иногда путаюсь Радость $bd - второе подключение. Вот теперь вопрос, создал таблицу туда заношу ид сообщения и ид пользователя отметившего его, хочу подключившись кней вытянуть ид сообщения и уже подключившись к другой таблице вытянуть инфу про это сообщение, но только как это потом оформить в цикл, что бы выводилось на подобии "последнии сообщения"
12. Pitmen - 03 Августа, 2009 - 18:19:37 - перейти к сообщению
Обьясните плиз, как правильно подключится к двум таблицам в БД и сделать сравнение и потом выборку по условию?
13. Мелкий - 03 Августа, 2009 - 19:57:07 - перейти к сообщению
Pitmen пишет:
Обьясните плиз, как правильно подключится к двум таблицам в БД и сделать сравнение и потом выборку по условию?

Чего сравнивать хотите?
CODE (text):
скопировать код в буфер обмена
  1. select * from table1,table2 where t1.table1=t2.table2

Выберет все строки с совпадающими значениями полей t1 и t2.
14. Pitmen - 03 Августа, 2009 - 20:37:20 - перейти к сообщению
Мелкий пишет:
Pitmen пишет:
Обьясните плиз, как правильно подключится к двум таблицам в БД и сделать сравнение и потом выборку по условию?

Чего сравнивать хотите?
CODE (text):
скопировать код в буфер обмена
  1. select * from table1,table2 where t1.table1=t2.table2

Выберет все строки с совпадающими значениями полей t1 и t2.

Хочу сделать на форуме, phpBB вывод последних неотмеченых сообщений. Есть таблица куда они заносятся, и таблица где они все есть, вот хочу что бы выводились только те которых нет в таблице отмеченные, за подсказку спасибо, только вот как их потом вывести в цикле...?
15. Мелкий - 04 Августа, 2009 - 08:58:19 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $result = mysql_query("select * from table1,table2 where t1.table1=t2.table2")
  3. or die ("Ошибка запроса: ".mysql_error());
  4. while ($ant=mysql_fetch_array($res)) {
  5. /*здесь доступен ассоциативный массив $ant[], ключи - имена столбцов таблиц, значения - значение поля в этой строке.*/
  6. }
  7. ?>
  8.  


Pitmen пишет:
Есть таблица куда они заносятся, и таблица где они все есть, вот хочу что бы выводились только те которых нет в таблице отмеченные

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

 

Powered by ExBB FM 1.0 RC1