Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: ввод и вывод объявлений группой в базе данных с их подсчетом
 
 автор: ronin   (04.09.2006 в 14:00)   письмо автору
 
 

К примеру имеется страница администрирования, где можно ввести объявления "$text" в базу Мускул, обявлений много, и их нужно вводить группой (то 5 до 40 штук), в каждую рубрику $rubrica.
Я ввожу эти объявления, выбираю рубрику и как мне подсчитать количество объявлений при выводе их из базы, учитывая, то что они вносятся группой?(Объявления начинаются с большой буквы и заканчиваются точкой).
Мне советовали использовать $laObyav=explode('.', $lcContent); , но как это соеденить с кодом ввода, или может кто посоветует мануал по данной теме, заранее благодарю
Это ввод

$query = "insert into table ( text,rubrica) values 
('".$text."', '".$rubrica."' )"; 

Это вывод

$result = mysql_query("SELECT text, rubrica FROM table WHERE rubrica= '".$_GET['rubrica']."' ORDER BY LIMIT $start, $num");  

Это подсчет , если бы объявления вносились отдельно:

$result = mysql_query("SELECT * FROM table WHERE rubrica= '".$_GET['rubrica']."' 
$num_results = mysql_num_rows($result); 
echo Количество объявлений : '.$num_results.'';?>


   
 
 автор: cheops   (04.09.2006 в 14:35)   письмо автору
 
   для: ronin   (04.09.2006 в 14:00)
 

Не очень понятна структура хранения текста в базе данных? Под каждое объявление отводится своя запись или нет?

   
 
 автор: ronin   (04.09.2006 в 15:54)   письмо автору
 
   для: cheops   (04.09.2006 в 14:35)
 

Это наверно наилучший вариант, когда под каждое объявление выделяется запись, но тогда нужно объявления разбить при вводе в базу, Имееться ли решение? Спасибо!

   
 
 автор: Trianon   (04.09.2006 в 18:35)   письмо автору
 
   для: ronin   (04.09.2006 в 15:54)
 

Если их все равно приходится разбивать при выводе, а значит метод разбиения не представляет трудности, то почему это не сделать сразу при вводе?
Потом с даными будет легче работать.

   
 
 автор: ronin   (05.09.2006 в 10:19)   письмо автору
 
   для: Trianon   (04.09.2006 в 18:35)
 

Согласен, но как разбить перед вводом?

   
 
 автор: ronin   (04.09.2006 в 18:16)   письмо автору
 
   для: cheops   (04.09.2006 в 14:35)
 

Согласен, но как разбить при вводе?

   
 
 автор: ronin   (05.09.2006 в 13:04)   письмо автору
 
   для: ronin   (04.09.2006 в 18:16)
 

Помогите! Help! Anybody!!!

   
 
 автор: Trianon   (05.09.2006 в 13:26)   письмо автору
 
   для: ronin   (05.09.2006 в 13:04)
 

Пример добавляемого текста с группой объявлений можно увидеть?

   
 
 автор: ronin   (05.09.2006 в 15:55)   письмо автору
 
   для: Trianon   (05.09.2006 в 13:26)
 


$query = "insert into table ( text,rubrica) values  
('".$text."', '".$rubrica."' )";  

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

   
 
 автор: ronin   (06.09.2006 в 11:06)   письмо автору
 
   для: ronin   (05.09.2006 в 15:55)
 

Люди помогите!!!!

   
 
 автор: Trianon   (06.09.2006 в 12:12)   письмо автору
 
   для: ronin   (06.09.2006 в 11:06)
 

Вы пример объявлений приведете, наконец, или нет?

   
 
 автор: ronin   (06.09.2006 в 13:12)   письмо автору
 
   для: Trianon   (06.09.2006 в 12:12)
 

Я прошу прощение, человек меня подвел, в тексте может быть несколько точек, т.е. объявления нужно разделять по-другому, к примеру знаком "снежинка"
привожу объявления (на украинском языке):
Терміново!
Офіційне представництво англійської компанії "Брізар" оголошує набір працівників: секретар, менеджер зі збуту, експедитор, вантажник, кур'єр. Оплата 720‑2300 грн. Тел. 244‑86‑91
асистента керівника, комунікабельна, відповідальна, презентабельна, вік до 30р., ДР до 3р., ВО, знання польської мови, ПК, оргтехніки. Тел. 224‑71‑24 (Оксана), 297‑55‑82, so_mk@ukr.net
діловода, знання ПК. Тел. 244‑86‑71, (067) 587‑15‑55
офіс‑менеджер, в/о, 23 р., знання ПК, укр. і рос. ‑ досконало, франц. і англ. ‑початковий рівень. Тел. 222‑90‑85
офіс‑менеджера зі знанням швейного в‑ва, комунікабельність, знання ПК на рівні користувача. Тел. 52‑28‑10, вул. Б.Хмельницького, 109
помічника секретаря‑референта з перспективою кар'єрного росту, при відсутності д/р ‑ платне навчання з подальшим працевлаштуванням, вік до 35 р., з/п від 300 грн. Тел. 241‑76‑36
секретар (графік позмінно+ставка+обід), вік від 20‑25 р., в/о або незак., або серед, д/р від 0,5 р., знання основ діловодства, робота з ПК (Word, Excel, Internet, e‑mail), вільне володіння укр. та рос. мовами, приємна зовнішність, комунікабельність, виконавчість, відповідальність, почуття гумору, резюме з поміткою посади направляти. Тел. 244‑71‑96, 244‑71‑97, personal@mi100.lviv.ua
секретаря. Тел. 292‑08‑00

   
 
 автор: Trianon   (06.09.2006 в 13:22)   письмо автору
 
   для: ronin   (06.09.2006 в 13:12)
 

Что-то не видно в этом тексте никаких снежинок.
Если у Вас не будет четкого признака разделения объявлений, Вы врядли что сможете сделать.

   
 
 автор: ronin   (06.09.2006 в 17:35)   письмо автору
 
   для: Trianon   (06.09.2006 в 13:22)
 

у меня сейчас стоит опенофис(временно, из-за проверки) и я не могу заменит как в ворде спец символ абзаца на звездочку, но представим себе, что все объявления заканчиваються звездочками, извиняюсь за задержку - здавался номер нашей газеты.

   
 
 автор: Trianon   (06.09.2006 в 17:53)   письмо автору
 
   для: ronin   (06.09.2006 в 17:35)
 

Если Вам всё равно на что менять этот самый абзац - замените на строку символов, которая заведомо не встретится. Допустим, на =##=
А потом в скрипте разбейте текст с помощью функции explode на отдельные объявления.

$list  = explode('=##=', $alltext);
foreach($list as $n => $text)
  echo "<br>$n. " .trim($text);

   
 
 автор: ronin   (06.09.2006 в 18:56)   письмо автору
 
   для: Trianon   (06.09.2006 в 17:53)
 

Я прошу прощения, я не очень силен в программировании, не могли бы Вы соединить Ваше решение со скриптом ввода. Я извиняюсь за то что Вас замучил, у меня сегодня был тяжелый день, я торможу:)
ВВод:

$query = "insert into table ( text,rubrica) values  
('".$text."', '".$rubrica."' )";  

   
 
 автор: Trianon   (06.09.2006 в 19:08)   письмо автору
 
   для: ronin   (06.09.2006 в 18:56)
 

Видимо, нужно будет сделать как-то так:

$an_list  = explode('=##=', $text); 
foreach($an_list as $n => $anno) 
    $an_list[$n] = "('".trim($anno). "','$rubrica')";
$an_list = implode(',', $an_list);
$query = "insert into table ( text,rubrica) values  $an_list";

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

   
 
 автор: Trianon   (06.09.2006 в 19:13)   письмо автору
 
   для: Trianon   (06.09.2006 в 19:08)
 

Только учтите:
1. Вообще-то апострофы и некоторые другие спецсимволы надо экранировать. Во всяком случае, если это не предусмотрено, скрипт будет работать неправильно. Впрочем, как и исходный вариант.
2. если Вы использовали после запроса функцию mysql_insert_id() - логику скрипта нужно будет исправить, т.к. теперь объявления добавляются пачками и mysql_insert_id() вернет номер первой строки из пачки.

   
 
 автор: ronin   (06.09.2006 в 19:30)   письмо автору
 
   для: Trianon   (06.09.2006 в 19:08)
 

я никак не могу разобраться, тут еще структура таблицы
CREATE TABLE `table` (
`id` int(10) unsigned NOT NULL auto_increment,
`text` text,
`rubrica` int(10) NOT NULL default '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM ;
я бегу домой завтра с утреца с новыми силами.
Column count doesn't match value count at row 1 у меня выскакивает, когда пытаюсь.
Спасибо я чувствую вот вот получиться, Еще раз спасибо!

   
 
 автор: Trianon   (06.09.2006 в 19:44)   письмо автору
 
   для: ronin   (06.09.2006 в 19:30)
 

Попробуйте всё же добавить экранирование.

$an_list  = explode('=##=', $text);  
foreach($an_list as $n => $anno)  
    $an_list[$n] = "('".mysql_escape_string(trim($anno)). "',$rubrica)"; 
$an_list = implode(',', $an_list); 
$query = "insert into table ( text,rubrica) values  $an_list";

   
 
 автор: ronin   (07.09.2006 в 11:13)   письмо автору
 
   для: Trianon   (06.09.2006 в 19:44)
 

Ура работает!!!!! СПАСИБО!!!
ВВод!! А вывод пустой, бабене шеф!

$result = mysql_query("SELECT * FROM table  WHERE  rubrica = '".(int)$_GET['rubrica']."'");
$posts = mysql_num_rows($result);?>

Не работает количество объявлений?! т.е показывает ноль сдесь, а на первой странице показывает реальное количество!?

$result = mysql_query("SELECT * FROM table  WHERE rubrica = 1");

$num_results = mysql_num_rows($result);


$result = mysql_query("SELECT id, text FROM table  WHERE rubrica= '".$_GET['rubrica']."' ORDER BY  id DESC LIMIT $start, $num");  

Пожалуйста помогите!

   
 
 автор: Trianon   (07.09.2006 в 11:25)   письмо автору
 
   для: ronin   (07.09.2006 в 11:13)
 

количество объявлений определяется так:

$rubrica = intval($_GET['rubrica']);
$sql = "SELECT COUNT(id) FROM table WHERE rubrica = $rubrica" ;
$res = mysql_query($sql) or die("Error in $sql<br>". mysql_error());
$posts = mysql_result($res, 0);
echo "$posts объявлений в рубрике $rubrica";

   
 
 автор: ronin   (07.09.2006 в 12:06)   письмо автору
 
   для: Trianon   (07.09.2006 в 11:25)
 

0 объявлений в рубрике 0
в то время как в базе их 6, и на первой странице показывает 6

   
 
 автор: Trianon   (07.09.2006 в 12:19)   письмо автору
 
   для: ronin   (07.09.2006 в 12:06)
 

Ок.

$rubrica = intval($_GET['rubrica']); 
$sql = "SELECT COUNT(id) FROM table";
if($rubrica) 
  $sql .= " WHERE rubrica = $rubrica" ; 
$res = mysql_query($sql) or die("Error in $sql<br>". mysql_error()); 
$posts = mysql_result($res, 0); 
echo "$posts объявлений "
if($rubrica) 
  echo " в рубрике $rubrica"; 
else 
  " во всех рубриках";

   
 
 автор: ronin   (07.09.2006 в 12:35)   письмо автору
 
   для: Trianon   (07.09.2006 в 12:19)
 

Мне очень стыдно все работает, у меня была механическая ошибка на первой странице в гиперессылке на страницу вывода. Извините, Т.е. тот кода вывода, что у меня был, и который я в прошлом взял на этом форуме - работает, Господин Trianon Вы меня очень выручили, так как я боялся, что не смогу разбить объявления при вводе в базу. Большое человеческое спасибо!!!

   
 
 автор: ronin   (08.09.2006 в 10:45)   письмо автору
 
   для: ronin   (07.09.2006 в 12:35)
 

Тут одна проблемка выскочила: при заносе в базу (мускул), к примеру от 8 до 100 объявлений, одно поле в базе остается пустым, и php видит это поле и считает, что объявление есть, но само поле пустое, ни знака, ничего. Если заходишь в поле, и вручную заполняешь - все о кей - выводиться, видимо при вносе какой-то глюк. Помогите.Спасибо!

   
 
 автор: cheops   (08.09.2006 в 12:39)   письмо автору
 
   для: ronin   (08.09.2006 в 10:45)
 

Соложно сказать без кода, но скорее всего срабатывает лишняя итерация цикла - при формировании запроса на вставку попробуйте вывести его в окно браузера.

   
 
 автор: ronin   (08.09.2006 в 12:59)   письмо автору
 
   для: cheops   (08.09.2006 в 12:39)
 


$an_list  = explode('=##=', $text);   
foreach($an_list as $n => $anno)   
    $an_list[$n] = "('".mysql_escape_string(trim($anno)). "',$rubrica)";  
$an_list = implode(',', $an_list);  
$query = "insert into table ( text,rubrica) values  $an_list"; 

А как вывести в окно браузера?

   
 
 автор: Trianon   (08.09.2006 в 12:58)   письмо автору
 
   для: ronin   (08.09.2006 в 10:45)
 


$an_list  = explode('=##=', $text);   
$query = "insert into table ( text,rubrica) values"; 
$sep = ' ';
foreach($an_list as $n => $anno)   
{
  $anno = trim($anno);
  if(!empty($anno))
  {
    $anno = mysql_escape_string($anno);
    $query .= "\r\n$sep('$anno', $rubrica)";
    $sep = ',';
  } 
}

далее mysql_query($query) и т.д.

   
 
 автор: ronin   (08.09.2006 в 13:56)   письмо автору
 
   для: Trianon   (08.09.2006 в 12:58)
 


an_list  = explode('=##=', $text); 

выдает
Parse error: parse error, unexpected '=' in y:\home\localhost\www\znr\insert_info.php on line 63
А в предыдущем варианте и первое и последнее поле из группы - пустые.

   
 
 автор: Trianon   (08.09.2006 в 13:59)   письмо автору
 
   для: ronin   (08.09.2006 в 13:56)
 

$ куда делся?

   
 
 автор: ronin   (08.09.2006 в 14:19)   письмо автору
 
   для: Trianon   (08.09.2006 в 13:59)
 

Бить меня некому:) Все работает! СПАСИБО!!!

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования