[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: чтение SQL-запросов с файла и занесение их в базу
kester
Доброе время суток.

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

сделал приблизительно такое:
<?php 
$new_wind_const="old";
$new_wind=$_POST['new_wind'];
$ff=$_POST['ff'];

if ($new_wind != $new_wind_const)
{
?>

<form name="form1" method="post" action="-этот файл-">
<
input type="hidden" name="new_wind" value="old">
<
input type="file" name="ff">
<
input type="submit" name="Submit" value="upload">
</
form>

<?php }
else {

// file open and read
$fh = fopen($ff, "r") or die("fileopen error");
$fs = filesize($ff) or die("filesize error");
$file = fread($fh, $fs);
fclose($fh);

// db connect
$link = mysql_connect("localhost","bd", "bd_pass") or die("DB connect error");
mysql_select_db("bd", $link);

// чтение с переменной и выполнение запросов, разделенных ";"
$t = $file;
while($k=strpos($t,';')){
mysql_query(substr($t,0,$k+1)) or die (mysql_error());
$t = substr($t,$k+1);
}
mysql_close();

echo "<br /> all is goooood :)";

}
?>
при выполнении выдаёт "fileopen error".

что я сделал не так, в чём может быть проблема?
может есть у кого-нить лучшее решение?



Спустя 11 минут, 5 секунд (3.12.2010 - 15:19) Игорь_Vasinsky написал(а):
сделай

echo $ff;

у тя имя файл передаётся не верно, либо атрибуты стоят на файл

имя на кирилице?

кодировка ?

Спустя 10 минут, 24 секунды (3.12.2010 - 15:30) kester написал(а):
echo $ff выдаёт имя файла
файл SAYT.txt

внутри файла запросы на cp866 (DOS kyr.)
но проблема вроде бы не в кодировке. таблица в базе тоже в ср866.
при задании полного адреса на локалке(денвер) всё работает.
да и таким способом тоже работает на локале, но не всегда. голову ломаю, понять не могу как решить это.

Спустя 3 дня, 2 часа, 30 минут, 31 секунда (6.12.2010 - 18:00) kester написал(а):
народ, помогите, ато у самого мозгов не хватает, а нужно "на вчера"...
файлы надо заливать по 7-8 МБ.

Спустя 1 час, 22 минуты, 16 секунд (6.12.2010 - 19:22) DySprozin написал(а):
kester
потому что нужно мануалы... курить их нужно... перед сном и вместо сна каждый день (;

<form name="form1" method="post" action="-этот файл-" enctype="multipart/form-data">

Спустя 13 часов, 37 минут, 24 секунды (7.12.2010 - 09:00) kester написал(а):
да знаю. enctype="multipart/form-data" не помог. лан, попробую пересобрать скрипт, мож чёт получится...

Спустя 4 часа, 12 минут, 6 секунд (7.12.2010 - 13:12) kester написал(а):
такс, переделал заново и по-другому:
<?php
$pass = $_POST['pass'];

if (isset($_FILES["ff"]) and $pass=="qqq"){

echo "<b>name:</b> ".$_FILES['ff']['name']."<br />";
echo "<b>size:</b> ".$_FILES['ff']['size']."<br />";
echo "<b>tmpadr:</b> ".$_FILES['ff']['tmp_name']."<br /><br />";

$fop = fopen($_FILES['ff']['tmp_name'], "r") or die("Can't open file!");
$borg = fread($fop, $_FILES['ff']['size']);
fclose($fop);
$link = mysql_connect("localhost","db", "") or die("DB connect error");
mysql_select_db("db", $link);
mysql_query("SET NAMES 'cp866'");

while($k=strpos($borg,';')){
mysql_query(substr($borg,0,$k+1));// or die (mysql_error());
$borg = substr($borg,$k+1);
}
echo "<br /> all is goooood :)</ceter>";
mysql_close();

}
else { ?>
<form method="post" action="" enctype="multipart/form-data">
<
input type="file" name="ff" id="ff">
<
input type="password" name="pass" value="--------">
<
input type="submit" name="Submit" value="use file">
</
form>

<?php
}
?>
вроде заработало нормально, НО:
если ставлю if (isset($_FILES["ff"]) and $pass=="qqq"), то условие не проходит, всегда ложь;
а если делаю if (isset($_FILES["ff"]) && $pass=="qqq"), то истина всегда, когда второе условие выполняется...

если не делать проверку на 2 условие(пароль), то всё нормально работает.

в чём причина и как это разрешить можно?

Спустя 19 минут, 10 секунд (7.12.2010 - 13:31) Renden написал(а):
Возможно скобочки надо поставить

if (isset($_FILES["ff"]) and ($pass=="qqq")){

а вообще так работает?

if (isset($_FILES["ff"]) {
if ($pass=="qqq") {

Спустя 26 минут, 32 секунды (7.12.2010 - 13:58) kester написал(а):
блин, ступил с раскладкой. пароль проходит норм, но вот с двойным условием первое не учитывается(или всегда тру), как будто его нет.
с двумя ифами то же самое.

почему при повторном isset($_FILES["ff"] тру, если файл не выбрано? есть варианты обхода этого?
проверка на $_FILES["ff"]["name"]!="" и $_FILES["ff"]["size"]>0 не дала результата(хз почему).
замена isset на empy не помогла.

при вводе пароля без выбора файла выдаёт:
name:
size: 0
tmpadr:
Can't open file!

а должно оставаться на форме

Спустя 1 час, 9 минут, 38 секунд (7.12.2010 - 15:07) kester написал(а):
заработало, когда сделал: if (!empty($_FILES['ff']['name']) and $pass=="qqq")

надо быстро заливать на сайт и там пробовать, пока не нашел себе ещё чего-нить на свою ж* ))
всем спс за внимание и советы)

поставил бы +, но пока маловато у меня постов для этого
Быстрый ответ:

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