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 код. ПОЖАЛУЙСТА!!!

 PHP.SU

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


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

> Без описания
fatklass
Отправлено: 28 Августа, 2015 - 08:31:19
Post Id


Новичок


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


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




Добрый день, мои знания в php очень скудны. Помогите пожалуйста.
Появилась необходимость загрузить большое количество информации в mysql в процессе склеить значение из первого столбеца если такой уже есть, а во второй добавить содержимое из второго столбца склеиной строки через двойную запятую ",,", если во втором столбце уже встречается то не добавлять ничего. Подскажите пожалуйста как это можно сделать?
Пример имеется .txtовик с 2 колонками информация может быть любая не только то что в примере.
name;value;
Вася;Лентяй;
Вася;Бездельник;
Вася;Алкаш;
Вася;Красавчег;
Антон;Забияка;
Коля;Лентяй;
Вася;Синяк;
Валера;Бездельник;

Как импортировать из txt в таблицу в базе данных mysql и склеить чтобы в итоге получилось:
name;value
Вася;Лентяй,,Бездельник,,Алкаш,,Красавчег,,Синяк
Антон;Забияка
Коля;Лентяй
Валера;Бездельник

Что то такое пока получается.. тупо добавляет а вот как сделать проверки немогу..
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. $db['host']='localhost';
  4. $db['user']='12345';
  5. $db['pass']='12345';
  6. $db['db']='12345';
  7. $conn=@mysql_connect($db['host'],$db['user'],$db['pass']) or die("Ошибка Базы");
  8. $db=@mysql_select_db($db['db']) or die("Ошибка Базы");
  9. $thumb=file("file.txt");
  10. foreach($thumb as $key=>$val)
  11. {
  12. $ln = explode(";",$val);
  13. $ln[0] = strip_tags(trim($ln[0]));
  14. $ln[1] = strip_tags(trim($ln[1]));
  15. mysql_query("INSERT INTO text (name,value) VALUES ('".$ln[0]."','".$ln[1]."')");
  16. }      
  17. ?>


Помогите добавить проверку,
если значения $ln[0] нет в базе записываем $ln[0] и $ln[1]
если $ln[0] уже есть в базе а его $ln[1] нет в $ln[1] то записываем в $ln[1] через двойную запятую ",," если всеже уже есть в $ln[1] не добавляем ничего
 
 Top
Tyoma5891
Отправлено: 28 Августа, 2015 - 09:33:15
Post Id


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


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


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




бредовато немного, для чего такое нужно?
короче ладно есле я правильно понял, то вам нужно перед каждой вставкой доставать последнее значение value из таблицы text и проверять нету ли там текущего

(Отредактировано автором: 28 Августа, 2015 - 09:38:31)

 
 Top
fatklass
Отправлено: 28 Августа, 2015 - 09:48:14
Post Id


Новичок


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


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




Добавил проверку на то если нет значения добовляем, если есть не добавляем, а как сделать чтобы если есть, в name=$ln[0] а в value=$ln[1] нет то добовляем через ,, в value=$ln[1] ?
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.  
  4. $db['host']='localhost';
  5. $db['user']='12345';
  6. $db['pass']='12345';
  7. $db['db']='12345';
  8. $dat = date('Y-m-d');
  9. $conn=@mysql_connect($db['host'],$db['user'],$db['pass']) or die("Ошибка Базы");
  10. $db=@mysql_select_db($db['db']) or die("Ошибка Базы");
  11. mysql_set_charset('utf8',$dbi);
  12. $thumb=file("file.txt");
  13. foreach($thumb as $key=>$val)
  14. {
  15.      $ln = explode(";",$val);
  16.      $ln[0] = strip_tags(trim($ln[0]));
  17.      $ln[1] = strip_tags(trim($ln[1]));
  18.         $check = 'SELECT * FROM `text` WHERE `name` = "'.$ln[0].'" LIMIT 1';
  19.         $cnt = mysql_query ($check, $conn);
  20.         if(mysql_num_rows($cnt) === 1){
  21. echo "est ";
  22. echo 'ln: '.$ln[0];
  23. echo ' ln: '.$ln[1];
  24. echo '<br>';
  25.  
  26. }
  27.  
  28. else{
  29. echo "net ";
  30. echo 'ln: '.$ln[0];
  31. echo ' ln: '.$ln[1];
  32. echo '<br>';
  33. mysql_query("INSERT INTO text (name,value) VALUES ('".$ln[0]."','".$ln[1]."')");
  34.  
  35. }
  36. }
  37. ?>
  38.  

(Добавление)
Tyoma5891 пишет:
бредовато немного, для чего такое нужно?
короче ладно есле я правильно понял, то вам нужно перед каждой вставкой доставать последнее значение value из таблицы text и проверять нету ли там текущего


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

- Проверить есть ли name из txt в базе
--если нет, добовляем name и value
--если есть, такой name то
---проверяем есть ли такой же value=value если есть не добовляем, если нет добовляем к его value через ,,

Вообще хз как проверить value=value
Ведь если даже получится 1 раз обновить значение value до к примеру до name;value - Вася;Лентяй,,Бездельник
то при следующей проверке когда будут добовляться Вася;Лентяй; добавится сново и получится уже Вася;Лентяй,,Бездельник,,Лентяй
А надо чтобы не добавлял в таком случае.. что то я вообще запутался..((((

(Отредактировано автором: 28 Августа, 2015 - 10:11:54)

 
 Top
andrewkard
Отправлено: 28 Августа, 2015 - 10:27:11
Post Id


Участник


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


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




fatklass пишет:
то при следующей проверке когда будут добовляться Вася;Лентяй; добавится сново и получится уже Вася;Лентяй,,Бездельник,,Лентяй
А надо чтобы не добавлял в таком случае.. что то я вообще запутался..((((


Вытаскиваете value по name и проверяйте так, к примеру:
PHP:
скопировать код в буфер обмена
  1.  
  2. $name = 'Вася';
  3. $value = 'Лентяй,,Бездельник';
  4. $test_value = 'Лентяй';
  5. $arr_value = explode(',,',$value);
  6. if (in_array($test_value,$arr_value)){
  7.     echo 'Значение найдено';
  8. } else {
  9.     $query = 'UPDATE table SET';
  10. }
  11.  
 
 Top
fatklass
Отправлено: 28 Августа, 2015 - 10:28:05
Post Id


Новичок


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


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




PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. $db['host']='localhost';
  4. $db['user']='12345';
  5. $db['pass']='12345';
  6. $db['db']='12345';
  7. $dat = date('Y-m-d');
  8. $conn=@mysql_connect($db['host'],$db['user'],$db['pass']) or die("Ошибка Базы");
  9. $db=@mysql_select_db($db['db']) or die("Ошибка Базы");
  10. mysql_set_charset('utf8',$dbi);
  11. $thumb=file("file.txt");
  12. foreach($thumb as $key=>$val)
  13. {
  14.      $ln = explode(";",$val);
  15.      $ln[0] = strip_tags(trim($ln[0]));
  16.      $ln[1] = strip_tags(trim($ln[1]));
  17.         $check = 'SELECT `name` FROM `text` WHERE `name` = "'.$ln[0].'" LIMIT 1';
  18.         $cnt = mysql_query ($check, $conn);
  19.         if(mysql_num_rows($cnt) === 1){
  20. echo "est ";
  21. echo 'ln: '.$ln[0];
  22. echo ' ln: '.$ln[1];
  23. echo '<br>';
  24. $check2 = 'SELECT `name` FROM `text` WHERE `value` = "'.$ln[1].'" LIMIT 1';
  25. $cnt2 = mysql_query ($check2, $conn);
  26. if(mysql_num_rows($cnt) === 1){
  27. $check3 = 'UPDATE `text` SET `value`="'.$ln[1].'" WHERE `name` = "'.$ln[0].'"';
  28. mysql_query ($check3, $conn);
  29. }
  30. }
  31.  
  32. else{
  33. echo "net ";
  34. echo 'ln: '.$ln[0];
  35. echo ' ln: '.$ln[1];
  36. echo '<br>';
  37. mysql_query("INSERT INTO text (name,value) VALUES ('".$ln[0]."','".$ln[1]."')");
  38.  
  39. }
  40. }
  41. ?>


В общем вот так как то, теперь если есть name то обновляет значение value, а как сделать чтобы к существующему через ,, добавляло?

(Отредактировано автором: 28 Августа, 2015 - 10:28:24)

 
 Top
Panoptik
Отправлено: 28 Августа, 2015 - 10:31:49
Post Id



Постоянный участник


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


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




насколько я понял вы хотите получить строку
Вася Забияка,,Красавчег,,Молодец
Петя Молоток
Антон Чтотоеще

я бы порекомендовал записывать данные по отдельности без конкатенкции
создайте в таблице поле id автоинкремент и записывайте так же как и у вас в текстовике

то есть получится что-то типа
1 Вася Лентяй
2 Вася Бездельник
3 Вася Алкаш
4 Вася Красавчег
5 Антон Забияка
6 Коля Лентяй
7 Вася Синяк
8 Валера Бездельник

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


-----
Just do it
 
 Top
fatklass
Отправлено: 28 Августа, 2015 - 11:06:23
Post Id


Новичок


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


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




andrewkard пишет:
fatklass пишет:
то при следующей проверке когда будут добовляться Вася;Лентяй; добавится сново и получится уже Вася;Лентяй,,Бездельник,,Лентяй
А надо чтобы не добавлял в таком случае.. что то я вообще запутался..((((


Вытаскиваете value по name и проверяйте так, к примеру:
PHP:
скопировать код в буфер обмена
  1.  
  2. $name = 'Вася';
  3. $value = 'Лентяй,,Бездельник';
  4. $test_value = 'Лентяй';
  5. $arr_value = explode(',,',$value);
  6. if (in_array($test_value,$arr_value)){
  7.     echo 'Значение найдено';
  8. } else {
  9.     $query = 'UPDATE table SET';
  10. }
  11.  


PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. $db['host']='localhost';
  4. $db['user']='12345';
  5. $db['pass']='12345';
  6. $db['db']='12345';
  7. $conn=@mysql_connect($db['host'],$db['user'],$db['pass']) or die("Ошибка Базы");
  8. $db=@mysql_select_db($db['db']) or die("Ошибка Базы");
  9. mysql_set_charset('utf8',$dbi);
  10. $thumb=file("file.txt");
  11. foreach($thumb as $key=>$val)
  12. {
  13.      $ln = explode(";",$val);
  14.      $ln[0] = strip_tags(trim($ln[0]));
  15.      $ln[1] = strip_tags(trim($ln[1]));
  16.         $check = 'SELECT `name` FROM `text` WHERE `name` = "'.$ln[0].'" LIMIT 1'; //Если NAME
  17.         $cnt = mysql_query ($check, $conn);
  18.         if(mysql_num_rows($cnt) === 1){ //NAME Есть
  19. echo "est ";
  20. echo 'ln: '.$ln[0];
  21. echo ' ln: '.$ln[1];
  22. echo '<br>';
  23.  
  24. $check2 = 'SELECT `name` FROM `text` WHERE `value` = "'.$ln[1].'" LIMIT 1'; //Если VALUE
  25. $cnt2 = mysql_query ($check2, $conn);
  26. if(mysql_num_rows($cnt) === 1){ //VALUE Есть
  27. $check3 = 'UPDATE `text` SET `value`=concat(`value`, ",,", "'.$ln[1].'") WHERE `name` = "'.$ln[0].'"';
  28. mysql_query ($check3, $conn);
  29.            
  30. }
  31. } else {
  32. echo "net ";
  33. echo 'ln: '.$ln[0];
  34. echo ' ln: '.$ln[1];
  35. echo '<br>';
  36. mysql_query("INSERT INTO text (name,value) VALUES ('".$ln[0]."','".$ln[1]."')");
  37.  
  38. }
  39. }
  40. ?>


В общем вроде бы все получилось осталось прикрутить, вашу проверку помогите пожалуйста.
А то сейчас при повторной встречи хотя бы 1 повторения заного добавляет все Недовольство, огорчение
Скриншот (Отобразить)

(Отредактировано автором: 28 Августа, 2015 - 11:14:31)

 
 Top
andrewkard
Отправлено: 28 Августа, 2015 - 11:43:11
Post Id


Участник


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


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




fatklass
Код не проверял:
PHP:
скопировать код в буфер обмена
  1.  
  2.     $ln = explode(";",$val);
  3.     $ln[0] = strip_tags(trim($ln[0]));
  4.     $ln[1] = strip_tags(trim($ln[1]));
  5.     $check = 'SELECT `value` FROM `text` WHERE `name` = "'.$ln[0].'" LIMIT 1'; //Если NAME
  6.     $cnt = mysql_query ($check, $conn);
  7.     if(mysql_num_rows($cnt) === 1){ //NAME Есть
  8.         $result = mysql_fetch_row($cnt);
  9.         $value = $result[1];
  10.         $test_value = $ln[1];
  11.         $arr_value = explode(',,',$value);
  12.         if (in_array($test_value,$arr_value)){
  13.             echo 'Значение найдено';
  14.         } else {
  15.             $check3 = 'UPDATE `text` SET `value`=concat(`value`, ",,", "'.$ln[1].'") WHERE `name` = "'.$ln[0].'"';
  16.             mysql_query ($check3, $conn);
  17.         }
  18.     } else {
  19.         echo "net ";
  20.         echo 'ln: '.$ln[0];
  21.         echo ' ln: '.$ln[1];
  22.         echo '<br>';
  23.         mysql_query("INSERT INTO text (name,value) VALUES ('".$ln[0]."','".$ln[1]."')");
  24.  
  25.     }
  26.  

(Отредактировано автором: 28 Августа, 2015 - 11:45:35)

 
 Top
fatklass
Отправлено: 28 Августа, 2015 - 12:03:06
Post Id


Новичок


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


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




andrewkard пишет:

Код не проверял:

все равно добавляет в базу все Недовольство, огорчение(

(Отредактировано автором: 28 Августа, 2015 - 12:32:42)

 
 Top
DelphinPRO
Отправлено: 28 Августа, 2015 - 12:36:38
Post Id



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


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


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




А как будут потом использоваться данные из БД?
Хранение данных в поле через запятую наводит на мысль о неправильной организации базы данных.


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
fatklass
Отправлено: 28 Августа, 2015 - 12:49:15
Post Id


Новичок


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


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




DelphinPRO пишет:
А как будут потом использоваться данные из БД?
Хранение данных в поле через запятую наводит на мысль о неправильной организации базы данных.


Напрямую из sql они использоваться не будут. Это нужно только для структурирования информации, порядка 20гб текста надо как то фильтрануть, и подогнать в приемлемый вид для дальнейшего использования.
 
 Top
andrewkard
Отправлено: 28 Августа, 2015 - 12:57:58
Post Id


Участник


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


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




fatklass пишет:
все равно добавляет в базу все

Код отработал без ошибок?
Измените:

на
 
 Top
DelphinPRO
Отправлено: 28 Августа, 2015 - 12:59:46
Post Id



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


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


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




fatklass пишет:
использоваться не будут.
fatklass пишет:
для дальнейшего использования.
Не понял


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
fatklass
Отправлено: 28 Августа, 2015 - 13:04:33
Post Id


Новичок


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


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




Вот рабочий.

PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.  
  4. $db['host']='localhost';
  5. $db['user']='12345';
  6. $db['pass']='12345';
  7. $db['db']='12345';
  8. $dat = date('Y-m-d');
  9. $conn=@mysql_connect($db['host'],$db['user'],$db['pass']) or die("Ошибка Базы");
  10. $db=@mysql_select_db($db['db']) or die("Ошибка Базы");
  11. mysql_set_charset('utf8',$dbi);
  12. $thumb=file("file.txt");
  13. foreach($thumb as $key=>$val)
  14. {
  15.    $ln = explode(";",$val);
  16.     $ln[0] = strip_tags(trim($ln[0]));
  17.     $ln[1] = strip_tags(trim($ln[1]));
  18.     $check = 'SELECT `name`, `value` FROM `text` WHERE `name` = "'.$ln[0].'" LIMIT 1'; //Если NAME
  19.     $cnt = mysql_query ($check, $conn);
  20.        
  21.            if(mysql_num_rows($cnt) === 1){ //NAME Есть
  22.         $result = mysql_fetch_row($cnt);
  23.                
  24.         $value = $result[1];
  25.         $test_value = $ln[1];
  26.         $arr_value = explode(',,',$value);
  27.         if (in_array($test_value,$arr_value)){
  28.             echo "Значение найдено";
  29.         } else {
  30.             $check3 = 'UPDATE `text` SET `value`=concat(`value`, ",,", "'.$ln[1].'") WHERE `name` = "'.$ln[0].'"';
  31.             mysql_query ($check3, $conn);
  32.         }
  33.     } else {
  34.         echo "net ";
  35.         echo 'ln: '.$ln[0];
  36.         echo ' ln: '.$ln[1];
  37.         echo '<br>';
  38.         mysql_query("INSERT INTO text (name,value) VALUES ('".$ln[0]."','".$ln[1]."')");
  39.  
  40.     }
  41. }
  42.  
  43.  
  44. ?>
  45.  

Я невнимательный забыл `value` в select добавить
PHP:
скопировать код в буфер обмена
  1.  
  2. $check = 'SELECT `name`, `value` FROM `text` WHERE `name` = "'.$ln[0].'" LIMIT 1'; //Если NAME
  3.  

т.к. дальше его же используем Улыбка


Спасибо всем откликнувшимся! Особая благодарность: andrewkard

(Отредактировано автором: 28 Августа, 2015 - 13:12:22)

 
 Top
Panoptik
Отправлено: 28 Августа, 2015 - 13:44:40
Post Id



Постоянный участник


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


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




нус, ждем того момента когда вы придете с вопросом как выдрать данные из этой кучки данных в бд


-----
Just do it
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Напишите за меня, пожалуйста »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB