Войти

Показать полную графическую версию : [решено] Заполнение таблицы БД (mysql+php) - прошу вашей помощи


xkornx
01-03-2008, 05:21
Здравствуйте, я новичек в PHP и MySQL. Прошу вашей помощи.
Создана база данных "anibase", в которой есть таблица "anime_company", состоящая из 3 полей (id (int), name (varchar(60)), image (text)). Необходимо написать скрипт, заполняющий данную таблицу. Данные для поля "name" хранятся в текстовом файле "company.txt". Всего 120 компаний. Каждой компании соответствует свой логотип. Имена логотипов пронумерованы от 1 до 120.
Вот код скрипта:
http://www.pixhost.net/out.php/i527_my.bmp
Никаких ошибок не выдается. При выводе на экран (в конце цикла) все данные отображаются правильно. Однако в саму таблицу запись не добавляется, т.е. таблица остается пустой. Может быть кто-нибудь сможет помочь разобраться, в чем тут дело?

bruder
01-03-2008, 11:20
можно посмотреть ошибку которую выдает mysql-пример из мануала

<?php
mysql_connect("localhost", "mysql_user", "mysql_password"); mysql_select_db("nonexistentdb");
echo mysql_errno() . ": " . mysql_error(). "\n"; mysql_select_db("kossu"); mysql_query("SELECT
* FROM nonexistenttable"); echo mysql_errno() . ": " . mysql_error() . "\n"; ?>

а лучше выдать эхом request и вывести его в вашем mysql едиторе, мне например кажется что в таблице anime_company первый столбец должен быть уникальным а вы суете одну и ту же переменную $z.

потом если записей в файле меньше чем 120 заносится будет пустое значение. Если стоит NOT NULL в таблице тоже не прокатит. Надо длинну массива брать count($l) или foreach. И интересно для чего нужна $t?

P.S. Переменным не мешало бы дать нормальные имена, а то путаешься

Coutty
01-03-2008, 12:01
Обалдеть... Скрипт в bmp... Полтора метра... Используйте тэг [php]

Что-то я не понял - зачем открывается файл с изображением, если данные из него не используются? Если это проверка на наличие, то надо использовать функцию file_exists().
Также напрасно открывается и текстовый файл.

Цикл построен как-то странно... Можно проще:

// делаем всякие там коннекты и переход в нужный каталог, а потом (после chdir()):
$nameArr = file("company.txt"); // читаем файл в массив
foreach ($nameArr as $name) // в цикле помещаем каждый элемент массива в переменную и выполняем след.операции:
{
$i++; // счётчик. Начинаем с единицы, получается...
if (file_exists($i . ".jpg")) // если файл присутствует
$filePath = "d:/anibase/site/bd/company/" . $i . ".jpg"; // присваиваем переменной полный путь
else // если отсутствует
die("Файл под номером $i соизволит не присутствовать в каталоге"); // завершаем цикл. Хотя я бы тут обработчик другой поставил. Типа $filePath = "d:/anibase/site/bd/company/nofile.jpg";
//составляем sql-запрос:
$sql = "INSERT INTO anime_company (name, image) VALUES ('$name', '$filePath');";
// мы же не забудем поставить точку с запятой в конце sql-запроса? Без неё, кажись, не будет работать. Идентификатор id по идее должен генерироваться автоматически, если ему поставили автоинкремент при создании таблицы.
mysql_query($sql); // собственно, сам sql-запроc делаем
echo "id = $i; name = $name; imagePath = $filePath<br />"; // выводим на экран, раз уж хочется.
}
mysql_close($msconnect); // а остальные файлы закрывать и не требуется.


Кажись, так должно работать.

xkornx
01-03-2008, 16:04
bruder, Coutty, искренне благодарю за оказанную помощь.
мне например кажется что в таблице anime_company первый столбец должен быть уникальным а вы суете одну и ту же переменную $z. »
Первый столбец уникальный (но я не указывал автоинкремент). Переменная $z изменяется от 1 до 120.
потом если записей в файле меньше чем 120 заносится будет пустое значение »
Да, конечно, Вы правы. Однако я писал этот скрипт для конкретной ситуации. В файле ровно 120 записей.
И интересно для чего нужна $t? »
Благодарю, уже понял, что данная строка совсем не нужна.

зачем открывается файл с изображением, если данные из него не используются? Если это проверка на наличие, то надо использовать функцию file_exists().
Также напрасно открывается и текстовый файл. »
Спасибо, снова глупость написал ^__^
Цикл построен как-то странно... Можно проще.
Кажись, так должно работать. »
Спасибо, все работает. Понял свои ошибки и принял к сведению ваши советы.
Еще раз благодарю.




© OSzone.net 2001-2012