Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Показать сообщение отдельно
Kaleos
2 / 2 / 0
Регистрация: 12.02.2013
Сообщений: 73
06.05.2013, 11:45  [ТС]

Чтение из текстового файла в массив, проверка на дубликаты из таблицы БД, и вставка в таблицу БД

06.05.2013, 11:45. Просмотров 2378. Ответов 19
Метки (Все метки)

Ответ

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

PHP
1
2
3
4
5
6
7
8
9
'".$arrM[0]."',
'".$arrM[1]."',
'".$arrM[2]."', 
'".$arrM[3]."',
'".$arrM[4]."',
'".$arrM[5]."',
'".$arrM[6]."',
'".$arrM[7]."',
'".$arrM[8]."'
В базу вставляются кракозябры, проблемы с кодировкой, еще не разобрался. Сталкнулся еще с проблемой:

Проблема появляется здесь:
PHP
1
2
$num_rows = mysql_num_rows($result);
if($num_rows == 0);
Здесь debuger показывает что $num_rows всегда 0 при каждой итерации, хотя в текст файле есть строки которых нет в таблице БД. Т.е если num_rows = 0 - строки из текст. файла в таблице БД нет, и далее она вставляется, если больше 0 то значит строка из текст.файла есть в БД, и далее игнорируется insert. В эксперимент-м текс. файле у меня разные вариаты, т.е $num_rows должен показывать разные значения, а он только 0.

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
<html>
    <head>
    <title>Чтение из текстовых файлов</title>
    </head>
    <body>
        <?php
            $hostname = "localhost"; 
            $username = "root"; 
            $password = "xxxxxx"; 
            $dbName = "names_groups";
            
            //Открытие файла для чтения данных
            $f = fopen("g:\names.txt", "r");
            
            mysql_connect($hostname,$username,$password) OR DIE("Не могу создать соединение ");
            mysql_select_db($dbName) or die(mysql_error());
 
            // Читать построчно до конца файла
            while (!feof($f)) 
            {
            // Создать массив запятая-разделитель
                $arrM = explode(",",fgets($f));
                //Запрос, проверка существует ли запись в таблице names БД names_groups, где поля date, name1, name2 равны значениям массива
                $query_select = "select * from `names` where `date` = $arrM[1]  and name1 = $arrM[3] and name2 = $arrM[4]";
                echo "<br>------------------<br>".$query_select."<br>------------------<br>";
                $result=mysql_query($query_select);
                echo "<br>------------------<br>".mysql_error()."<br>------------------<br>";
                         
                $num_rows = mysql_num_rows($result);
                echo $num_rows."--------";
                //Если такой записи нет то вствляем запись(стороку из текст. файла) в таблицу names
                if($num_rows == 0)
                { 
                    $query_insert="insert into `names` (fk_idgroup, `date`, `time`, name1, name2, sum1, sum2, sum2, sum4) 
                    values 
                        (
                            $arrM[0],
                            $arrM[1],
                            $arrM[2], 
                            $arrM[3],
                            $arrM[4],
                            $arrM[5],
                            $arrM[6],
                            $arrM[7],
                            $arrM[8],
                        )"; 
                    mysql_query($query_insert);
                }
            for ($i = 0, $cnt = count($arrM); $i < $cnt; $i++)
                {
                    echo $arrM[$i], ' ';
                }
            echo '<br/>';
            }   
            fclose($f);
            mysql_close(); 
        ?>
    </body>
</html>
Добавлено через 17 часов 53 минуты
Вроде разобрался. проблема была в кодировке. Как я понял в текст. файле кодировка windows-1251, соотвественно массив надо перекодировать в utf-8:

PHP
1
2
3
4
 foreach ($arrM as $key => $value)
            {
                $arrM[$key] = iconv("windows-1251", "UTF-8",$value);
            }
Еще добавил директиву:

PHP
1
mysql_set_charset('utf8');
Без нее то же кракозябры другого вида.

Вот работающий скрипт. Скрипт читает из текстового документа вида:
'4','2013-02-25','18:00','Иванов','Петров','15','25','0','0'
'10','2013-02-25','00:00','Сидоров','Иванов','24','18','0','0'
в массив, далее проверяется есть ли текущая строка в таблице БД по условию, и если нет вставляет ее в БД:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
<html>
    <head>
        <title>Чтение из текстовых файлов</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    </head>
    <body>
        <?php
            $hostname = "localhost"; 
            $username = "root"; 
            $password = "xxxxxx"; 
            $dbName = "names_groups";
            
            //Открытие файла для чтения данных
            $f = fopen("g:\names.txt", "r");
            
            mysql_connect($hostname,$username,$password) OR DIE("Не могу создать соединение ");
            mysql_select_db($dbName) or die(mysql_error());
            
            mysql_set_charset('utf8');
 
            // Читать построчно до конца файла
            while (!feof($f)) 
                {
                // Создать массив запятая-разделитель
                    $arrM = explode(",",fgets($f));
                     foreach ($arrM as $key => $value)
                        {
                            $arrM[$key] = iconv("windows-1251", "UTF-8",$value);
                        }
 
                    //Запрос, проверка существует ли запись в таблице names БД names_groups, где поля date, name1, name2 равны значениям массива
                    $query_select = "select * from `names` where `date` = $arrM[1]  and name1 = $arrM[3] and name2 = $arrM[4]";
                    echo "<br>------------------<br>".$query_select."<br>------------------<br>";
                    $result=mysql_query($query_select);
                    echo "<br>------------------<br>".mysql_error()."<br>------------------<br>";
                             
                    $num_rows = mysql_num_rows($result);
                    if($num_rows == 0)
                        {
                            echo "<br>------------------<br>".'$num_rows = '.$num_rows.'  Дубликаты не найдены, будет встаквка новой записи!'."<br>------------------<br>";
                        }
                    else
                        {
                            echo "<br>------------------<br>".'$num_rows = '.$num_rows.'  Есть дубликаты, вствка новой записи не будет!'."<br>------------------<br>";
                        }
                    echo $num_rows."--------";
                    //Если такой записи нет то вствляем запись(стороку из текст. файла) в таблицу names
                    if($num_rows == 0)
                        { 
                            $query_insert="insert into `names` (fk_idgroup, `date`, `time`, name1, name2, sum1, sum2, sum2, sum4) 
                            values 
                                (
                                    $arrM[0],
                                    $arrM[1],
                                    $arrM[2], 
                                    $arrM[3],
                                    $arrM[4],
                                    $arrM[5],
                                    $arrM[6],
                                    $arrM[7],
                                    $arrM[8],
                                )"; 
                            echo "<br>------------------<br>".$query_insert."<br>------------------<br>";
                            mysql_query($query_insert,$conect);
                            echo "<br>------------------<br>".mysql_error()."<br>------------------<br>";
                        }
                    for ($i = 0, $cnt = count($arrM); $i < $cnt; $i++)
                        {
                            echo $arrM[$i], ' ';
                        }
                    echo "<br/>***************************************************************************************************";
                }   
            fclose($f);
            mysql_close(); 
        ?>
    </body>
</html>


Вернуться к обсуждению:
Чтение из текстового файла в массив, проверка на дубликаты из таблицы БД, и вставка в таблицу БД
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.05.2013, 11:45
Готовые ответы и решения:

Чтение текстового файла в массив
При попытке чтения каждой строки файла в массив строк (tile: array of string)...

Чтение данных из текстового файла в массив
Описать структуру с именем Student, содержащую следующие поля: • Фамилия, имя,...

Чтение с текстового файла и запись в массив
Народ помогите!!! Есть данные предварительно записанные в файл программой!...

Чтение из текстового файла массив структур
Доброго времени суток. Нужно из текстового файла заполненного по типу ( Фио...

Чтение в массив из текстового файла на сервере
как с помощью java script считать с текстового файла (на сервере) данные в...

19
Другие темы раздела
PHP БД Сохранить значение Chekbox, выставленных пользователем http://www.cyberforum.ru/php-database/thread855104.html
Собственно пытаюсь сохранить значение чекбоксов выставленных пользователем <?php if(!defined('gamepl')) { die("Hacking attempt!"); } if($logingo == "1"){ $ids = "0"; $ids =...
PHP БД Вывод данных из MySQL - вместо контента выводится ' "; }; ?> ' Всем добрый день! :) У меня проблема, нужно сделать вывод из базы данных MySQL на страничку, вобщем сделал такой код: <?php $resylt1 = mysql_query("SELECT names, groupa, subjects, ticket, mark,... http://www.cyberforum.ru/php-database/thread855074.html
PHP Возможна ли передача одного и того же атрибута двум объектам form? PHP БД
Здравствуйте! Интересует вопрос, можно ли передать один и тот же атрибут (id) методом _POST или _GET разным файлам? В общем есть radio-кнопка (id-записи в БД) выводящаяся в массиве, её атрибут (id)...
PHP объявление даты PHP БД
реализую возможность оставлять комментарии на своем разрабатываемом сайте, вот часть программы: if(isset($_REQUEST)) { $res=mysql_query("SELECT id_regis FROM registration WHERE...
PHP БД Вывод банера(файла) из БД,мистика какая то твориться! Подкинте идей! http://www.cyberforum.ru/php-database/thread854706.html
сложилась такая ситуация <div id="adw_rotator"> <?$res=db_select("select * from reklama where position='1' and page='index'"); echo ($row=mysql_fetch_array($res))?><a href="<?= $row?>"><img...
PHP БД denver+DM6+DB= Р*то страницРПроблема такая, Выводит текст с базы данных на страницу Р*то страница Регистрации !!Уважаемые посетители, Здесь Р’С‹ можете... подробнее
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru