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

Форум MySQL

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

 

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

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

тема: При разборе файла, не заносятся данные в базу данных
 
 автор: OLi   (26.03.2011 в 16:20)   письмо автору
 
 

Читаю построчно файл и каждую строку заношу в базу...Не заносится
header('Content-type: text/html;charset=utf-8');
include("modules/db.php");
$fp = fopen("cat.txt", "r"); // Открываем файл в режиме чтения
if ($fp)
{
while (!feof($fp))
{
$mytext[] = fgets($fp, 999);

}


}
else echo "Ошибка при открытии файла";
fclose($fp);
for ($i=0; $i<count($mytext);$i++){
$menucat=mysql_query("SELECT max(cat) as mx FROM `categories`");
if($menucat==true) {
if (mysql_num_rows($menucat)>0) {
$cats=mysql_fetch_array($menucat);


echo $ct=$cats['mx'];

$menucat2=mysql_query("INSERT INTO categories (cat,title) VALUES('".$ct."','".$mytext[$i]."')");
if ($menucat2!==false) {echo mysql_error();}
}}
$i++;

}

  Ответить  
 
 автор: cheops   (26.03.2011 в 16:32)   письмо автору
 
   для: OLi   (26.03.2011 в 16:20)
 

Какие-то ошибки возвращаются? Если да, то помимо mysql_error() выведите еще сам запрос.

PS Скорее всего у вас в какой-то из переменной $ct или $mytext[$i] есть одиночные кавычки. Когда вы перебрасываете данные из файла в базу данных или из базы данных в базу данных - переменные нужно обязательно обрабатывать mysql_escape_string() или addslashes().

  Ответить  
 
 автор: OLi   (26.03.2011 в 16:48)   письмо автору
 
   для: cheops   (26.03.2011 в 16:32)
 

и даже код 
[code]for ($i=0; $i<count($mytext);$i++){
    


echo $mytext[$i];
$i++;

}

Выводит из файла не все строки...
Сделал print_r($mytext)
Вывело:
Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 [6] => 7 )
Не понятно почему занес в массив не все строки

Вот отредактированный текст:

<?php
header
('Content-type: text/html;charset=utf-8');
include(
"modules/db.php");
$fp fopen("cat.txt""r"); // Открываем файл в режиме чтения
if ($fp
{
while (!
feof($fp))
{
$mytext[] = fgets($fp999);

}


}
else echo 
"Ошибка при открытии файла";
fclose($fp);

for (
$i=0$i<count($mytext);$i++){
    
$menucat=mysql_query("SELECT max(cat) as mx FROM `categories`");
                if(
$menucat==true) {
                if (
mysql_num_rows($menucat)>0) {
            
$cats=mysql_fetch_array($menucat);    
            

        
$ct=$cats['mx'];

$menucat2=mysql_query("INSERT INTO categories (cat,title) VALUES('".++$ct."','".addslashes($mytext[$i])."')");
if (
$menucat2!==false) {echo mysql_error();}
            }}

$i++;

}


?>
[/code]

  Ответить  
 
 автор: OLi   (26.03.2011 в 19:56)   письмо автору
 
   для: OLi   (26.03.2011 в 16:48)
 

Сделал лучше:
<?php
header
('Content-type: text/html;charset=utf-8');
include(
"modules/db.php");
$mytext file("cat.txt");


foreach (
$mytext as $key){
$menucat=mysql_query("SELECT max(pod_cat) as mx FROM `pod_categories`");
if(
$menucat==true) {
if (
mysql_num_rows($menucat)>0) {
$cats=mysql_fetch_array($menucat);    
$ct=++$cats['mx'];
echo 
$key."<br>";
$menucat2=mysql_query("INSERT INTO `pod_categories` (pod_cat,cat,title) VALUES('".$ct."',6,'".addslashes($key)."')");

}}


}

?>


Английский текст заносит в title а русский нет....Подскажите в чем может быть сложность?

  Ответить  
 
 автор: cheops   (26.03.2011 в 19:58)   письмо автору
 
   для: OLi   (26.03.2011 в 19:56)
 

Запрос вообще не срабатывает? Проверьте при помощи mysql_error() выводится ли какая-нибудь ошибка?

  Ответить  
 
 автор: OLi   (26.03.2011 в 20:45)   письмо автору
 
   для: cheops   (26.03.2011 в 19:58)
 

Срабатывает запрос....и select и insert не вставляет только в поле title

  Ответить  
 
 автор: cheops   (26.03.2011 в 20:50)   письмо автору
 
   для: OLi   (26.03.2011 в 16:48)
 

Вероятно дело в UTF-8, дело в том, что addslashes() работает с однобайтовыми кодировками, вероятно нужно искать аналог среди расширения mb_string, которое поддерживает многобайтовые кодировки.

  Ответить  
 
 автор: OLi   (26.03.2011 в 21:55)   письмо автору
 
   для: cheops   (26.03.2011 в 20:50)
 

Да дело в кодировке..изменил кодировку на cp1251_bin занесло в базу...но теперь на сайте отображаются вопросы вместо текста...а все переделывать в cp1251_bin уже нет смысла...как быть?

  Ответить  
 
 автор: cheops   (26.03.2011 в 22:08)   письмо автору
 
   для: OLi   (26.03.2011 в 21:55)
 

Тут есть два пути:
1) Если у вас в таблицах базы данных, информация в кодировке cp1251 и таблицы помечены этой кодировкой, то вы можете получить из них utf8, если при соединении с базой данных укажите в качестве кодировки соединения UTF8
SET NAMES utf8

2) Вы можете получить таблицы и данные в ней в кодировке utf8, если пометите таблицы кодировкой utf8, а заполняя их данными в Win-1251, укажите в качестве соединения кодировку cp1251
SET NAMES cp1251

В обоих случаях СУБД MySQL должна корректно перекодировать данные при поступлении их из вне, и перед выдачей данных во вне.

  Ответить  
 
 автор: OLi   (26.03.2011 в 22:29)   письмо автору
 
   для: cheops   (26.03.2011 в 22:08)
 

в замешательстве....у меня в базе все в utf8_general_ci
SET NAMES utf8 указано
Фишка в том что если в запрос вставить так же текст русский
$menucat2=mysql_query("INSERT INTO `pod_categories` (pod_cat,cat,title) VALUES('".$ct."',6,'шли по городу')");
То в title запишет....почему же тогда $key (строку не записывает)

  Ответить  
 
 автор: cheops   (26.03.2011 в 23:42)   письмо автору
 
   для: OLi   (26.03.2011 в 22:29)
 

Файл cat.txt в какой кодировке?

  Ответить  
 
 автор: OLi   (27.03.2011 в 04:01)   письмо автору
 
   для: cheops   (26.03.2011 в 23:42)
 

Не знаю...в блокноте написанный

  Ответить  
 
 автор: cheops   (27.03.2011 в 11:04)   письмо автору
 
   для: OLi   (27.03.2011 в 04:01)
 

Понятно, в любом случае utf-8 там не пахнет, блокнот поддерживает только win-1251 и UNICODE. Вам нужно перекодировать строки, получаемые из файла, а лучше сам файл перед разбором перекодировать в utf-8.

  Ответить  
Rambler's Top100
вверх

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