[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Из файла забить в базу
Mol4ok
Здравствуйте, уважаемые участники форума!
у меня такой вот вопрос имеется, необходимо забить данные из файла в базу mysql, Вот содержание файла:

253810
A B C D E F A B C D E F A B C D E F A B C D E F A B C D E F A B C D E F A B C D
A B C D E F A B C D E F A B C D E F A B C D E F A B C D E F A B C D E F A B C D
A B C D E F A B C D E F A B C D E F A B C D E F A B C D E F A B C D E F A B C D
258968
A B C D E F A B C D E F A B C D E F A B C D E F A B C D E F A B C D E F A B C D
A B C D E F A B C D E F A B C D E F A B C D E F A B C D E F A B C D E F A B C D
A B C D E F A B C D E F A B C D E F A B C D E F A B C D E F A B C D E F A B C D
253811
A B C D E F A B C D E F A B C D E F A B C D E F A B C D E F A B C D E F A B C D
A B C D E F A B C D E F A B C D E F A B C D E F A B C D E F A B C D E F A B C D
A B C D E F A B C D E F A B C D E F A B C D E F A B C D E F A B C D E F A B C D

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

$fp = fopen("$file", "r") ;
if (!$fp)
{echo "<p><strong>Файл не найден.</strong></p>";
exit;
}
$i=0;
while (!feof($fp)){
$file1 = fgets($fp);
$file2=trim($file1);
if (($i==0) || (($i%4)==0)) {

$query="select t1.id from users t1 where t1.idcode=$file2";
$result=mysql_query($query);
$row = mysql_fetch_row($result);
$w=$row[0];

}

if (($i<>0) || (($i%4)<>0)) {

$Array = explode (" ",$file2);
for($k=0; $k<=95; $k++)
{
$query="insert into usanswers(usid,answer) values($w,$Array[$k])";
$result=mysql_query($query);

}

}

$i++;
}




То есть здесь я в цикле помещаю еще один цикл, так теоретически все должно работать на мой взгляд, а там! Я считываю по строчке в большом цикле, если эта строка кратна 4, то я при этом выбираю айдишник по считанному коду из файла, ведь этот код расположен на позициях строк кратных 4, если номер позиции строки не кратен 4, то значит мы считываем варианты ответов, здесь открывается так сказать подцикл, в нем считанная строка помещается в массив, и в маленьком цикле элементы массива заносятся в базу....уф... примерно так я думал будет работать, но, мешает одно но... Проверял выводить все в браузер с помощью print, все выводится, а в базу записываются только 2 значения, ито записываются не варианты ответов, а айдишник и код, вообще как-то странно, может с массивом неправильно работаю? Помогите плиз, заранее спасибо!



Спустя 16 минут, 39 секунд (31.12.2009 - 12:00) sergeiss написал(а):
После создания запроса
Цитата (Mol4ok @ 31.12.2009 - 12:44)
$query="insert into usanswers(usid,answer) values($w,$Array[$k])";

выведи его:
echo $query.'<br>';

и посмотри, что там у тебя создано.

И насчет логики в целом я не совсем понял... Может, проще просто смотреть, что в строке - айдишник или данные? Это можно сделать или по длине строки, или по наличию (отсутствию) пробелов - это вместо подсчета количества строк.

Далее. Ввод данных в БД можно сделать одним запросом, разместив выборку нужного айди внутри этого (сложного) запроса. "Сложный" !== "трудный" smile.gif

Если файл не очень большой, то быстрее будет считать его в массив функцией file(), после чего идти в цикле по массиву.

В итоге внутренности цикла сократятся до нескольких строк.

Спустя 6 минут, 32 секунды (31.12.2009 - 12:07) Mol4ok написал(а):
Ainsert into usanswers(usid,answer) values(49,A)
Binsert into usanswers(usid,answer) values(49,cool.gif
Cinsert into usanswers(usid,answer) values(49,C)
Dinsert into usanswers(usid,answer) values(49,D)
Einsert into usanswers(usid,answer) values(49,E)
Finsert into usanswers(usid,answer) values(49,F)
Ainsert into usanswers(usid,answer) values(49,A)
Binsert into usanswers(usid,answer) values(49,cool.gif
Cinsert into usanswers(usid,answer) values(49,C)
Dinsert into usanswers(usid,answer) values(49,D)
Einsert into usanswers(usid,answer) values(49,E)
Finsert into usanswers(usid,answer) values(49,F)
Ainsert into usanswers(usid,answer) values(49,A)
Binsert into usanswers(usid,answer) values(49,cool.gif
Cinsert into usanswers(usid,answer) values(49,C)
Dinsert into usanswers(usid,answer) values(49,D)
Einsert into usanswers(usid,answer) values(49,E)
Finsert into usanswers(usid,answer) values(49,F)
Ainsert into usanswers(usid,answer) values(49,A)
Binsert into usanswers(usid,answer) values(49,cool.gif
Cinsert into usanswers(usid,answer) values(49,C)
Dinsert into usanswers(usid,answer) values(49,D)
Einsert into usanswers(usid,answer) values(49,E)
Finsert into usanswers(usid,answer) values(49,F)
Ainsert into usanswers(usid,answer) values(49,A)
Binsert into usanswers(usid,answer) values(49,cool.gif
Cinsert into usanswers(usid,answer) values(49,C)
Dinsert into usanswers(usid,answer) values(49,D)
Einsert into usanswers(usid,answer) values(49,E)
Finsert into usanswers(usid,answer) values(49,F)
Ainsert into usanswers(usid,answer) values(49,A)
Binsert into usanswers(usid,answer) values(49,cool.gif
Cinsert into usanswers(usid,answer) values(49,C)
Dinsert into usanswers(usid,answer) values(49,D)
Einsert into usanswers(usid,answer) values(49,E)
Finsert into usanswers(usid,answer) values(49,F)
Ainsert into usanswers(usid,answer) values(49,A)
Binsert into usanswers(usid,answer) values(49,cool.gif
Cinsert into usanswers(usid,answer) values(49,C)
Dinsert into usanswers(usid,answer) values(49,D)
Einsert into usanswers(usid,answer) values(49,E)
Finsert into usanswers(usid,answer) values(49,F)
Ainsert into usanswers(usid,answer) values(49,A)
Binsert into usanswers(usid,answer) values(49,cool.gif
Cinsert into usanswers(usid,answer) values(49,C)
Dinsert into usanswers(usid,answer) values(49,D)
Einsert into usanswers(usid,answer) values(49,E)
Finsert into usanswers(usid,answer) values(49,F)
insert into usanswers(usid,answer) values(49,)
insert into usanswers(usid,answer) values(49,)
insert into usanswers(usid,answer) values(49,)
insert into usanswers(usid,answer) values(49,)
insert into usanswers(usid,answer) values(49,)
insert into usanswers(usid,answer) values(49,)
insert into usanswers(usid,answer) values(49,)
insert into usanswers(usid,answer) values(49,)
insert into usanswers(usid,answer) values(49,)
insert into usanswers(usid,answer) values(49,)
insert into usanswers(usid,answer) values(49,)
insert into usanswers(usid,answer) values(49,)
insert into usanswers(usid,answer) values(49,)
insert into usanswers(usid,answer) values(49,)
insert into usanswers(usid,answer) values(49,)
insert into usanswers(usid,answer) values(49,)
insert into usanswers(usid,answer) values(49,)
insert into usanswers(usid,answer) values(49,)
insert into usanswers(usid,answer) values(49,)
insert into usanswers(usid,answer) values(49,)
insert into usanswers(usid,answer) values(49,)
insert into usanswers(usid,answer) values(49,)
insert into usanswers(usid,answer) values(49,)
insert into usanswers(usid,answer) values(49,)
insert into usanswers(usid,answer) values(49,)
insert into usanswers(usid,answer) values(49,)
insert into usanswers(usid,answer) values(49,)
insert into usanswers(usid,answer) values(49,)
insert into usanswers(usid,answer) values(49,)
insert into usanswers(usid,answer) values(49,)
insert into usanswers(usid,answer) values(49,)
insert into usanswers(usid,answer) values(49,)
insert into usanswers(usid,answer) values(49,)
insert into usanswers(usid,answer) values(49,)
insert into usanswers(usid,answer) values(49,)
insert into usanswers(usid,answer) values(49,)
insert into usanswers(usid,answer) values(49,)
insert into usanswers(usid,answer) values(49,)
insert into usanswers(usid,answer) values(49,)
insert into usanswers(usid,answer) values(49,)
insert into usanswers(usid,answer) values(49,)
insert into usanswers(usid,answer) values(49,)
insert into usanswers(usid,answer) values(49,)
insert into usanswers(usid,answer) values(49,)
insert into usanswers(usid,answer) values(49,)
insert into usanswers(usid,answer) values(49,)
insert into usanswers(usid,answer) values(49,)
insert into usanswers(usid,answer) values(49,)
.......................................................................и.т.д

Посе подстановки туда
echo $query.'<br>';

Да вы правы, лучше использовать скорее всего функцию file
Попробуем....

Спустя 53 секунды (31.12.2009 - 12:08) Mol4ok написал(а):
еще я в код вставил
print"$Array[$k]";

Спустя 1 минута, 13 секунд (31.12.2009 - 12:09) Mol4ok написал(а):
Видите он записывает туда и пробелы, хотя в базу это все не попадает.

Спустя 19 минут, 48 секунд (31.12.2009 - 12:29) sergeiss написал(а):
Цитата (Mol4ok @ 31.12.2009 - 13:07)
insert into usanswers(usid,answer) values(49,)

данная команда не корректна!

Для вставки символа или строки (а также даты) их надо заключать в кавычки!!!

insert into usanswers(usid,answer) values(49,'');// вот это будет вставка пустоты
insert into usanswers(usid,answer) values(49,' ');// вставка пробела
insert into usanswers(usid,answer) values(49,'A'); // а вот это - вставка символа A

Спустя 16 минут, 32 секунды (31.12.2009 - 12:45) Mol4ok написал(а):
Да это точно, спасибо, я это исправил, теперь что-то заносится, но с пробелами,
и делаю вот так

if ($r<>" "){
$query="insert into usanswers(usid,answer) values($w,'$r')";
$result=mysql_query($query); }

меня в игнор, то есть это условие!

Спустя 6 минут, 11 секунд (31.12.2009 - 12:52) sergeiss написал(а):
Ты имеешь ввиду, что только один пробел заносится, или строка с пробелами?
Если один пробел, то покажи, как у тебя прописано поле.
Если строка с пробелами, то используй trim() для обрезки начальных и конечных пробелов.

Спустя 2 минуты, 57 секунд (31.12.2009 - 12:54) Mol4ok написал(а):
Цитата (sergeiss @ 31.12.2009 - 09:52)
Ты имеешь ввиду, что только один пробел заносится, или строка с пробелами?
Если один пробел, то покажи, как у тебя прописано поле.
Если строка с пробелами, то используй trim() для обрезки начальных и конечных пробелов.

В общем строка из файла имеет пробелы то есть пробелы между символами, и они тоже заносятся поэтому я написал

if ($r<>' '){
$query="insert into usanswers(usid,answer) values($w,'$r')";
$result=mysql_query($query); }

вот, а он все равно заносит их

Спустя 1 минута, 55 секунд (31.12.2009 - 12:56) sergeiss написал(а):
Еще раз повторяю вопрос: у тебя вносимая строка $r имеет какие-то символы и плюс к этому пробелы, или как?

Спустя 1 минута, 22 секунды (31.12.2009 - 12:58) Mol4ok написал(а):
Да, она вот такая вот
A B C D E F A B C D E F A B C D E F A B C D E F A B C D E F A B C D E F A B C D
как видите с пробелами

Спустя 1 минута, 1 секунда (31.12.2009 - 12:59) sergeiss написал(а):
То есть, ты забиваешь в БД ВСЮ строку (состоящую из кучи разных символов), но при этом проверяешь, не равна ли она одному пробелу? biggrin.gif biggrin.gif biggrin.gif

Спустя 4 минуты, 41 секунда (31.12.2009 - 13:03) Mol4ok написал(а):
Да, то есть если данный элемент массива не равен пробелу, то записать его в базу huh.gif

Спустя 6 минут, 29 секунд (31.12.2009 - 13:10) Mol4ok написал(а):
sergeiss такие вот дела, наверное буду пробовать через функцию file, как сделаю отпишусь, спасибо за помощь, С Новым Годом!

Спустя 3 минуты, 12 секунд (31.12.2009 - 13:13) sergeiss написал(а):
Цитата (Mol4ok @ 31.12.2009 - 14:03)
Да, то есть если данный элемент массива не равен пробелу, то записать его в базу

Меня что "прикололо"-то smile.gif У тебя строка длинная, но ты ее проверяешь на равенство пробелу. И затем (судя по твоим словам!) удивляешься, что она записана в базу.
Либо я что-то не так понял.

Спустя 3 минуты, 17 секунд (31.12.2009 - 13:16) Mol4ok написал(а):
сорри, стоп, я просто не до конца кодок то выложил rolleyes.gif
это не строка $r а символ, так как там стоит еще $r=$Array[$k];

Спустя 30 минут, 41 секунда (31.12.2009 - 13:47) Mol4ok написал(а):
IF($Array[$k]){
$query="insert into usanswers(usid,answer) values($w,'$Array[$k]')";
$result=mysql_query($query); }

Вот так пашет, записывает в базу без пробелов!=)))

Спустя 32 минуты, 11 секунд (31.12.2009 - 14:19) Mol4ok написал(а):
Окончательный код, все работает, тему можно закрыть.
только файл здесь такой вот(который считываем)

253810
A B C E F
A B C E F
258968
A B C E F
A B C E F
253811
A B C E F
A B C E F

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

<META http-equiv="content-type" content="text/html; charset=windows-1251">
<
link href="style.css" rel="stylesheet" title="Compact" />
<
table border=1 >
<?
$link = mysql_connect("localhost", "root", "") or die("Could not connect : " . mysql_error());
mysql_select_db("test") or die("Could not select database");
if ($_POST['submit']=='submit') {


$fp = fopen("$file", "r") ;
if (!$fp)
{echo "<p><strong>Файл не найден.</strong></p>";
exit;
}
$i=0;
while (!feof($fp)){
$file1 = fgets($fp);
$file2=trim($file1);
if (($i==0) || (($i%3)==0)) {
if ($file2){
$query="select t1.id from users t1 where t1.idcode=$file2";
$result=mysql_query($query);
$row = mysql_fetch_row($result);
$w=$row[0];
}
}


if (($i<>0) && (($i%3)<>0)) {

$Array = explode (" ",$file2);
$dl=strlen($file2);
for($k=0; $k<=$dl; $k++)
{


IF($Array[$k]){

if(strlen($Array[$k])==1){
print"$Array[$k]";
$query="insert into usanswers(usid,answer) values($w,'$Array[$k]')";
$result=mysql_query($query); }}
}

}

$i++;
}



fclose($fp);


}


print"<form action='fromfile.php' method=Post>";
print "<input type=submit name=submit value=submit>";

print"<input type=file name=file value=file>";


?>

Спустя 8 минут, 18 секунд (31.12.2009 - 14:28) sergeiss написал(а):
То, что код стал рабочий - это хорошо smile.gif

Но вот то, что он категорически неоптимальный - это плохо. Как его сделать более оптимальным, я где-то в начале самом начале этой темы говорил.

Спустя 12 минут, 57 секунд (31.12.2009 - 14:41) Mol4ok написал(а):
Цитата (sergeiss @ 31.12.2009 - 11:28)
То, что код стал рабочий - это хорошо smile.gif

Но вот то, что он категорически неоптимальный - это плохо. Как его сделать более оптимальным, я где-то в начале самом начале этой темы говорил.

sergeiss вы правы, простите бестолкового ламера=)))
будем работать над оптимальностью, применим функцию file, будем записывать все в базу через один цикл, обращаясь к элементам массива file.

Спустя 9 минут, 50 секунд (31.12.2009 - 14:50) sergeiss написал(а):
Ну, удачи в нелёгком деле оптимизации кода wink.gif

И - просьба на "ты"...

Спустя 1 минута, 1 секунда (31.12.2009 - 14:51) Mol4ok написал(а):
агась=)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.