Xpoint
   [напомнить пароль]

Помогите разобраться.Не работает multiple insert

Метки: [без меток]
2007-08-21 11:11:36 [обр] Sample[досье]

Помогите разобраться с multiple инсертом и выводом данных.
Выбираю несколько названий, потом submit.
Добовляется в таблицу только одно название.

Как сделать чтобы было так: сколько названии выбрано, столько и добавлено после submita.

Есть 2 таблицы
1.Таблица frames(FrameID,FrameType)
2.Таблица customer(ID, FrameID, Code, Area)

$query = "INSERT INTO frames (FrameID) VALUES ('$FrameID')";   
***
<select name="FrameID[]" type="text" size="5" multiple="true">
 <?php $request = "SELECT * FROM frames ORDER BY FrameType";
          $result = mysql_query($request);
         while ($row=mysql_fetch_array($result)) {
         echo "<option value=\"$row[FrameID]\">$row[FrameType]</option>";
                    };?></select>
спустя 3 часа 3 минуты [обр] Дмитрий Попов(171/509)[досье]
  1. Я не увидел в коде никакого упоминания таблицы customer
  2. Что такое "multiple инсерт"? Терминологией надо правильно пользоваться
  3. MySQL тут не при чем.
  4. Подсказка: после субмита сделайте var_dump($FrameID)
  5. Подсказывать что-то большее бесполезно - из Вашего вопроса абсолютно не понятно - что Вы уже сделали...
спустя 1 час 42 минуты [обр] Алексей Севрюков(162/1280)[досье]
Sample[досье] пробегатесь циклом по массиву FrameID и вставляете по одной записи за проход.
спустя 6 часов [обр] Sample[досье]

Ошибся запросом.

$query = "INSERT INTO customer (FrameID,Code,Area) VALUES ('$FrameID','Code','Area')";
 $result = mysql_query($query);

Пример:
Table frames

FrameIDFrameType
1Wood
9Vinyl

Table customer

IDFrameIDCodeArea
11,9201N1

Во FrameID в Table customer вставить записи как в примере.
Код selecta выше - вывод в форме из Table frames.

Помогите разобраться на каком нибудь простом примере. Я раньше этого не делал и никак пока не доходит как это сделать.

спустя 1 час 44 минуты [обр] Алексей Севрюков(162/1280)[досье]
$f=join(",",$FrameID);
$query = "INSERT INTO customer (FrameID,Code,Area) VALUES ('$f','Code','Area')";
?
спустя 23 минуты [обр] Sample[досье]

Алексей Севрюков[досье]
Я пробывал так:

$FrameID = join(',', $_POST['FrameID']);
$query = "INSERT INTO customer (FrameID,Code,Area) VALUES ('$f','$Code','$Area')";

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

спустя 27 минут [обр] Алексей Севрюков(162/1280)[досье]
Sample[досье] Вы проделали пункт №4, предложенный Дмитрием? Если нет то проверяйте и результат в студию.
спустя 1 час 6 минут [обр] Sample[досье]
"NULL" почемуто выводится.
спустя 1 час 3 минуты [обр] Алексей Севрюков(162/1280)[досье]
Sample[досье] Вот и ответ на Ваш вопрос, разбирайтесь почему. Вы точно форму методом POST отправляете?
спустя 6 часов [обр] Sample[досье]
Привел код
if (isset($_POST['sendnow']))
{
$FrameID = join(',', $_POST['FrameID']);
$FrameType=$_POST['FrameType'];
$Code=$_POST['Code'];
$Area=$_POST['Area'];
$query = "INSERT INTO customer (FrameID,Code,Area) VALUES ('$f','$Code','$Area')";
$result = mysql_query($query)
}
else
{
<form name="form1" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<select name="FrameID[]" type="text" size="5" multiple="true">
 <?php $request = "SELECT * FROM frames ORDER BY FrameType";
          $result = mysql_query($request);
         while ($row=mysql_fetch_array($result)) {
         echo "<option value=\"$row[FrameID]\">$row[FrameType]</option>";
                    };?></select>
<input type="submit" name="sendnow" value="ADD">
<?php
};
?>
спустя 56 минут [обр] Алексей Севрюков(162/1280)[досье]
$f = join(',', $_POST['FrameID']);
и потом, что толку приводить код, если у Вас массив FrameID пустой приходит. Попробуйте GET, посмотрите какие параметры появляются в URL после нажатия кнопки ADD.
спустя 17 минут [обр] Sample[досье]

Вроде что то получилось

При var_dump($FrameID)

Выводится
string(3) "7,2"

Но в базу записывается только первое значение (7)

спустя 22 минуты [обр] Алексей Севрюков(162/1280)[досье]
Sample[досье] Так, уже лучше. Какого типа поле FrameID в БД? Наверно INT?
спустя 14 минут [обр] Sample[досье]
Да, INT
спустя 3 минуты [обр] Дмитрий Попов(171/509)[досье]
:) А почему int?
спустя 25 минут [обр] Sample[досье]

А, точно. Я забыл поменять.
Все заработало. Спасибо!

Как теперь сделать чтобы при выводе те значения которые были добавлены в базу были типом selected, то есть выделены.

Так я выводил не для multiple. Здесь выводится весь список и должно подсвечиваться выбранное.
А для вывода multiple так не работает.
Подскажите что надо сделать.

<select name="FrameID" type="text">';
  $res = mysql_query("SELECT * FROM frames ORDER BY FrameType");
              if (mysql_num_rows($res) > 0) {
                $r = mysql_fetch_array($res);
                while (is_array($r)) {
                  $dID = $r["FrameID"];
                  $NameFrameType = $r["FrameType"];
                  echo("<option value='$dID' " . (($dID == $FrameID) ? "selected" : "") . ">$NameFrameType</option>");
                  $r = mysql_fetch_array($res);
                }
              }
              mysql_free_result($res);echo '</select>
спустя 1 час 9 минут [обр] Алексей Севрюков(162/1280)[досье]
Sample[досье] Во-первых, в таблице frames нет этих данных для выделения. Они находятся в таблице customers (поле FrameID находится ведь в ней). Во-вторых, есть несколько вариантов реализации: регуляркой, проверкой в цикле и хэшем.
спустя 5 минут [обр] Дмитрий Попов(171/509)[досье]

Алексей Севрюков[досье]
> регуляркой, проверкой в цикле и хэшем.
Э... Я, наверное, что-то не понимаю, но ни один из этих способов не является адекватным для данной структуры (ИМХО)

Sample[досье]
По-моему Вы вообще не представляете себе что делаете. Даже примерно.
Почему Вы считаете что проверка $dID==$FrameID должна работать, когда $dID=3 а $FrameID='2,5,3,7'???

З.Ы. 1. www.php.net/explode, www.php.net/in_array

  1. Пожалуйста, попробуйте САМИ разобраться с этой проблемой. Вообще - пробуйте думать сами. Долго думать. И только когда долгие раздумья ни к чему не приводят - задавайте очередной вопрос на форуме.
спустя 26 секунд [обр] Дмитрий Попов(171/509)[досье]
М Перенесено из форума "Компьютеры::Базы данных (СУБД)::СУБД MySQL"
спустя 10 минут [обр] Алексей Севрюков(162/1280)[досье]

Дмитрий Попов[досье] in_array та же самая проверка в цикле, не так ли, прикрытая специальной функцией (в PHP помоему они на любые случаи в жизни есть)? Хэш, в данном случае не уместен, согласен. А регулярка вполне подошла бы. Я имею Ввиду примерно следующее (на Perl):

my $selected=1 if $FrameID=~m#^$c,|,$c,|,$c$#;

где $c - текущий id в цикле для вывода option.

спустя 28 минут [обр] Дмитрий Попов(171/509)[досье]

Алексей Севрюков[досье]
В цикле, да. Только есть разница - делается эта проверка на PHP с его избыточной структурой, или на уровне ядра на C.
Несмотря на то, что сейчас посмотрел исходники - там даже оптимизации никакой нет (цикл достаточно тупой)...

А про регулярку... Думаю автору с его задачей по барабану через что делать, хоть через strpos :)

спустя 2 часа 1 минуту [обр] Алексей Севрюков(162/1280)[досье]
Дмитрий Попов[досье] Я просто не знаю php )) Иначе сразу предложил бы in_array.
спустя 3 минуты [обр] Sample[досье]
Сделал такой вариан.
Но не могу понять в чем ошибся. Выводится пустота.
<select name="FrameID[]" multiple="multiple">
<?

$count = count($FrameID);

$query = "SELECT * FROM frames";
$mysql_result = mysql_query($query);

while($row = mysql_fetch_row($mysql_result))
{
    print("<option value=\"$row[0]\"");

    for($i=0; $i<$count; $i++)
    {
        if($row[0] == "$FrameID[$i]") {
            print(' selected="selected"');
        }
    }

    print(">$row[1]</option>");
}

?></select>
спустя 1 час 23 минуты [обр] Алексей Севрюков(162/1280)[досье]
Sample[досье] Читайте что написал Дмитрий. Помоему Вы абсолютно не понимаете что пишите. Наверно наугад и потом проверяете работает или нет.
спустя 53 минуты [обр] Дмитрий Попов(171/509)[досье]
Или он просто издевается...
спустя 48 минут [обр] Sample[досье]
Дмитрий Попов[досье]
Нет я не издеваюсь. У меня не получается сделать. Я этого раньше не делал.
спустя 21 минуту [обр] Алексей Севрюков(162/1280)[досье]
Sample[досье] В таком случае давайте поступим следующим образом: Вы словами опишите что хотите получить как пользователь. Потому что я, честно говоря, теряюсь в догадках что Вы хотите сделать, видя Ваш код.
спустя 41 минуту [обр] Sample[досье]

Попробую обьяснить.
Таблицы указаны выше.
Мне надо вывести все значения из таблицы "frames". И сделать выделенными только те значения, которые записаны в таблицу customer в поле FrameID.

Пример:
значения табицы frames
1 - wood
2 - metall
3- vinyl
4 - Sample
5 - sample 1
Допустим в таблицы customer в поле FrameID записаны значения (3,5). То должны вывестись все значения, а значения (3,5) должны быть выделены. <options selected>
Пример, как должен выглядить <select> в браузере

Wood
Metall
vinyl
Sampe
Sampe1
спустя 1 час 36 минут [обр] Дмитрий Попов(171/509)[досье]

Что хочет сделать, мне как раз понятно. Мне непонятно почему человек не хочет думать.

Сейчас, конечно, кто-то даст готовый код.

Но на мой взгляд отсыла в ман к функциям explode и in_array более чем достаточно. Если человек не сможет разобраться после этого - ну значит точно время терять на него не стоит

спустя 26 минут [обр] Алексей Севрюков(162/1280)[досье]

Sample[досье]

И сделать выделенными только те значения, которые записаны в таблицу customer в поле FrameID.

тогда почему у Вас в запросе ТОЛЬКО таблица frames, куда customers подевалась?

спустя 35 минут [обр] Sample[досье]
Вроде разобрался.
 
<?php
 <select name=\"FrameID[]\" multiple=\"true\" size=\"4\" >";
 $result = mysql_query("SELECT * FROM frames ORDER BY FrameType");
while($emp = mysql_fetch_object($result)){
 $empArray = explode(',', $FrameID); 
$selected = '';
if(in_array($emp->FrameID, $empArray)){
$selected = ' selected';
}
echo "<option value=\"".$emp->FrameID."\"".$selected.">".$emp->FrameType."</option>\n";
}
echo "</select>\n";
 
?>
спустя 2 минуты [обр] Алексей Севрюков(162/1280)[досье]
Sample[досье] Не совсем то конечно, но уже лучше. Можете ведь, если захотите.
спустя 30 минут [обр] Sample[досье]
Огромное спасибо за помощь.
Powered by POEM™ Engine Copyright © 2002-2005