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

Форум PHP

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

 

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

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

тема: Эх массивы...
 
 автор: Artemy   (22.05.2005 в 20:38)   письмо автору
 
 

Добрый вечер!
Снова прошу помощи, т.к. проштудировал несколько мануалов, но не нашел там ни намёка, ни ответа на свой вопрос!
Хочется написать свой каталог товаров, но вот встала загвоздка, каталог рассчитывается на 1000 позиций, следовательно обновлять цены, заходя на страницу каждого товара, довольно таки муторно, проще сделать страницу где будут выдаваться сразу все позиции, определенного подкаталога, и их цены в <input type='text'>, причем ценовых колонок будет три, а следовательно через метод POST будет передаваться обработчику четыре массива: $id_art[], $rub[], $usd[], $eur[].

Вопрос в следующем как организовать обновление цен, если вся база храниться в MySQL?
А то, что то в голове ну не одной мысли по этому поводу!

   
 
 автор: glsv (Дизайнер)   (22.05.2005 в 23:27)   письмо автору
 
   для: Artemy   (22.05.2005 в 20:38)
 

У вас основное затруднение в передаче данных или именно в обновлении?
Мне кажется, что в передаче... по крайней мере, в сходной ситуации меня волновал именно это вопроос.
Вот это форма.

<form action="action.php" method="post">
<!-- Первая позиция-->
<input type="text" name="rub[1][]" size="40" maxlength="256">
<input type="text" name="usd[1][]" size="40" maxlength="256">
<input type="text" name="eur[1][]" size="40" maxlength="256">
<!-- Вторая позиция-->
<input type="text" name="rub[2][]" size="40" maxlength="256">
<input type="text" name="usd[2][]" size="40" maxlength="256">
<input type="text" name="eur[2][]" size="40" maxlength="256">
<input type="submit" value="Отправить">
</form>

В именах элементов rub[1][], rub[2][] вместо 1 и 2 должны стоять реальные идентификаторы каждой из позиций. $id_art наверное.
Если заполнить и нажать на кнопку, то вот такой код в обработчике

<?
 
echo "<pre>";
 
print_r($_POST);
 echo 
"</pre>"
?>

выведет следующее

Array
(
    [rub] => Array
        (
            [1] => Array
                (
                    [0] => 11
                )

            [2] => Array
                (
                    [0] => 44
                )

        )

    [usd] => Array
        (
            [1] => Array
                (
                    [0] => 22
                )

            [2] => Array
                (
                    [0] => 55
                )

        )

    [eur] => Array
        (
            [1] => Array
                (
                    [0] => 33
                )

            [2] => Array
                (
                    [0] => 66
                )

        )

)

Т.е. все переменные пришли.
Чтобы получить данные для первой позиции нужно обратиться к полученным массивам через идентификатор равный 1.

echo $[rub][1];
echo $[usd][1];
echo $[eur][1];

   
 
 автор: Artemy   (23.05.2005 в 10:44)   письмо автору
 
   для: glsv (Дизайнер)   (22.05.2005 в 23:27)
 

Да, возможно вся проблема состоит в обновлении БД!
Никак не могу додуматься как организовать цикл, который будет обновлять цены в БД.
Не могли бы Вы подсказать цикл, который будет обращаться к MySQL, если будет передаваться такие массивы: $rub[$id][$pr_rub], $usd[$id][$pr_usd] и $eur[$id][$pr_eur]?

   
 
 автор: cheops   (23.05.2005 в 12:52)   письмо автору
 
   для: Artemy   (23.05.2005 в 10:44)
 

Цены как меняются в зависимости от курса доллара, евро и пр. или ещё из-за чего-то?

   
 
 автор: Artemy   (23.05.2005 в 13:28)   письмо автору
 
   для: cheops   (23.05.2005 в 12:52)
 

Да! Они зависят от курса доллара и евро! Т.е. три ценновых колонок, причем только она из с каким-то значением, а все остальные равны нулю!
 if($cat['price_usd'] == 0.00 && $cat['price_eur'] == 0.00)
            {
            $price_rub = $cat['price_rub'];
            $price_usd = $price_rub/$usd;
            $price_eur = $price_rub/$eur;
            }
          if($cat['price_rub'] == 0.00 && $cat['price_eur'] == 0.00)
            {
            $price_usd = $cat['price_usd'];
            $price_rub = $price_usd*$usd;
            $price_eur = $price_rub/$eur;
            }
          if($cat['price_rub'] == 0.00 && $cat['price_usd'] == 0.00)
            {
            $price_eur = $cat['price_eur'];
            $price_rub = $price_eur*$eur;
            $price_usd = $price_rub/$usd;
            }

   
 
 автор: cheops   (23.05.2005 в 23:03)   письмо автору
 
   для: Artemy   (23.05.2005 в 13:28)
 

Хм... а нельзя во всей базе данных цену поменять при помощи SQL-запроса UPDATE
UPDATE tbl SET price/$old*$new

где $old - старый курс, а $new - новый, price - колонка с ценой.

   
 
 автор: glsv (Дизайнер)   (23.05.2005 в 13:34)   письмо автору
 
   для: cheops   (23.05.2005 в 12:52)
 

--

   
 
 автор: Artemy   (23.05.2005 в 13:47)   письмо автору
 
   для: glsv (Дизайнер)   (23.05.2005 в 13:34)
 

Что это значит?

   
 
 автор: glsv (Дизайнер)   (24.05.2005 в 04:09)   письмо автору
 
   для: Artemy   (23.05.2005 в 13:47)
 

Я начал вам отвечать, но полностью ответить не успевал и пришлось стереть свой пост.

Так, у вас же все позиции сразу меняются. Ведь так?
Тогда вы пробегаете по всем позициям и изменяете каждую. Я не знаю структуру вашей базы данных, поэтому пишу наугад.

<?
  
// Запрос к таблице, которая содержит позиции
  
$query="SELECT * FROM table";
  
$res=mysql_query($query);
  while (
$row mysql_fetch_array($res))
  {
    
// Пробегаем по всем записям и обновляем каждую запись
    // Допустим, поле $row["id_pos"] содержит идентификатор позиции
    
$id $row["id_pos"];
    
// Здесь такая же обработка, как и у вас, только используя массив $_POST
    
if($_POST["rub"][$id] == 0.00 && $_POST["eur"][$id] == 0.00)
    {
       
$price_usd $_POST["usd"][$id]; 
       
$price_rub $price_usd*$usd
       
$price_eur $price_rub/$eur;
    }
    
// Далее по аналогии
   
if($_POST["usd"][$id] == 0.00 && $_POST["eur"][$id] == 0.00)
   {

   }
   if(
$_POST["usd"][$id] == 0.00 && $_POST["rub"][$id] == 0.00)
   {

   }
   
// Формируем и выполняем запрос на обновление каждой позиции
    
$query_upd="UPDATE table 
                           SET price_rub=
$price_rub
                                   price_eur= 
$price_eur
                                   price_usd= 
$price_usd 
                           WHERE id_pos="
.$row["id_pos"];
     
$res_upd mysql_query($query_upd);
  }
?>

   
 
 автор: Artemy   (24.05.2005 в 10:17)   письмо автору
 
   для: glsv (Дизайнер)   (24.05.2005 в 04:09)
 

Почти то, что надо!
Большое Вам, Дизайнер, спасибо!

   
Rambler's Top100
вверх

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