Обработка формы

Stunnets

Новичок
Здравствуйте, есть таблица (список товаров) которая заполняется из БД и кнопка купить
Можно выбрать различные количества нескольких товаров, а после выбора отправить форму, одной кнопкой.
как посмотреть что будет в массиве $good, это и есть выбранные товары, ключ, это id, значение, это выбранное его количество.
Код:
<?php 



//есть подключение к базе 
//далее запрос и вывод таблицы  

$result = mysql_query("SELECT users, tovar, cena, kol, id FROM st_rinok") or die (mysql_error()); 

if(mysql_num_rows($result)) { 
     
    echo '<form method="post"><table class="table_price"><caption>Рынок</caption><tr><th>№</th><th>Продавец</th><th>Товар</th><th>Кол-во</th><th>Цена, руб.</th><th>Кол-во для покупки</th></tr>'; 
     
    for($i=1; $row = mysql_fetch_assoc($result); $i++) { 
        $row = array_map('htmlspecialchars', $row); 
        echo '<tr><td>'.$i.'</td><td>'.implode('</td><td>', array_slice($row, 0, 4)).'</td><td><input type="number" min="0" step="1" name="good['.$row['id'].']" /></td></tr>'; 
    } 
     
    echo '</table><input type="submit" name="button" value="Купить выбранное количество" /></form>';
   
   
} else echo '<p>Товаров нет.</p>'; 
?>

скрин формы выбора товара



Помогите написать обработку при нажатии на кнопку value="Купить выбранное количество"

получается нужно проверить выбрано ли что нибудь вообще, проверить не превышает ли кол-во выбранного товара кол-во имеющегося на складе товара. Цена,руб указывает цену за 1ед товара, значит кол-во выбранного товара нужно умножить на цену. потом из БД st_rinok вычесть то кол-во товара которое выбрал для покупки юзер. И записать выбранное кол-во юзеру в склад (Табл sklad ячейка = наименованию товара зерно=zerno и т.п ) Списать сумму(цену) со счета юзера который покупает (ТБ users ячейка money) и зачислить на счет того кто продавал ( в таблице ПРОДАВЕЦ users FROM st_rinok его счет находится в ТБ users ячейка money. Пробовал разные варианты, но не получается взять выбранные данные пользователем, данные кол-во для покупки и id товара и продавца что бы их обработать как описано выше. Помогите пожалуйста
 

HORO

Новичок
не понял, а чего не получается? По-моему все это легко делается несколькими запросами внутри транзакции БД
 

Stunnets

Новичок
можно пример на моем коде как взять данные введенные пользователем и id продавца . Не получается именно получить данные
 

HORO

Новичок
заменить в таблице рынка users на id продавца
или выбрать товары по id и по имени продавца выбрать продавцов
Ps. первый вариант более правильный, тк не надо имена продавцов по разным таблицам пихать (если имя не id конечно)

пример для первого варианты
Код:
SELECT st_users.user_name, tovar, cena, kol, id
FROM st_rinok, st_users
WHERE st_users.user_id=st_rinok.user_id
 

Stunnets

Новичок
у меня не получается сделать правильный синтаксис из моего кода, можете показать как получить данные POST
 

HORO

Новичок
мм чего-то я не пойму...ну видимо как-то так
PHP:
array_keys($_POST['good']) // массив id товаров
$_POST['good'] // массив выбранное кол-во
 

Stunnets

Новичок
да , а чтобы было переменной так сделать? $tov=array_keys($_POST['good']) $kol=$_POST['good']
 

Stunnets

Новичок
и оно выходит как массив, как из массива выбрать id товара и кол-во хотя бы echo вывести?
 

HORO

Новичок
вывести можно так например print_r($tov);
а выбрать с помощью sql оператора IN() и php implode()
и не забыть array_map("intval",$tov); array_map("intval",$kol)
 
Последнее редактирование:

Stunnets

Новичок
что то я совсем запутался можете показать как из кода
Код:
<?php



//есть подключение к базе
//далее запрос и вывод таблицы

$result = mysql_query("SELECT users, tovar, cena, kol, id FROM st_rinok") or die (mysql_error());

if(mysql_num_rows($result)) {

echo '<form method="post"><table class="table_price"><caption>Рынок</caption><tr><th>№</th><th>Продавец</th><th>Товар</th><th>Кол-во</th><th>Цена, руб.</th><th>Кол-во для покупки</th></tr>';

for($i=1; $row = mysql_fetch_assoc($result); $i++) {
$row = array_map('htmlspecialchars', $row);
echo '<tr><td>'.$i.'</td><td>'.implode('</td><td>', array_slice($row, 0, 4)).'</td><td><input type="number" min="0" step="1" name="good['.$row['id'].']" /></td></tr>';
}

echo '</table><input type="submit" name="button" value="Купить выбранное количество" /></form>';


} else echo '<p>Товаров нет.</p>';
?>
получить переменную $tov // выбранный товар и $kol // количества выбранного товара чтобы можно было дальше работать с ними и с БД
 

HORO

Новичок
мм а кто этот код писал? :)
вообще примерно так
PHP:
if(!empty($_POST['good'])){
   $tov=array_map("intval",array_keys($_POST['good']));
   $kol=array_map("intval",$_POST['good']);
 
   /*далее выборка товаров и прочяя обработка данных*/
   // выборка наример
   $sql=mysql_query("SELECT * FROM st_rinok WHERE id IN(".implode(",",$tov).")");
}else {
/* код который показыват товары */
}
 

Stunnets

Новичок
код писал тоже по примерам // вывод данных из БД в таблицу\\
теперь не могу найти примеров обработать эти данные :)
/*далее выборка ---- после $tov=array_map("intval",array_keys($_POST['good'])); выходит Array как сделать эту выборку
чтоб на экран вышел товар и кол во ?
помогите еще чуть чуть, просто на примерах лучше доходит

и else {
/* код который показывает товары */
} тут получается должны выйти товары которые выбрал юзер?
 

HORO

Новичок
PHP:
if(!empty($_POST['good'])){
   $tov=array_map("intval",array_keys($_POST['good']));
   $kol=array_map("intval",$_POST['good']);
   /*далее выборка товаров и прочяя обработка данных*/
   // выборка наример
   $sql=mysql_query("SELECT * FROM st_rinok WHERE id IN(".implode(",",$tov).")");
   if(mysql_num_rows($sql)>0){
     while($row=mysql_fetch_assoc($sql){
        print_r($row); // выведет все выбранные товары
        print $kol[$row['id']]; // соотв выбранное кол-во.
     }
   }
}else {
/* код который показыват товары на рынке, тот где кол-во товаров нужно выбрать*/
}
 

Stunnets

Новичок
почему то ругается на строку while($row=mysql_fetch_assoc($sql){ Parse error: syntax error, unexpected '{' in

вроде все кавычки правильно в скрипте
 

Stunnets

Новичок
Код:
print_r($row); // выведет все выбранные товары
print $kol[$row['id']]; // соотв выбранное кол-во.
почему выводит вот так
Array ( [id] => 40 [users] => Marina [tovar] => Свиньи [kol] => 5 [cena] => 5 ) 0Array ( [id] => 43 [users] => Marina [tovar] => Люцерна [kol] => 5 [cena] => 5 ) 0Array ( [id] => 46 [users] => Marina [tovar] => Пшеница [kol] => 5 [cena] => 10 ) 0Array ( [id] => 47 [users] => Marina [tovar] => Рыба [kol] => 4 [cena] => 76 ) 0Array ( [id] => 48 [users] => Marina [tovar] => Рыба [kol] => 4 [cena] => 76 ) 0Array ( [id] => 52 [users] => Marina [tovar] => Мясо [kol] => 2 [cena] => 16 ) 5
последняя 5 это я выбрал кол-во товара
можно сделать что бы выводилась только сами значения а не Array ( [id] => 40 [users] => Marina [tovar] => Свиньи [kol] => 5 [cena] => 5 ) 0 ?




без print_r($row); // выведет все выбранные товары
выводит 000005 значит вводит 0 там где товары не выбраны
 

HORO

Новичок
ну соотв. можно перед запросом из $_POST['good'] удалить все пустые элементы, например так array_filter($_POST['good']);
но вообще, если с выводом проблемы, то стоит начать с изучения литературы какой-нибудь и более простых примеров...
 
Сверху