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

Форум PHP

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

 

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

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

тема: проблема с выгрузкой в dbf dbase_add_record()
 
 автор: morozmoroz   (27.07.2012 в 19:31)   письмо автору
 
 

Подскажите в чем дело.
Я добавляю запись в dbf-файл из таблицы на MySql.Запись добавляется (статические значения) ,кроме значений из таблицы,т.е. поля в dbf -файле $t[1],$t[2]-пустые.

// выбрала на сервере из таблицы по запросу

$t[1]=$t['maz'];
$t[2]=$t['m'];

...........
if ( !dbase_add_record($s,array('125','4020','0',$t[1],'5',$t[2])))
     { 
      echo "Ошибка при добавлении записи в dbf-файл"; 
      exit(); 
    } 

Указать по-другому,типа $t['maz'],$t['m'] я не могу.

Данные в массиве есть,я проверяла.
Спасибо.

  Ответить  
 
 автор: confirm   (27.07.2012 в 19:43)   письмо автору
 
   для: morozmoroz   (27.07.2012 в 19:31)
 

Зачем числовые значения брать в кавычки.
А какой тип данных у $t['maz'],$t['m'], он совпадает с типом в базе?
И почему не можете указать так $t['maz'],$t['m']? И зачем именно $t[1], $t2, а например, просто $a и $b?

  Ответить  
 
 автор: morozmoroz   (27.07.2012 в 20:03)   письмо автору
 
   для: confirm   (27.07.2012 в 19:43)
 

В dbf-файле (куда пишем)--это числовые поля
В таблице на Mysq(откуда пишем) -это varchar
но у меня в dbf-файле поля описаны как N , я туда заношу '125.3' (статическое) и проходит

могу и и в переменные занести ,типа $a,$b и т.д.
А разве это что-то меняет?
Спасибо.

  Ответить  
 
 автор: confirm   (27.07.2012 в 20:11)   письмо автору
 
   для: morozmoroz   (27.07.2012 в 20:03)
 

Если не совпадают данные, то конечно бы меняло.
Что за статический тип? '125.3' - это строка.
В dbf, если мне память не изменяет, нет типа данных "статический", насколько помню, есть булев тип, число, строка, дата, и memo, который в php не поддерживался (если конечно, что-то не изменилось).

  Ответить  
 
 автор: morozmoroz   (27.07.2012 в 20:15)   письмо автору
 
   для: confirm   (27.07.2012 в 20:11)
 

Я так поняла,что надо поменять тип данных из varchar на числовое.
Статические,да,как Вы сказали-это неизменяемые данные

  Ответить  
 
 автор: confirm   (27.07.2012 в 20:21)   письмо автору
 
   для: morozmoroz   (27.07.2012 в 20:15)
 

Вот специально сейчас открыл руководство, чтобы вспомнить о dbf - нет в ее структуре таких типов данных. Если вы пытаетесь ввести значения как '125.5', то есть строковые, то поля вашей dbf-базы должны иметь именно строковый тип. При этом и $t[1]...чего-то там далее, не помню, должны быть тоже заключены в кавычки.
Кстати, вы так и не ответили на вопросы, почему именно такой механизм передачи данных в массив.

  Ответить  
 
 автор: morozmoroz   (27.07.2012 в 20:27)   письмо автору
 
   для: confirm   (27.07.2012 в 20:21)
 

вот стр-ра dbf

$def = array(
  array("pshst",    "N",  6, 0),
  array("cht",      "C",  4),
  array("godp",     "N",  7, 1),
  ...........................


вот я заношу в 'godp' значение (но не из массива), а забиваю руками '125.3' и записывается
мне некоторые данные нужно забить готовыми данными , другие-вытащить из ТАБЛИЦЫ mysq и все записать в dbf

  Ответить  
 
 автор: confirm   (27.07.2012 в 20:59)   письмо автору
 
   для: morozmoroz   (27.07.2012 в 20:27)
 

В чем-то у вас путаница в данных. Можно было бы попросить их у вас и проверить, но под мою версию РНР у меня нет расширения, и я этого сделать не смогу.

  Ответить  
 
 автор: morozmoroz   (27.07.2012 в 21:13)   письмо автору
 
   для: confirm   (27.07.2012 в 20:59)
 


dbase_add_record($d,array('5','41','0','8',$t[1]............


ошибки нет,но первые 3 данных записались,которые я записала руками, а последнее из бд-нет.

DBF:
первое поле описано-как N
2-е как С
3-N
4-N
5-N

в таблице на MYSQL
1-е поле как bigint
остальные как varchar

  Ответить  
 
 автор: confirm   (27.07.2012 в 21:18)   письмо автору
 
   для: morozmoroz   (27.07.2012 в 21:13)
 

Как я понимаю, в поля которые нет записи, это number, значит, если записать в массив, например
12, 13.6, то они у вас записываются в dbf?
И зачем вы числовые значения (в mysql) держите в полях varchar? Из-за того, что это у вас 125.5?

  Ответить  
 
 автор: morozmoroz   (27.07.2012 в 23:23)   письмо автору
 
   для: confirm   (27.07.2012 в 21:18)
 

было

while($t = mysql_fetch_array($q))
{
$t[1]=$t['maz']; 
$t[2]=$t['m']; 
....
}
........... 
if ( !dbase_add_record($s,array('125','4020','0',$t[1],'5',$t[2]))) 
     {  
      echo "Ошибка при добавлении записи в dbf-файл";  
      exit();  
    }  



надо

while($t = mysql_fetch_array($q))
{
$rr[1]=$t['maz']; 
$rr[2]=$t['m']; 
....
}
........... 
if ( !dbase_add_record($s,array('125','4020','0',$rr[1],'5',$rr[2]))) 
     {  
      echo "Ошибка при добавлении записи в dbf-файл";  
      exit();  
    }  


  Ответить  
 
 автор: confirm   (27.07.2012 в 23:38)   письмо автору
 
   для: morozmoroz   (27.07.2012 в 23:23)
 

?

И только не mysql_fetch_array(), а лучше mysql_fetch_assoc(), а если mysql_fetch_array(), то с указанием второго аргумента, вам нужного.

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

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