[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Обновление нескольких полей в БД
Фибер Оптик
Здравствуйте!
Возникла проблема,с которой не могу никак разобраться.
Есть такая штука:

PHP
$result mysql_query ("SELECT * FROM cart WHERE user_id='$user_id'",$db);
$myrow mysql_fetch_array ($result);
do
{
 
printf('<input name="kol_tov" type="text" size="3" value="%s">',$myrow['kol_tov']);
}
while (
$myrow mysql_fetch_array ($result));




Как мы видим,выводятся поля с одинаковыми именами kol_tov, но разными значениями value.

Вопрос:при изменение значений в полях, как сделать,чтоб все изменённые поля обновились в БД?



Спустя 1 час, 11 минут, 57 секунд (4.02.2009 - 14:03) REANIMATOR написал(а):
с одного имени никак... тебе нужно сделать имя типа name="array[]"

Спустя 3 часа, 32 минуты, 24 секунды (4.02.2009 - 17:35) Фибер Оптик написал(а):
А ты не можешь подсказать, как именно это реализуется?

Спустя 8 минут, 18 секунд (4.02.2009 - 17:44) REANIMATOR написал(а):
name="kol_tov[]"
в итоге в $_POST['kol_tov[тут номер]'] будут данные из каждого инпута

Спустя 18 минут, 57 секунд (4.02.2009 - 18:03) Фибер Оптик написал(а):
А если я не знаю сколько вообще будет номеров?
Я хочу реализовать что-то типа корзины интернет-магазина.
Вот смотри,что у меня есть....

PHP
<? 
    
$result_user mysql_query ("SELECT id FROM users WHERE login='$login_site'",$db);
$myrow_user mysql_fetch_array ($result_user);
$user_id $myrow_user['id'];
$result mysql_query ("SELECT * FROM cart WHERE user_id='$user_id'",$db);
$myrow mysql_fetch_array ($result);
$SUMM mysql_query ("SELECT SUM(cena_all) FROM cart WHERE user_id='$user_id'",$db);
$myrowSUMM mysql_fetch_array ($SUMM);

echo
'
<table width="100%" border="0" id="news">
    <tr><td valign="top">
    <table border="0" id="way">
  <tr>
    <td><td>Корзина</tr></table>'
;
    if (
mysql_num_rows ($result) == 0)
{
echo 
'
<table width="80%" border="0" class="cart" cellpadding="0" cellspacing="0" align="center">
  <tr>
    <td valign="middle"><div align="center">Корзина пуста</div></td>
</td></table>
'
;
}
else
{
echo 
'<form action="functions/zakaz.php" method="post">
<table width="80%" border="0" class="cart" cellpadding="0" cellspacing="0" align="center">
 <tr>
    <td width="11%" valign="middle" class="td_cart_border_A td_cart_border_R">&nbsp;</td>
    <td width="36%" valign="middle" class="td_cart_border_A td_cart_border_R"><div align="center"><strong>Наименование</strong></div></td>
    <td width="18%" valign="middle" class="td_cart_border_A td_cart_border_R"><div align="center"><strong>Артикул</strong></div></td>
    <td width="10%" valign="middle" class="td_cart_border_A td_cart_border_R"><div align="center"><strong>Цена</strong></div></td>
    <td width="12%" valign="middle" class="td_cart_border_A td_cart_border_R"><div align="center"><strong>Количество</strong></div></td>
    <td width="10%" valign="middle" class="td_cart_border_A td_cart_border_R"><div align="center"><strong>Сумма</strong></div></td>
    <td width="3%" valign="middle" class="td_cart_border_A">&nbsp;</td>
  </tr>'
;
do
{
 
printf('  <tr>
    <td valign="middle" class="td_cart_border td_cart_border_R"><div align="center"><img src="images/catalog/%s" class="img_products_cart"></div></td>
    <td valign="middle" class="td_cart_border td_cart_border_R"><div align="left">%s</div></td>
    <td valign="middle" class="td_cart_border td_cart_border_R"><div align="center">%s</div></td>
    <td valign="middle" class="td_cart_border td_cart_border_R"><div align="center">%s</div></td>
    <td valign="middle" class="td_cart_border td_cart_border_R"><div align="center"><input name="kol_tov[]" type="text" size="3" value="%s"></div></td>
    <td valign="middle" class="td_cart_border td_cart_border_R"><div align="center">%s</div></td>
    <td valign="middle" class="td_cart_border"><div align="center"><a href="cart.php?delete_tovID=%s"><img src="images/delete.png" title="Удалить из списка"></a></div>
    <input name="cena_tov" type="hidden" value="%s" />
    <input name="art_tov" type="hidden" value="%s" />
    </td>
  </tr>'
,$myrow['pic'],$myrow['title_tov'],$myrow['art_tov'],$myrow['cena_tov'],$myrow['kol_tov'],$myrow['cena_all'],$myrow['art_tov'],$myrow['cena_tov'],$myrow['art_tov']);
}
while (
$myrow mysql_fetch_array ($result));

echo
'   <tr>
    <td valign="middle" bgcolor="#E8E8E8" class="td_cart_border_A td_cart_border_R td_cart_border_T">&nbsp;</td>
    <td colspan="4" valign="middle" bgcolor="#E8E8E8" class="td_cart_border_A td_cart_border_R td_cart_border_T">Итого:</td>
    <td valign="middle" bgcolor="#E8E8E8" class="td_cart_border_A td_cart_border_R td_cart_border_T"><div align="center"><strong>'
.$myrowSUMM[0].'</strong></div></td>
    <td valign="middle" bgcolor="#E8E8E8" class="td_cart_border_A td_cart_border_T">&nbsp;</td>
  </tr>
</table>
 <table style="margin-top:10px" width="80%" cellspacing="0" cellpadding="0" border="0" align="center">
 <tr>
 <td>  <input type="submit" name="recount" value="Пересчитать"></td>
 <td align=right><input type="submit" name="order" value="Оформить заказ >>"></td></tr></table>
</form>
</td></tr></table>
'
;
}


После нажатия на "пересчитать" всё это дело идёт в обработчик zakaz.php, где
должна быть реализовано подключение и обновление базы с соответствующими заказами

PHP
if (isset ($_POST['recount']) && !isset ($_POST['order']))
{
$result_user mysql_query ("SELECT id FROM users WHERE login='$login_site'",$db);
$myrow_user mysql_fetch_array ($result_user);
$user_id $myrow_user['id'];
$kol_tov $_POST['kol_tov'];
echo 
$kol_tov;
$cena_tov $_POST['cena_tov'];
$art_tov $_POST['art_tov'];
$cena_all $cena_tov $kol_tov;
$cart mysql_query ("UPDATE cart SET kol_tov='$kol_tov_var' WHERE user_id='$user_id' AND art_tov='$art_tov'",$db);
echo (
"<meta http-equiv='Refresh' content='0; URL=".$_SERVER['HTTP_REFERER']."'>");


Если всё реализуется,я тебе буду очень благодарен!

Спустя 1 час, 17 минут, 15 секунд (4.02.2009 - 19:20) twin написал(а):
Вот Вам скриптик, запустите и попробуйте разобраться. Если не понятно что, я помогу. Вообще это делается так:
PHP
<?php

include("Ваш коннект к базе");

if(isset(
$_POST['user']))
{
$input = isset($_POST['user'])?array_map("mysql_escape_string",$_POST['user']):null;
$id = isset($_POST['id'])?$_POST['id']:null; 

    foreach
($input as $filed => $value)
    $set[] = "`".$filed."`='".$value."'";

    mysql_query ("UPDATE cart SET ".implode(", ", $set)."WHERE id='".(int)$id."'");
}

?>
<form action="?" method="post"> 
<?php
$result 
= mysql_query ("SELECT * FROM cart WHERE user_id='1'",$db);
if(
$result)
{
echo "<table>";
$myrow = mysql_fetch_assoc($result);
echo "<input name=\"id\" type=\"hidden\" value=\"1\" />";
    foreach($myrow as $name => $value)
        echo "<tr><td>user[".$name."]</td>
        <td> <input name=\"user["
.$name."]\" type=\"text\" value=\"".$value."\" /><br /></td></tr>";
echo "</table>";        
}
?>
<input name="ok" type="submit" /> 
</form>


ЗЫ Да, забыл совсем. Должно быть
HTML
php_flag magic_quotes_gpc Off

Спустя 5 часов, 15 минут, 16 секунд (5.02.2009 - 00:35) Фибер Оптик написал(а):
Да-а-а,оказывается не всё так легко в обновлнеии базы.
Я уже 2 часа сижу,пытаюсь разобраться что к чему.... и чего-то ничего не понимаю. Не понятно буквально всё. Ты может комменты напишешь.

Спустя 9 часов, 48 минут, 6 секунд (5.02.2009 - 10:23) twin написал(а):
Ну это пример работы. Если разберетесь, дальше будет легче. Начнем с вывода.
PHP
<?php
# Тут я думаю понятно, если нет, спрашивайте. Единица для примера, id=1
$result = mysql_query ("SELECT * FROM cart WHERE user_id='1'",$db);
if(
$result)
{
echo "<table>";
# Функция mysql_fetch_assoc() выдает результат запроса в виде ассоциативного массива. Сделайте
$myrow = mysql_fetch_assoc($result);
# тут вот так: print_r($myrow); и будет наглядно.
# Это для передачи id, в Вашей схеме все может быть по другому
echo "<input name=\"id\" type=\"hidden\" value=\"1\" />";
# Здесь из массива извлекаются пары ключ => значение. 
# То есть $name это название поля таблицы, а $value то, что в этом поле записано
    foreach($myrow as $name => $value)
# Дальше на стороне клиента собираем такой же массив из пар 
#ключ => значение в суперглобасльном массиве $_POST, 
#который передадим на сервер. В начале скрипта поставьте print_r($_POST['user']); и будет видно
        echo "<tr><td>user[".$name."]</td>
        <td> <input name=\"user["
.$name."]\" type=\"text\" value=\"".$value."\" /><br /></td></tr>";
echo "</table>";        
}
То есть этот скрипт читает все поля строки с id=1 из таблицы в БД, формирует инпуты с именами, состоящими из элементов массива user['имя поля'] и значениями value="то, что записано в ячейке". Браузер клиента формирует переменную $_POST['user'], которая содержит этот массив.
Дальше на сервере получаем этот массив и делим его обратно с точностью до наоборот, то есть формируем из него запрос.
PHP
<?
# Если нажата кнопка
if(isset($_POST['user']))
{
# инициализируем (присваиваем значение) переменную $input. 
#За одно обрабатываем все элементы массива функцией mysql_escape_string, что бы избежать SQL  инъекций
$input = isset($_POST['user'])?array_map("mysql_escape_string",$_POST['user']):null;
# Ну это для выбора нужной строки в таблице
$id = isset($_POST['id'])?$_POST['id']:null; 
# Разбираем массив на пары ключ => значение. 
#А так как массив ассоциативный и состоит из 
# "название поля" => "то, что там было написано", томожно сделать запрос.
    foreach($input as $filed => $value)
    $set[] = "`".$filed."`='".$value."'";
# Вот тут сделайте так: echo implode(", ", $set); и увидите что получилось.
# Ну и сам запрос на обновление тех полей, значения которых есть в массиве. То есть в данном случае всех.
    mysql_query ("UPDATE cart SET ".implode(", ", $set)."WHERE id='".(int)$id."'");
}
Ну вот, если еще не понятно, не стесняйтесь, спрашивайте.

Спустя 4 часа, 28 минут, 29 секунд (5.02.2009 - 14:52) Фибер Оптик написал(а):
Ну с эти кое-как разобрался,только вот не очень понимаю такую запись,например $id = isset($_POST['id'])?$_POST['id']:null;

И всё равно не понятно сам процесс обновления данных в БД. А если у меня много записей с user_id='1'? А-а-а,после этого вопроса я совсем запутался. blink.gif

Спустя 3 часа, 54 минуты, 52 секунды (5.02.2009 - 18:47) twin написал(а):
Цитата
не очень понимаю такую запись,например $id = isset($_POST['id'])?$_POST['id']:null;

Дословно это звучит так: переменная $id спрашивает: есть ли в массиве $_POST элемент с ключем id. Если есть, то принимает его значение. Если нет, то останется пустой (null)

Цитата
А если у меня много записей с user_id='1'?
Тогда обновятся все записи, которые удовлетворяют этому условию (WHERE user_id='1'). То есть все юзеры с user_id='1'.

Спустя 19 часов, 11 минут, 35 секунд (6.02.2009 - 13:58) Фибер Оптик написал(а):
Ну видимо я совсем тупой sad.gif . Всё равно не пойму. Твой код выводит табличку из БД, но у меня в этой таблице ещё есть поле с user_id='1', а значения из этого поля не выводятся,т.е берётся только первое вхождение.(надеюсь понятно объяснил smile.gif ).

Ты можешь мне подсказать,как применить твой обработчик к моему коду,который я писал выше?Чего-то с массивами у меня никак не идёт....
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.