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

Форум PHP

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

 

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

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

тема: Из динамической формы в базу данных
 
 автор: vorobey   (25.03.2010 в 18:57)   письмо автору
5.5 Кб
 
 

Скрипт выводит небольшой список цен и список в виде колличества(см скрин). Так как там несколько строк я немогу после выбора колличества товара и его цены оправить в базу. Тоесть если бы было одно наименование, то проще...
Вобщем помогите из этой формы сделать запись в базу.

<form name='form' method='post' action='./add.php'>
<?php
 $result_form
=mysql_query("SELECT * FROM price ORDER BY sort ",$db);
$myrow=mysql_fetch_array ($result_form);    
do
{
$price1=$myrow['price1']-$myrow['price1']*$status/100;//вычисление процентов
$price2=$myrow['price2']-$myrow['price2']*$status/100;//$status скидка юзера
printf("
<tbody>
            <tr>
              <td width='20'>№%s</td>
              <td>    %s    </a></td>
              <td>                                           %s грн.
                <select class='textfield' name='test' >
                    <optgroup label='штук' style=''> 
                        <option value='0'>0</option>
                        <option value='1'>1</option>
                        <option value='2'>2</option>
                    </optgroup>
                </select>
            </td>
              <td>                                            %s грн.
                <select class='textfield' name='test' >
                    <optgroup label='штук' style=''> 
                        <option value='0'>0</option>
                        <option value='1'>1</option>
                        <option value='2'>2</option>
                    </optgroup>
                </select>
              </td>
          </tr>
            <tr> </tr>
          </tbody> "
,$myrow['id'],$myrow['model'],$price1,$price2 );
 }
 while (
$myrow=mysql_fetch_array ($result_form))
 
?> 
 <div id='actions'>    <input  class='' type='submit' name='submit'  value='продолжить заказ' />    </div>
 </form>

Не понятна сама концепция вывода из "%s"в базу , ведь в цикле постоянно новое значение.
Может воспользоватся какимто др синтаксисом?
Выводить для каждой строки форму , а потом в базу не очень красиво будет.
ps на скрине полный список

  Ответить  
 
 автор: Slo_Nik   (25.03.2010 в 19:27)   письмо автору
 
   для: vorobey   (25.03.2010 в 18:57)
 

а как Вы пытаетесь записать в базу?
приведите пример запроса к базе на запись

  Ответить  
 
 автор: vorobey   (25.03.2010 в 19:36)   письмо автору
 
   для: Slo_Nik   (25.03.2010 в 19:27)
 

В том-то все и дело что я немогу понять как в моем случае сделать запрос.
хочу вот в таком духе
 <option value='$price1'>$price1</option>

  
 $res= mysql_query("INSERT INTO table(price1,pric2,price3) VALUES ('$price1','$price2','$pric3')");

  Ответить  
 
 автор: Slo_Nik   (25.03.2010 в 19:39)   письмо автору
 
   для: vorobey   (25.03.2010 в 19:36)
 

Вы пробовали это сделать или дальше желания дело не пошло?
что именно Вам не понятно?

  Ответить  
 
 автор: vorobey   (25.03.2010 в 19:52)   письмо автору
 
   для: Slo_Nik   (25.03.2010 в 19:39)
 

те 2 строки что я привел, не заработают в любом случае.
Мне непонятно вот что
когда едет цыклл он подставляет в %(номер) %(модель) %(цена1) %(цена2) %(цена3) из базы
и так пока цикл не закончится 7 раз (может и больше потом будет)

пользователь видит
№1 модель 100 грн 200 грн 300 грн
.......
№2 модел4 300грн 400грн 350 грн

и на против каждой цены свой список выбора колличества товара
после формирования формы как из этих списков, когда пользовательвыбирает количество
отправить эти выбранные количества в базу. Т.е. посылка самих данных. (я не метод post имею ввиду).
А из каких переменных выхватывать данные ?

  Ответить  
 
 автор: Slo_Nik   (25.03.2010 в 19:52)   письмо автору
 
   для: vorobey   (25.03.2010 в 18:57)
 

>Не понятна сама концепция вывода из "%s"в базу , ведь в цикле постоянно новое значение.

сделайте в ячейке таблицы тег input и тогда можете заносить данные в БД


<?php 
// предыдущий код
..................................................

echo 
"<td><input type='text' name='name' value='%s'></td>"

.................................................
// последующий код
?>

  Ответить  
 
 автор: vorobey   (25.03.2010 в 19:57)   письмо автору
 
   для: Slo_Nik   (25.03.2010 в 19:52)
 

а как тогда скрипт поймет что мне нужна value ='s%' из модели 4 или 2 ?
онож должно както различать value ='s%' их там получается 21 штук какие то пустые какието со значением

  Ответить  
 
 автор: Slo_Nik   (25.03.2010 в 20:01)   письмо автору
 
   для: vorobey   (25.03.2010 в 19:57)
 

а вот это в атрибуте name тега input надо задать, имена должны быть разные
и для select тоже
сделайте для первой цены name , допустим, name1 , для второй цены - name2 и т.д.
в начале обработчика напишите

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

и Вы увидите те данные, которые пришли из формы

  Ответить  
 
 автор: vorobey   (25.03.2010 в 20:02)   письмо автору
 
   для: Slo_Nik   (25.03.2010 в 19:52)
 

а понял сделать value тоже динамическим значением какимто из базы....
Скажите , а как синтаксически будет выглядеть
выборка из %s в моем случае ?

  Ответить  
 
 автор: Slo_Nik   (25.03.2010 в 20:14)   письмо автору
 
   для: vorobey   (25.03.2010 в 20:02)
 

ни чего не надо делать, Вы и так уже подставляете динамически из базы данные.
printf($format [,$args...]) выводит аргументы в окно браузера, отформатированные в соответствии со строкой $format. $args Вы получаете из базы, %s(спецификатор) указывает, где $args должен быть помещён в строку $format. в Вашем случае, надо использовать не %s, этот спецификатор используется для подстановки строки, а надо использовать %f для десятичного числа с плавающей точкой.
просто в ячейку таблицы вписать тег input как я писал вышеб но только в ту из которой данные будут записываться в БД

  Ответить  
 
 автор: vorobey   (26.03.2010 в 00:57)   письмо автору
 
   для: Slo_Nik   (25.03.2010 в 20:14)
 

Сделал так, работает как надо.

 <?
 printf
("
<tbody>
            <tr>
              <td width='20'>№%s</td>
              <td><a class='site' href='http://' target='_blank'>        %s    </a></td>
              <td title='модель 1'>                                                                                                %s грн.
                <select class='textfield' name='amount%s' >
                    <optgroup label='штук' style='background:Gainsboro; color:#8B0000'> 
                        <option value='0'>0</option>
                        <option value='1'>1</option>
                        <option value='2'>2</option>
                        <option value='3'>3</option>
                        <option value='4'>4</option>
                        <option value='5'>5</option>
                    </optgroup>
                </select>
            </td>
              <td title='модель 2'>                                                                                                %s грн.
                <select class='textfield' name='amount%s' >
                    <optgroup label='штук' style='background:Gainsboro; color:#8B0000'> 
                        <option value='0'>0</option>
                        <option value='1'>1</option>
                        <option value='2'>2</option>
                        <option value='3'>3</option>
                        <option value='4'>4</option>
                        <option value='5'>5</option>
                    </optgroup>
                </select>
              </td>
           </tr>
            <tr> </tr>
          </tbody> "
,$myrow['id'],$myrow['model'],$price1,$i=$i+1,$price2,$i=$i+);
 
?>

Вы меня наталкнули на мысь, а я наверно не совсем правильно проблему изложил.
Вот не понял зачем мне "%f" онож после знака слишком длинно получается 110.000000 гривен - не красивая цена.
За этот код спосибо
<?php 
echo "<pre>";
print_r($_POST);
echo 
"</pre>";
?> 

както подзабыл.

  Ответить  
 
 автор: psychomc   (25.03.2010 в 22:59)   письмо автору
 
   для: vorobey   (25.03.2010 в 18:57)
 

попов?

  Ответить  
 
 автор: vorobey   (26.03.2010 в 00:46)   письмо автору
 
   для: psychomc   (25.03.2010 в 22:59)
 

в смысле?
кстати это моя фамилия ). Мы знакомы?

  Ответить  
 
 автор: Slo_Nik   (26.03.2010 в 00:56)   письмо автору
 
   для: vorobey   (26.03.2010 в 00:46)
 

фамилия может и Попов, но не Евгений...
правильно?
наберите в google Евгений Попов и всё станет ясно_

кстати, у Вас получается?

  Ответить  
 
 автор: vorobey   (26.03.2010 в 01:00)   письмо автору
 
   для: Slo_Nik   (26.03.2010 в 00:56)
 

да получилось все.
Про попова все знаю и даже понял почему возник вопрос.
из за "do-while" несколько постов ниже уже поминали.
без do первый id хоть убей не вытаскивает.

  Ответить  
 
 автор: Slo_Nik   (26.03.2010 в 01:17)   письмо автору
 
   для: vorobey   (26.03.2010 в 01:00)
 

>без do первый id хоть убей не вытаскивает.

как так?!

  Ответить  
 
 автор: oliss   (26.03.2010 в 01:24)   письмо автору
 
   для: vorobey   (26.03.2010 в 01:00)
 

Значить перед циклом вы уже вызывали $myrow=mysql_fetch_array ($result_form);
сделайте print_r ( $myrow); и вы поймёте почему не стоит использовать mysql_fetch_array( )

  Ответить  
 
 автор: vorobey   (26.03.2010 в 01:52)   письмо автору
 
   для: oliss   (26.03.2010 в 01:24)
 

было только это. К другой таблице обращение
$myrow_user=mysql_fetch_array($result);


А в двух словах можете сказать чем плох ?
mysql_fetch_array( )

  Ответить  
 
 автор: oliss   (26.03.2010 в 02:31)   письмо автору
 
   для: vorobey   (26.03.2010 в 01:52)
 

>А в двух словах можете сказать чем плох ?
>mysql_fetch_array( )

А вы сделали мои рекомендации, что выше ( тогда бы вопроса не возникло ) ?

  Ответить  
 
 автор: vorobey   (26.03.2010 в 02:44)   письмо автору
 
   для: oliss   (26.03.2010 в 02:31)
 

Выдало все записи в таблице print_r ( $myrow);
И что страшного ? Украдут? Взломают?

  Ответить  
 
 автор: Slo_Nik   (26.03.2010 в 01:28)   письмо автору
 
   для: vorobey   (26.03.2010 в 01:00)
 

покажите как Вы без do{...} while пытались поучить id

  Ответить  
 
 автор: vorobey   (26.03.2010 в 01:46)   письмо автору
 
   для: Slo_Nik   (26.03.2010 в 01:28)
 

<?
while ($myrow=mysql_fetch_array ($result_form))
{
$price1=$myrow['price1']-$myrow['price1']*$status/100;//вычисление процентов
........................................
$price7=$myrow['price7']-$myrow['price7']*$status/100;//вычисление процентов
printf("<tbody> 
........................................ 
         </tbody> "
,$myrow['id'],$myrow['model'],$price1,$i=$i+1,$price2,$i=$i+1,$price3,$i=$i+1,$price4,$i=$i+1,$price5,$i=$i+1,$price6,$i=$i+1,$price7,$i=$i+);
 }
 
?> 

под id я имел ввиду всю первую запись в таблице

  Ответить  
 
 автор: Slo_Nik   (26.03.2010 в 01:50)   письмо автору
 
   для: vorobey   (26.03.2010 в 01:46)
 

а это что такое?
$i=$i+1

и не в тему вопрос, куда тег <table></table> подевался?

  Ответить  
 
 автор: vorobey   (26.03.2010 в 01:57)   письмо автору
15.3 Кб
 
   для: Slo_Nik   (26.03.2010 в 01:50)
 

Это $i=$i+1 нужно лятого чтоб получить в post - это количество заказанных товаров.
на скрине (те поля которые в списках)
Array
(
    [amount1] => 0
    [amount2] => 0
    [amount3] => 0
    [amount4] => 0
    [amount5] => 0
    [amount6] => 0
    [amount7] => 0
    [amount8] => 5
    [amount9] => 0
    [amount10] => 0
    [amount11] => 0
    [amount12] => 0
    [amount13] => 0
    [amount14] => 0
    [amount15] => 0
    [amount16] => 3
    [amount17] => 0
    [amount18] => 0
    [amount19] => 0
    [amount20] => 0
    [amount21] => 0
    [amount22] => 0
    [amount23] => 0
    [amount24] => 0
    [amount25] => 0
    [amount26] => 0
    [amount27] => 0
    [amount28] => 0
    [amount29] => 0
    [amount30] => 0
    [amount31] => 0
    [amount32] => 0
    [amount33] => 0
    [amount34] => 0
    [amount35] => 3
    [submit] => продолжить заказ
)

а насчет <table> он расположен выше. шапка таблицы не должна попадать в цикл

  Ответить  
 
 автор: Slo_Nik   (26.03.2010 в 02:02)   письмо автору
 
   для: vorobey   (26.03.2010 в 01:57)
 

>Это $i=$i+1 нужно лятого чтоб получить в post - это количество заказанных товаров.

речь идёт о $_POST ?

  Ответить  
 
 автор: vorobey   (26.03.2010 в 02:06)   письмо автору
 
   для: Slo_Nik   (26.03.2010 в 02:02)
 

Да о POST
в amount1-34 - это товары онито мне нужны для базы
без $i=$i+1 выдовало массив из 6 последних значений.

  Ответить  
 
 автор: Slo_Nik   (26.03.2010 в 02:21)   письмо автору
 
   для: vorobey   (26.03.2010 в 02:06)
 

что то я совсем не пойму, что Вы пытаетесь добиться через $i=$i+1
покажите полностью код

  Ответить  
 
 автор: vorobey   (26.03.2010 в 02:24)   письмо автору
 
   для: Slo_Nik   (26.03.2010 в 02:21)
 

<form name='form' method='post' action='./add.php'>
.....тут ..... html.....
<?php
$i
=0;
 
$result_form=mysql_query("SELECT * FROM price ORDER BY sort ",$db);
$myrow=mysql_fetch_array ($result_form);    
do
{
$price1=$myrow['price1']-$myrow['price1']*$status/100;//вычисление процентов
$price2=$myrow['price2']-$myrow['price2']*$status/100;
$price3=$myrow['price3']-$myrow['price3']*$status/100;
$price4=$myrow['price4']-$myrow['price4']*$status/100;
$price5=$myrow['price5']-$myrow['price5']*$status/100;
$price6=$myrow['price6']-$myrow['price6']*$status/100;
$price7=$myrow['price7']-$myrow['price7']*$status/100;//вычисление процентов

printf("
<tbody>
            <tr>
              <td width='20'>№%s</td>
              <td><a class='site' href='http://' target='_blank'>        %s    </a></td>
              <td title='модель 1'>                                                                                                %s грн.
                <select class='textfield' name='amount%s' >
                    <optgroup label='штук' style='background:Gainsboro; color:#8B0000'> 
                        <option value='0'>0</option>
                        <option value='1'>1</option>
                        <option value='2'>2</option>
                        <option value='3'>3</option>
                        <option value='4'>4</option>
                        <option value='5'>5</option>
                    </optgroup>
                </select>
            </td>
              <td title='модель 2'>                                                                                                %s грн.
                <select class='textfield' name='amount%s' >
                    <optgroup label='штук' style='background:Gainsboro; color:#8B0000'> 
                        <option value='0'>0</option>
                        <option value='1'>1</option>
                        <option value='2'>2</option>
                        <option value='3'>3</option>
                        <option value='4'>4</option>
                        <option value='5'>5</option>
                    </optgroup>
                </select>
              </td>
              <td title='модель 3'>                                                                                                %s грн.
                <select class='textfield' name='amount%s' >
                    <optgroup label='штук' style='background:Gainsboro; color:#8B0000'> 
                        <option value='0'>0</option>
                        <option value='1'>1</option>
                        <option value='2'>2</option>
                        <option value='3'>3</option>
                        <option value='4'>4</option>
                        <option value='5'>5</option>
                    </optgroup>
                </select>
              </td>
              <td title='модель 4'>                                                                                                %s грн.
                <select class='textfield' name='amount%s' >
                    <optgroup label='штук' style='background:Gainsboro; color:#8B0000'> 
                        <option value='0'>0</option>
                        <option value='1'>1</option>
                        <option value='2'>2</option>
                        <option value='3'>3</option>
                        <option value='4'>4</option>
                        <option value='5'>5</option>
                    </optgroup>
                </select>
              </td>
              <td title='модель 5'>                                                                                                %s грн.
                <select class='textfield' name='amount%s' >
                    <optgroup label='штук' style='background:Gainsboro; color:#8B0000'> 
                        <option value='0'>0</option>
                        <option value='1'>1</option>
                        <option value='2'>2</option>
                        <option value='3'>3</option>
                        <option value='4'>4</option>
                        <option value='5'>5</option>
                    </optgroup>
                </select>
            </td>
            <td title='модель 6'>                                                                                                %s грн.
                <select class='textfield' name='amount%s' >
                    <optgroup label='штук' style='background:Gainsboro; color:#8B0000'> 
                        <option value='0'>0</option>
                        <option value='1'>1</option>
                        <option value='2'>2</option>
                        <option value='3'>3</option>
                        <option value='4'>4</option>
                        <option value='5'>5</option>
                    </optgroup>
                </select>
            </td>
            <td title='Ваша цена. Выбрать количество матрасов! '>                                                    %s грн.
                <select class='textfield' name='amount%s' >
                    <optgroup label='штук' style='background:Gainsboro; color:#8B0000'> 
                        <option value='0'>0</option>
                        <option value='1'>1</option>
                        <option value='2'>2</option>
                        <option value='3'>3</option>
                        <option value='4'>4</option>
                        <option value='5'>5</option>
                    </optgroup>
                </select>
            </td>
          </tr>
            <tr> </tr>
          </tbody> "
,$myrow['id'],$myrow['model'],$price1,$i=$i+1,$price2,$i=$i+1,$price3,$i=$i+1,$price4,$i=$i+1,$price5,$i=$i+1,$price6,$i=$i+1,$price7,$i=$i+);
 }
 while (
$myrow=mysql_fetch_array ($result_form))
 
?> 
           <tfoot>
            <tr>

            </tr>
          </tfoot>
        </table>
      </div>
    </div>
    <div id='actions'>    <input  class='' type='submit' name='submit'  value='продолжить заказ' />    </div>
    </form>


'amount%s' к %s подставляется $i=$i+1 . Ну может надо было както красивей оформит а не писать 7 штук $i=$i+1, но это не приоритет.

  Ответить  
 
 автор: Slo_Nik   (26.03.2010 в 02:52)   письмо автору
 
   для: vorobey   (26.03.2010 в 02:24)
 

>Ну может надо было както красивей оформит а не писать 7 штук $i=$i+1, но это не приоритет.
люди стремятся сократить код, а не растягивать одно и тоже по скрипту.
теперь объясните.
это <td width='20'>№%s</td> id записи в таблице БД ?

<td title='модель 1'>,<td title='модель 2'>,<td title='модель 3'> это одна и таже вещь, но только с различиями в цене?
в select для каждого варианта Вы устанавливаете кол-во товара?

и попробуйте в запросе получить пока только id всех записей и вывести через while

$query = "SELECT id FROM price";
$p = mysql_query($query);
 if(mysql_num_rows($p) > 0){
  while($pr = mysql_fetch_assoc($p)){
    print_r($pr);
 }
 }
}

  Ответить  
 
 автор: vorobey   (26.03.2010 в 03:03)   письмо автору
 
   для: Slo_Nik   (26.03.2010 в 02:52)
 

>это <td width='20'>№%s</td> id записи в таблице БД ?
это номер по порядку (нумерация из другого поля будет) те места на скрине №1 -№6

>в select для каждого варианта Вы устанавливаете кол-во товара?
точно.
там над ценниками в шапке приведенны размеры в кв-е 7 (ее нет на скрине)

тоесть одна модель 7 размеров.

спасибо! завтра продолжу

  Ответить  
 
 автор: vorobey   (26.03.2010 в 11:06)   письмо автору
 
   для: vorobey   (26.03.2010 в 03:03)
 

Вот выводит id по порядку.
Array ( [id] => 1 ) Array ( [id] => 2 ) Array ( [id] => 3 ) Array ( [id] => 4 ) Array ( [id] => 5 ) Array ( [id] => 6 ) 

а как подставить мою форму туда?

  Ответить  
 
 автор: Slo_Nik   (26.03.2010 в 13:26)   письмо автору
 
   для: vorobey   (26.03.2010 в 11:06)
 

вместо print_r($pr); форматируйте свой вывод данных

  Ответить  
 
 автор: vorobey   (26.03.2010 в 14:48)   письмо автору
 
   для: Slo_Nik   (26.03.2010 в 13:26)
 

Спасибо так выглядит более правильно и без "do" .
>oliss писал что mysql_fetch_array( ) плох
Я так и не понял почему ?

  Ответить  
 
 автор: Slo_Nik   (26.03.2010 в 14:58)   письмо автору
 
   для: vorobey   (26.03.2010 в 14:48)
 

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

>автор: oliss (26.03.2010 в 01:24)
> для: vorobey (26.03.2010 в 01:00)
>
.Значить перед циклом вы уже вызывали $myrow=mysql_fetch_array ($result_form);
>сделайте print_r ( $myrow); и вы поймёте почему не стоит использовать mysql_fetch_array( )

сделайте

<?php 
$myrow
=mysql_fetch_array ($result_form);
echo 
"<pre>";
 
print_r($myrow);
echo 
"</pre>";
?


и потом


<?php 
$myrow
=mysql_fetch_assoc($result_form);
echo 
"<pre>";
 
print_r($myrow);
echo 
"</pre>";
?


внимательно посмотрите на дамп массива, первого и второго, почитайте в руководстве об этих функциях

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

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