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

Форум MySQL

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

 

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

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

тема: Несколько цифр в одном поле?
 
 автор: xpom   (24.10.2006 в 17:56)   письмо автору
 
 

Уважаемые профессионалы!
Подскажите пожалуста, можно в одном числовом поле таблицы перечислят несколько отдельных цифр, чтобы потом при совпадении цифры выводились нужные данные?

   
 
 автор: cheops   (24.10.2006 в 19:20)   письмо автору
 
   для: xpom   (24.10.2006 в 17:56)
 

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

   
 
 автор: xpom   (25.10.2006 в 11:04)   письмо автору
 
   для: cheops   (24.10.2006 в 19:20)
 

Какова структура такой таблицы? А втекстовом поле возможен такой вариант, с отдельными словами?

   
 
 автор: cheops   (25.10.2006 в 12:21)   письмо автору
 
   для: xpom   (25.10.2006 в 11:04)
 

Да, возможно, но автоматизировать работу с такими строками будет сложно, кроме того, переход от числовых столбцов к строковым приведёт к падению скорости выполнения запросов.

   
 
 автор: xpom   (25.10.2006 в 20:24)   письмо автору
 
   для: cheops   (25.10.2006 в 12:21)
 

Можете показать как будет выглядеть скрипт, чтобы из списка выбора нескальких отдельных слов формы слова отдельно занеслись в одно поле таблицы?

   
 
 автор: cheops   (25.10.2006 в 22:40)   письмо автору
 
   для: xpom   (25.10.2006 в 20:24)
 

>чтобы из списка выбора нескальких отдельных слов формы слова отдельно занеслись в одно поле таблицы?
Вот это не очень понятно, можете привести пример?

   
 
 автор: xpom   (25.10.2006 в 22:53)   письмо автору
 
   для: cheops   (25.10.2006 в 22:40)
 

Пример не получается привести, я не знаю как это будет выглядеть в срипте, я постораюсь по понятней обьяснить. В форме есть тикие списки

<input type="radio" name="" value="" checked>
в которых можно отмечать какие элементы из списка нужно выбрать. Нужно из такого списка отмечанные элементы поместить в одно поле таблицы, чтобы по ним потом сделать запрос?

   
 
 автор: xpom   (27.10.2006 в 16:16)   письмо автору
 
   для: xpom   (25.10.2006 в 22:53)
 

Помогите отмечающий список передать, плиз???

   
 
 автор: cheops   (27.10.2006 в 22:27)   письмо автору
 
   для: xpom   (25.10.2006 в 22:53)
 

Что-то всё равно не понятно, радио-кнопка не имеет имени - так задуманно или ей можно присвоить любое имя?

   
 
 автор: xpom   (27.10.2006 в 22:49)   письмо автору
 
   для: cheops   (27.10.2006 в 22:27)
 

Вместо радио-кнопки нужно список с выбором нескольких значений, например вот это:

 <input name="Name" type="checkbox" value="ON">

Ей можно присвоить любое имя, главное чтобы эти выбранные значения заносились отдельно в одно поле таблицы?

   
 
 автор: xpom   (28.10.2006 в 12:14)   письмо автору
 
   для: xpom   (27.10.2006 в 22:49)
 

Помогите отмечающий список передать, плиз???

   
 
 автор: cheops   (28.10.2006 в 12:24)   письмо автору
 
   для: xpom   (27.10.2006 в 22:49)
 

Список как формируется и сколько значений содержит? Например, если имеется 10 флажков:
<input name="Name1" type="checkbox" value="ON">
<input name="Name2" type="checkbox" value="ON">
<input name="Name3" type="checkbox" value="ON">
<input name="Name4" type="checkbox" value="ON">
<input name="Name5" type="checkbox" value="ON">
<input name="Name6" type="checkbox" value="ON">
<input name="Name7" type="checkbox" value="ON">
<input name="Name8" type="checkbox" value="ON">
<input name="Name9" type="checkbox" value="ON">
<input name="Name10" type="checkbox" value="ON">

то в обработчике можно проверить их содержимое и для вставить в поле следующим образом
<?php
  $arr 
= array();
  if(!empty(
$_POST['Name1'])) $arr[] = 1;
  if(!empty(
$_POST['Name1'])) $arr[] = 2;
  if(!empty(
$_POST['Name1'])) $arr[] = 3;
  if(!empty(
$_POST['Name1'])) $arr[] = 4;
  if(!empty(
$_POST['Name1'])) $arr[] = 5;
  if(!empty(
$_POST['Name1'])) $arr[] = 6;
  if(!empty(
$_POST['Name1'])) $arr[] = 7;
  if(!empty(
$_POST['Name1'])) $arr[] = 8;
  if(!empty(
$_POST['Name1'])) $arr[] = 9;
  if(!empty(
$_POST['Name1'])) $arr[] = 10;
  if(!empty(
$arr)) $query "INSERT INTO tbl VALUES (NULL, '".implode(",",$arr)."')";
  else 
$query "INSERT INTO tbl VALUES (NULL, '')";
?>

PS Для удоства формировать HTML-форму и обрабатывать результаты в обработчике можно в цикле.

   
 
 автор: xpom   (28.10.2006 в 13:52)   письмо автору
 
   для: cheops   (28.10.2006 в 12:24)
 

Список нужно чтобы формировался из вот этой таблицы:

CREATE TABLE IF NOT EXISTS Towns (
      TID                   INTEGER NOT NULL AUTO_INCREMENT,
      Kan                  INTEGER NOT NULL,
      TowName       VARCHAR(30),
      Primary Key (TID),
      FOREIGN KEY (Kan) REFERENCES Kan(KNID)

Подскажите как это сделать?

>сколько значений содержит?
Значения будут зависит от того какое значение имеет внешний ключ таблицы Kan. Например если Kan=1 тогда 15, если Kan=2 тогда 10.

А с флажками бедет столько сколько уже наотмечает пользователь.

После обработчика проверенные данные нужно вставить в поле Town таблицы Dan :

CREATE TABLE IF NOT EXISTS Dan (
      DID          INTEGER NOT NULL AUTO_INCREMENT,
      Lat          INTEGER NOT NULL,
      Name         VARCHAR(150),
      About        VARCHAR(255),
      Town        VARCHAR(300),
      Primary Key (DID),
      FOREIGN KEY (Lat) REFERENCES Lat(LID)

Помогите, пожалуйста сделать!!!

   
 
 автор: cheops   (28.10.2006 в 14:39)   письмо автору
 
   для: xpom   (28.10.2006 в 13:52)
 

>Например если Kan=1 тогда 15, если Kan=2 тогда 10.
Хм... а Kan будет принимать только два значения? Дело в том, что это значение нужно будет передавать через скрытое поле, чтобы обработчик "знал" сколько флажков было в HTML-форме. На момент формирования HTML-формы значение Kan в какой переменной доступно?

   
 
 автор: xpom   (28.10.2006 в 15:15)   письмо автору
 
   для: cheops   (28.10.2006 в 14:39)
 

>Kan будет принимать только два значения?
Нет Kan будет принимать больше значений.

>На момент формирования HTML-формы значение Kan в какой переменной доступно?
Переменная $_GET['d'], на момент формирования HTML-формы имеет значение такое как и Kan

   
 
 автор: cheops   (28.10.2006 в 16:33)   письмо автору
 
   для: xpom   (28.10.2006 в 15:15)
 

Если никто, не ответит, поднимите эту тему вечером (чтобы она не отметилась у меня как прочитанная - сейчас не успеваю скрипт написать).

   
 
 автор: xpom   (28.10.2006 в 21:59)   письмо автору
 
   для: cheops   (28.10.2006 в 16:33)
 

Плиз!плиз!плиз!

   
 
 автор: cheops   (28.10.2006 в 22:15)   письмо автору
 
   для: cheops   (28.10.2006 в 16:33)
 

Скелет скрипт должен выглядеть примерно следующим образом
<?php
  
// Обработчик
if(!empty($_POST))
{
  
$arr = array(); 
  switch(
$_GET['d'])
  {
    case 
1:
      
// Kan=1
      
for($i 0$i 15$i++)
      {
        if(!empty(
$_POST["Name".$i])) $arr[] = $i;
      }
      break;
    case 
2:
      
// Kan=2
      
for($i 0$i 10$i++)
      {
        if(!empty(
$_POST["Name".$i])) $arr[] = $i;
      }
      break;
  }
  if(!empty(
$arr)) $query "INSERT INTO tbl VALUES (NULL, '".implode(",",$arr)."')"
  else 
$query "INSERT INTO tbl VALUES (NULL, '')"
  
mysql_query($query);
}
  
//HTML-форма
?>
<form method=post>
<?php
  
switch($_GET['d'])
  {
    case 
1:
      
// Kan=1
      
for($i 0$i 15$i++)
      {
        echo 
'<input name="Name'.$i.'" type="checkbox" value="ON">'.$i.'<br>';
      }
      break;
    case 
2:
      
// Kan=2
      
for($i 0$i 10$i++)
      {
        echo 
'<input name="Name'.$i.'" type="checkbox" value="ON">'.$i.'<br>';
      }
      break;
  }
?>
<input type=submit value="OK">
</form>

   
 
 автор: xpom   (28.10.2006 в 22:28)   письмо автору
 
   для: cheops   (28.10.2006 в 22:15)
 

А как сделать запрос чтобы список строилси из таблицы?

   
 
 автор: cheops   (28.10.2006 в 22:35)   письмо автору
 
   для: xpom   (28.10.2006 в 22:28)
 

Таблица Towns имеется ввиду? Приведите пару строк из таблицы, если не сложно?

   
 
 автор: xpom   (28.10.2006 в 22:45)   письмо автору
 
   для: cheops   (28.10.2006 в 22:35)
 

>Таблица Towns имеется ввиду?
Да она!


>Приведите пару строк из таблицы, если не сложно?


INSERT INTO Towns (Kan, TowName) VALUES
    ('1', 'Москва'),
    ('1', 'Питер'),
    ('2', 'Киев'),
    ('2', 'Орел')"

   
 
 автор: cheops   (29.10.2006 в 00:55)   письмо автору
 
   для: xpom   (28.10.2006 в 22:45)
 

Можно поступить следующим образом
<?php 
  
// Устанавливаем соединение с базой данных
  
require_once("config.php");
  
// Обработчик 
  
if(!empty($_POST)) 
  { 
    if(!
preg_match("|^[\d]+$|",$_POST['d'])) exit("Не верный формат запроса");
    
$query "SELECT * FROM Towns WHERE Kan = ".$_POST['d'];
    
$twn mysql_query($query);
    if(!
$twn) exit(mysql_error());
    
$arr = array();
    if(
mysql_num_rows($twn))
    {
      while(
$town mysql_fetch_array($twn))
      {
        if(!empty(
$_POST[$town['TID']])) $arr[] = $town['TID']
      }
    }

    if(!empty(
$arr)) $query "INSERT INTO tbl VALUES (NULL, '".implode(",",$arr)."')";  
    else 
$query "INSERT INTO tbl VALUES (NULL, '')";  
    
mysql_query($query); 
  } 
  
//HTML-форма 
?> 
<form method=post> 
<?php 
  
// Проверяем является ли параметр $_GET['d'] числом
  
if(!preg_match("|^[\d]+$|",$_GET['d'])) exit("Не верный формат запроса");
  
$query "SELECT * FROM Towns WHERE Kan = ".$_GET['d'];
  
$twn mysql_query($query);
  if(!
$twn) exit(mysql_error());
  if(
mysql_num_rows($twn))
  {
    while(
$town mysql_fetch_array($twn))
    {
      echo 
'<input name="'.$town['TID'].'" type="checkbox" value="ON">'.$town['TowName'].'<br>'
    }
  }
?> 
<input type=hidden name=d value=<?php echo $_GET['d']; ?>>
<input type=submit value="OK"> 
</form>

   
 
 автор: xpom   (29.10.2006 в 12:58)   письмо автору
 
   для: cheops   (29.10.2006 в 00:55)
 

Помогите, пожалуйста найти ошибку, в обработчике вот в этой части кода, где пишет on line 175 в этой строке я напишу в коде то что оно пишет!

if(mysql_num_rows($twn)) 
    { 
      while($town = mysql_fetch_array($twn)) 
      { 
        if(!empty($_POST[$town['TID']])) $arr[] = $town['TID'] 
      }  //PHP Parse error: parse error, unexpected '}' in C:\Apache2.2\htdocs\cat\adds.php on line 175 
    } 

   
 
 автор: cheops   (29.10.2006 в 17:51)   письмо автору
 
   для: xpom   (29.10.2006 в 12:58)
 

Поставьте точку с запятой после строки
<?php
if(!empty($_POST[$town['TID']])) $arr[] = $town['TID'
?>

   
 
 автор: xpom   (29.10.2006 в 20:26)   письмо автору
 
   для: cheops   (29.10.2006 в 17:51)
 

Точка с запятой почемуто не решила проблему? Все осталось так как и было, наверное где-то есть еще ошибка? Помогите плиз!!!

   
 
 автор: xpom   (29.10.2006 в 21:05)   письмо автору
 
   для: xpom   (29.10.2006 в 20:26)
 

Нет все помогло, спасибо работае. Это я в наборе ошибся.

   
 
 автор: xpom   (29.10.2006 в 21:33)   письмо автору
 
   для: xpom   (29.10.2006 в 21:05)
 

Если у вас есть время, подскажите как построить такой же список в HTML-форме, только чтобы те элементы из списка, которые есть в поле Town таблицы Dan были уже с флажками?

   
 
 автор: cheops   (30.10.2006 в 00:36)   письмо автору
 
   для: xpom   (29.10.2006 в 21:33)
 

Просто добавьте ключевое слово checked в определении флажка
<?php
  
echo '<input name="'.$town['TID'].'" type="checkbox" value="ON" checked>'.$town['TowName'].'<br>';
?>

   
 
 автор: xpom   (30.10.2006 в 22:27)   письмо автору
 
   для: cheops   (30.10.2006 в 00:36)
 

Спасибо, насчет флажка понятно.
Подскажите пожалуйста, вот у меня список в форме строится в столбик в низ, а можно сделать чтобы элементы списка делились по 3 штуки в столбике, а остальные переносились на следующий столбик рядом? А то много вниз места занимают.

   
 
 автор: cheops   (30.10.2006 в 22:37)   письмо автору
 
   для: xpom   (30.10.2006 в 22:27)
 

Вам обязательно столбик рядом
1 4 7 10
2 5 8 11
3 6 9 12

или можно построчно выводить (это просто легче :)
1 2 3
4 5 6
7 8 9
10 11 12

   
 
 автор: xpom   (30.10.2006 в 22:40)   письмо автору
 
   для: cheops   (30.10.2006 в 22:37)
 

Можно построчно выводить, без разницы!

   
 
 автор: cheops   (30.10.2006 в 22:52)   письмо автору
 
   для: xpom   (30.10.2006 в 22:40)
 

Используйте следующий блок
<?php
  
if(mysql_num_rows($twn))  
  {  
    echo 
"<table>";
    while(
$town mysql_fetch_array($twn))  
    {  
      
$i 0;
      if(!empty(
$_POST[$town['TID']]))
      {
        if(
$i == 0) echo '<tr>';
        echo 
'<td><input name="'.$town['TID'].'" type="checkbox" value="ON" checked>'.$town['TowName'].'</td>';
        
$i++;
        if(
$i == 3)
        {
          echo 
'</tr>';
          
$i 0;
        }
      }
    }
    echo 
"</table>";
  }
?>

   
 
 автор: xpom   (31.10.2006 в 10:46)   письмо автору
 
   для: cheops   (30.10.2006 в 22:52)
 

Почему-то не получается? Список выводится как и раньше вниз в столбик.
Хелп плиз!!!

   
 
 автор: cheops   (31.10.2006 в 12:50)   письмо автору
 
   для: xpom   (31.10.2006 в 10:46)
 

Ошибся чуть-чуть, замените предыдущий блок на этот
<?php 
  
if(mysql_num_rows($twn))   
  {   
    echo 
"<table>"
    
$i 0
    while(
$town mysql_fetch_array($twn))   
    {   
      if(!empty(
$_POST[$town['TID']])) 
      { 
        if(
$i == 0) echo '<tr>'
        echo 
'<td><input name="'.$town['TID'].'" type="checkbox" value="ON" checked>'.$town['TowName'].'</td>'
        
$i++; 
        if(
$i == 3
        { 
          echo 
'</tr>'
          
$i 0
        } 
      } 
    } 
    echo 
"</table>"
  } 
?>

   
 
 автор: xpom   (01.11.2006 в 21:35)   письмо автору
 
   для: cheops   (31.10.2006 в 12:50)
 

Спасибо большое работает! :)

Можете объяснить как данные заносятся в таблицу. Т.е. какая структура поля где заносятся данные? Чтобы я мог делать запрос к этим данным. Вобщем нужно чтобы данные заносились в поле Town таблицы Dan (выше структура таблицы).

$query = "INSERT INTO tbl VALUES (NULL, '".implode(",",$arr)."')";   

Я так понял что данные заносятся в отдельную таблицу.

А что делает команда implode?

   
 
 автор: cheops   (01.11.2006 в 23:26)   письмо автору
 
   для: xpom   (01.11.2006 в 21:35)
 

Функция implode() преобразует элементы массива $arr в строку, разделяя их символом из первого параметра (в нашем случае - это запятая).

   
 
 автор: xpom   (01.11.2006 в 23:30)   письмо автору
 
   для: cheops   (01.11.2006 в 23:26)
 

Подскажите пожалуйста как сделать чтобы данные заносились в поле Town таблицы Dan (выше структура таблицы)? help please!!!

   
 
 автор: cheops   (01.11.2006 в 23:51)   письмо автору
 
   для: xpom   (01.11.2006 в 23:30)
 

Нужно выполнить SQL-запрос, а что вызывает сложности?

   
 
 автор: xpom   (02.11.2006 в 17:54)   письмо автору
 
   для: cheops   (01.11.2006 в 23:51)
 

Я делаю вот такой SQL-запрос


mysql_query("INSERT INTO Dan (Town)
            VALUES
            ('".implode(",",$arr)."')",$db);

И у меня поле Town почему-то принимает значение NULL?

   
 
 автор: cheops   (02.11.2006 в 20:52)   письмо автору
 
   для: xpom   (02.11.2006 в 17:54)
 

А массив $arr что содержит (сколько в нём элементов)?
<?php
  
echo "<pre>";
  
print_r($arr);
  echo 
"</pre>";
?>

   
 
 автор: xpom   (03.11.2006 в 14:03)   письмо автору
 
   для: cheops   (02.11.2006 в 20:52)
 

А этот массиф каждый раз будет содержать разное колличество элементов? Зависит от того сколько флажков поставит пользователь.

Вот я отметил 2 флажка и вывело:

Array
(
    [0] => 4
    [1] => 5
)


   
 
 автор: xpom   (03.11.2006 в 22:52)   письмо автору
 
   для: xpom   (03.11.2006 в 14:03)
 

Help please!!!

   
 
 автор: cheops   (03.11.2006 в 23:01)   письмо автору
 
   для: xpom   (02.11.2006 в 17:54)
 

Вы вставляете лишь одно значение Town, однако массив у вас содержит большее количество значений, вам следует реорганизовать запрос, например, так
<?php
  
foreach($i 0$i count($arr); $i++) $arr[$i] = "('".$arr."')";
mysql_query("INSERT INTO Dan (Town) 
            VALUES 
            "
.implode(",",$arr)."",$db);
?>

   
 
 автор: xpom   (04.11.2006 в 11:06)   письмо автору
 
   для: cheops   (03.11.2006 в 23:01)
 

Почемуто так не получается выдает ошибку: PHP Parse error: parse error, unexpected ';' in C:\Apache2.2\htdocs\cat\adds.php on line 86
вот в этой строке:

foreach($i = 0; $i < count($arr); $i++) $arr[$i] = "('".$arr."')"; 

   
 
 автор: cheops   (04.11.2006 в 12:01)   письмо автору
 
   для: xpom   (04.11.2006 в 11:06)
 

А что находится в строке перед этой строкой?

   
 
 автор: xpom   (04.11.2006 в 12:57)   письмо автору
 
   для: cheops   (04.11.2006 в 12:01)
 

перед этой стракой находится вот такой скрипт:

 if(!empty($_POST))  
  {  
    if(!preg_match("|^[\d]+$|",$_POST['d'])) exit("Не верный формат запроса"); 
    $query = "SELECT * FROM Towns WHERE Kan = ".$_POST['d']; 
    $twn = mysql_query($query); 
    if(!$twn) exit(mysql_error()); 
    $arr = array(); 
    if(mysql_num_rows($twn)) 
    { 
      while($town = mysql_fetch_array($twn)) 
      { 
        if(!empty($_POST[$town['TID']])) $arr[] = $town['TID'] 
      } 
    } 

   
 
 автор: cheops   (04.11.2006 в 13:23)   письмо автору
 
   для: xpom   (04.11.2006 в 12:57)
 

В my.ini закомментируйте все директивы, связанные с InnoDB.

   
 
 автор: xpom   (04.11.2006 в 15:07)   письмо автору
 
   для: cheops   (04.11.2006 в 13:23)
 

>В my.ini закомментируйте все директивы

А где это в my.ini ?

   
 
 автор: cheops   (04.11.2006 в 15:10)   письмо автору
 
   для: xpom   (04.11.2006 в 15:07)
 

Извиняюсь, это я веткой форума ошибся, не в ту тему ответил :)))

   
 
 автор: cheops   (04.11.2006 в 15:12)   письмо автору
 
   для: xpom   (04.11.2006 в 12:57)
 

Давайте новую тему заведём - эта уже слишком длинная и в ней вы прикрепите то, что у вас сейчас есть и мы продолжим терзать ваш скрипт :)

   
Rambler's Top100
вверх

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