Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> создание таблицы из массива, вопрос 
:(
    Опции темы
hhh
Дата 9.5.2008, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 9.5.2008

Репутация: нет
Всего: нет



Есть вот такой XML файл 

Код

<?xml version="1.0"?>
<form>
    <element>
        <title>name</title>
        <type>varchar</type>
        <length>15</length>
        <isobyaz>1</isobyaz>
    </element>

        <element>
        <title>phone</title>
        <type>number</type>
        <length>15</length>
        <isobyaz>1</isobyaz>
    </element>
</form>


прочита его в массив в таком виде

 [0] [title] = name
 [0] [type] = varchar
 [0] [length] = 15
 [0] [isobyaz] = 1

 [1] [title] = phone
 [1] [type] = number
 [1] [length] = 15
 [1] [isobyaz] = 1

Пытаюсь саздать из этого массива таблицу 
  но почемуто выходит ошибка
 
Код

require_once ("connetdb.php");
$sql="CREATE TABLE table_name(";
foreach($date as $key=>$var){
  if ($var['type']=='varchar'){
    $sql.=$var['title']." VARCHAR (".$var['length'].")";
  }
  elseif ($var['type']=='number'){
    $sql.=$var['title']." INT (".$var['length'].")";
  }
  if ($var['isobyaz'] && $var['isobyaz']==1){
   $sql.="NOT NULL";
  }
     else {
            $sql.=" NULL";
          }
  $sql.="<br>";
}
$sql.=");";
echo $sql."<br>";

mysql_query($sql) or die("Ошибка: ".mysql_error());


Получается код в таком виде ошибка думал из за запятой
Код

CREATE TABLE table_name(
                      name VARCHAR (15)NOT NULL,
                      phone INT (15)NOT NULL,
                  );


Но при таком тоже кодетоже ошибка
 
Код

CREATE TABLE table_name(
                      name VARCHAR (15)NOT NULL
                      );

PM MAIL   Вверх
Feldmarschall
Дата 9.5.2008, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 1
Всего: 32



О, hhh! Как будто специально для тебя писал - http://forum.vingrad.ru/articles/topic-206796.html !
PM   Вверх
hhh
Дата 9.5.2008, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 9.5.2008

Репутация: нет
Всего: нет



Ошибка: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '
name VARCHAR (15)NOT NULL
)' at line 1
PM MAIL   Вверх
solenko
Дата 9.5.2008, 11:45 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1473
Регистрация: 15.1.2006
Где: Украина

Репутация: 7
Всего: 67



Не, ну я бы на месте mysql тоже обиделся, если бы мне html пытались скормить )
Вам нужно понять разницу между ТЕГОМ <br /> и СИМВОЛОМ перевода строки \n.

По поводу лишней запятой... Очень удобно собирать определения полей в массив а потом делать ему join/implode с разделителем запятой.


--------------------
Ла-ла-ла-ла
Заметьте, нет официального подтверждения, что это не просто четыре слога.
PM MAIL WWW ICQ Skype   Вверх
hhh
Дата 9.5.2008, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 9.5.2008

Репутация: нет
Всего: нет



Как можно решить проблему с join/implode  
 
Код

$sql="CREATE TABLE table_name(";
foreach($news as $key=>$var){
  if ($var['type']=='varchar'){
    $sql.=$var['title']." VARCHAR (".$var['length'].")";
  }
  elseif ($var['type']=='number'){
    $sql.=$var['title']." INT (".$var['length'].")";
  }
  if ($var['isobyaz'] && $var['isobyaz']==1){
   $sql.="NOT NULL";
  }
     else {
            $sql.=" NULL";
          }
  $sql.=",";
}
$sql.=");


конец sql кода должен заканчиваться без запятой

Код

CREATE TABLE table_name(id INT (15)NOT NULL,
                                           name varchar (15)NOT NULL,
                                           addres varchar (15)NOT NULL,
                                           );



Это сообщение отредактировал(а) hhh - 9.5.2008, 12:16
PM MAIL   Вверх
solenko
Дата 9.5.2008, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1473
Регистрация: 15.1.2006
Где: Украина

Репутация: 7
Всего: 67



Код

$filed_defs = array();
foreach($news as $key=>$var){
  $field_def = '';
  if ($var['type']=='varchar'){
    $field_def.=$var['title']." VARCHAR (".$var['length'].")";
  }
  elseif ($var['type']=='number'){
    $field_def.=$var['title']." INT (".$var['length'].")";
  }
  if ($var['isobyaz'] && $var['isobyaz']==1){
   $field_def.="NOT NULL";
  }
     else {
            $field_def.=" NULL";
          }
   $filed_defs[] = $field_def;
}
$sql="CREATE TABLE table_name(".join(",\n", $field_defs).")";



--------------------
Ла-ла-ла-ла
Заметьте, нет официального подтверждения, что это не просто четыре слога.
PM MAIL WWW ICQ Skype   Вверх
hhh
Дата 9.5.2008, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 9.5.2008

Репутация: нет
Всего: нет



Код

require_once ("config.php");
$filed_defs = array();
foreach($news as $key=>$var){
  $field_def = '';
  if ($var['type']=='varchar'){
    $field_def.=$var['title']." VARCHAR (".$var['length'].")";
  }
  elseif ($var['type']=='number'){
    $field_def.=$var['title']." INT (".$var['length'].")";
  }
  if ($var['isobyaz'] && $var['isobyaz']==1){
   $field_def.="NOT NULL";
  }
     else {
            $field_def.=" NULL";
          }
   $filed_defs[] = $field_def;
}
$sql="CREATE TABLE table_name(".join(",\n", @$field_defs).")";
echo $sql."<br>";
mysql_query($sql) or die("Ошибка: ".mysql_error());


Warning: join() [function.join]: Bad arguments. in z:\home\localhost\www\xml.php on line 140
CREATE TABLE table_name()
Ошибка: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1
PM MAIL   Вверх
Fortop
Дата 9.5.2008, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 3
Всего: 42



hhh, ты не хочешь прочитать ссылку что дал Feldmarshall?

Посмотри внимательно, на код, который ты отправляешь в базу?


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
hhh
Дата 9.5.2008, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 9.5.2008

Репутация: нет
Всего: нет



Вроде все правильно не могу найти где ошибка
PM MAIL   Вверх
Feldmarschall
Дата 9.5.2008, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 1
Всего: 32



проверь, какие аргументы ты передаешь в функцию join
выведя каждый с помощью функции var_dump()

PM   Вверх
hhh
Дата 9.5.2008, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 9.5.2008

Репутация: нет
Всего: нет



var_dump($field_def);

string(23) "addres INT (15)NOT NULL" 
PM MAIL   Вверх
Feldmarschall
Дата 9.5.2008, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 1
Всего: 32



а зачем ты передаешь field_def, если тебе нужно передавать field_defs?
PM   Вверх
hhh
Дата 9.5.2008, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 9.5.2008

Репутация: нет
Всего: нет



var_dump($field_defs);

NULL 

PM MAIL   Вверх
Feldmarschall
Дата 9.5.2008, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 1
Всего: 32



воооот!
значит, в этот массив почему-то ничего не попадает, хотя должно.
дальше смотри по коду - почему. 
где-то у тебя косяк со скобками, что ли
PM   Вверх
Nigel
Дата 9.5.2008, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


познаю мир
**


Профиль
Группа: Участник
Сообщений: 515
Регистрация: 20.11.2007

Репутация: нет
Всего: 19



следи за названиями переменных
$sql="CREATE TABLE table_name(".join(",\n", @$filed_defs).")";
PM MAIL   Вверх
Закрытая темаСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0541 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.