1

Тема: Функция UPDATE

Помогите решить проблему !
Есть таблица, которая выводится в цикле do while.  В нее вставленны формы в которые выводятся данные из БД для редактирования.
$result= mysql_query ("SELECT * FROM ttable WHERE id=id",$db);
    $myrow= mysql_fetch_array($result);
    do
    {
$id=$myrow['id'];
print <<<HERE
<form action="update_table.php" method="post" target="_blank">
    <tr class="ch_results">
    <td class="cell"><p class="team"><input value="$myrow[team]" name="team" type="text" class="text_form" size="30" maxlength="30" /></p><p class="city"><input value="$myrow[city]" name="city" type="text" class="text_form" size="15" maxlength="20" /></p></td>
    <td class="cell"><p class="number"><input value="$myrow[numer]" name="numer" type="text" class="text_form" size="2" maxlength="3" /></p></td>
    <td class="cell"><p class="number"><input value="$myrow[game]" name="game" type="text" class="text_form" size="2" maxlength="3" /></td>
    <td class="cell"><p class="number"><input value="$myrow[win]" name="win" type="text" class="text_form" size="2" maxlength="3" /></td>
    <td class="cell"><p class="number"><input value="$myrow[loose]" name="loose" type="text" class="text_form" size="2" maxlength="3" /></td>
    <td class="cell"><p class="number"><input value="$myrow[point]" name="point" type="text" class="text_form" size="2" maxlength="3" /></td>
    <td class="cell"><p class="number"><input value="$myrow[scores]" name="scores" type="text" class="text_form" size="7" maxlength="7" /></td>
  <td ><div class="cell1"> <a href='delete_table.php?id=$id'>Удалить</a></div></td>
  <input value="$myrow[id]" name="id" type="hidden">
  </tr>
   
   
HERE;
}
    while ($myrow= mysql_fetch_array($result));
   
?>
</table>

<p class="scores"><input name="submit" type="submit" value="Сохранить изменения"></p>
</form>



Все это дело отсылается обработчику, который призван вставить изменные данные обратно в БД
if (isset($_POST['team'])) {$team=$_POST['team']; if ($team==''){unset($team);}}
if (isset($_POST['city'])) {$city=$_POST['city']; if ($city==''){unset($city);}}
if (isset($_POST['numer'])) {$numer=$_POST['numer']; if ($numer==''){unset($numer);}}
if (isset($_POST['game'])) {$game=$_POST['game']; if ($game==''){unset($game);}}
if (isset($_POST['win'])) {$win=$_POST['win']; if ($win==''){unset($win);}}
if (isset($_POST['loose'])) {$loose=$_POST['loose']; if ($loose==''){unset($loose);}}
if (isset($_POST['point'])) {$point=$_POST['point']; if ($point==''){unset($point);}}
if (isset($_POST['scores'])) {$scores=$_POST['scores']; if ($scores==''){unset($scores);}}
if (isset($_POST['id'])) {$id=$_POST['id'];}
?>
    <?php
    if (isset($team) and isset($city) and isset($numer) and isset($game) and isset($win) and isset($loose) and isset($point) and isset($scores))
    {
        $result= mysql_query("UPDATE ttable SET 'team='$team', city='$city', numer='$numer', game='$game', win='$win', loose='$loose', point='$point', scores='$scores' WHERE id='$id'");

       
       
        if ($result=='true') {echo "Новость успешно обновлена<p><a href='ttable.php'>Обратно в админ блок</a></p><p><a href='//localhost/avto/avtomobilist.php'>Перейти на главную страницу сайта</a></p>";}
        else {echo "Внимание произошла ошибка ! Новость не была обновлена";}
       
        }
    else {echo "Внимание одно или несколько полей не были заполнены. Пожалуйста проверти правильность ввода информации";}



Но возникает проблема ! Редактированию с последующей успешной записью поддается только последняя строка. Отсюда вопрос, как сделать чтобы можно было редактировать любую из ячеек ? Заранее спасибо))

2 (изменено: DmitryV, 2010-10-08 08:59:39)

Re: Функция UPDATE

rostrid
В форме задать переменные в виде массива данных и передавать на изминение тоже массив данных например

<td class="cell"><p class="number"><input value="$myrow" name="forms[id][numer]" type="text" class="text_form" size="2" maxlength="3" /></p></td>

прописываем в имени forms[numer] вместо numer и так со всеми по аналогии forms[имя до редактирования]
после передачи в скрипт имеем массыв пременных с формы $data_form = $_POST[forms] и уже запрос внедряем в проход этого многомерного массыва по $data_form[id][имя_старое переменной] например $data_form[id][numer]  и т д. тоесть по принятию данных в цикле пишем обработку массыва
если не понятно могу расписать полностью скрипт.

3

Re: Функция UPDATE

Спасибо ! В целом уловил идею, но если бы вы мне написали как это выглядит непосредственно в UPDATE был бы очень благодарен))

4 (изменено: DmitryV, 2010-10-08 13:09:07)

Re: Функция UPDATE

rostrid
Смогли разобраться? если нет пришлите мне образец структуры и данных таблицы и что хотелось бы получить от скрипта в свободной форме на ПМ.

5 (изменено: DmitryV, 2010-10-09 10:47:21)

Re: Функция UPDATE

полный вариант на почте, вот что надо прописать:

Вынести перед циклом:

<form action="update_table.php" method="post" target="_blank">

Затем в цикле:

    $result= mysql_query ("SELECT * FROM ttable WHERE id=id",$db);
    $myrow= mysql_fetch_array($result);
    
    do
    {
$id=$myrow['id'];
print <<<HERE
    <tr class="ch_results">
    <input value="$myrow[id]" name="forms[$myrow[id]][id]" type="hidden">
    <td class="cell"><p class="team"><input value="$myrow[team]" name="forms[$myrow[id]][team]" type="text" class="text_form" size="30" maxlength="30" /></p></td>
    <td class="cell"><p class="city"><input value="$myrow[city]" name="forms[$myrow[id]][city]" type="text" class="text_form" size="15" maxlength="20" /></p></td>
    <td class="cell"><p class="number"><input value="$myrow[numer]" name="forms[$myrow[id]][numer]" type="text" class="text_form" size="2" maxlength="3" /></p></td>
    <td class="cell"><p class="number"><input value="$myrow[game]" name="forms[$myrow[id]][game]" type="text" class="text_form" size="2" maxlength="3" /></td>
    <td class="cell"><p class="number"><input value="$myrow[win]" name="forms[$myrow[id]][win]" type="text" class="text_form" size="2" maxlength="3" /></td>
    <td class="cell"><p class="number"><input value="$myrow[loose]" name="forms[$myrow[id]][loose]" type="text" class="text_form" size="2" maxlength="3" /></td>
    <td class="cell"><p class="number"><input value="$myrow[point]" name="forms[$myrow[id]][point]" type="text" class="text_form" size="2" maxlength="3" /></td>
    <td class="cell"><p class="number"><input value="$myrow[scores]" name="forms[$myrow[id]][scores]" type="text" class="text_form" size="7" maxlength="7" /></td>
  <td ><div class="cell1"> <a href='delete_table.php?id=$id'>Удалить</a></div></td>
 </tr>
    
    
HERE;
}
    while ($myrow= mysql_fetch_array($result));

mysql_free_result($result);
mysql_close($db);

и в обработчике:

$data_form = $_POST[forms];

foreach ($data_form as $key=>$value) {

    $query=mysql_query("UPDATE ttable SET 
                    team='$value[team]', 
                    city='$value[city]', 
                    numer='$value[numer]', 
                    game='$value[game]', 
                    win='$value[win]', 
                    loose='$value[loose]', 
                    point='$value[point]', 
                    scores='$value[scores]' 
                    WHERE id='$value[id]'");

}
mysql_close($db);

И советую в конструкцию формы внести

<input type="checkbox" name="forms[$myrow[id]][check]" value="1">

и в обработчик приема данных прописать условие если он допустим 1 то вносим запись нет не вносим, чтобы выбирать какие изменены и надо вносить так как при большом объеме данных не все будут же меняться ну и незачем дублирующие запросы к базе делать.
тогда в проходе массыва :

    $query=mysql_query("UPDATE ttable SET 
                    team='$value[team]', 
                    city='$value[city]', 
                    numer='$value[numer]', 
                    game='$value[game]', 
                    win='$value[win]', 
                    loose='$value[loose]', 
                    point='$value[point]', 
                    scores='$value[scores]' 
                    WHERE id='$value[id]'");

завернуть в :

$data_form = $_POST[forms];

foreach ($data_form as $key=>$value) {

if ($value[check]==1){
    $query=mysql_query("UPDATE ttable SET 
                    team='$value[team]', 
                    city='$value[city]', 
                    numer='$value[numer]', 
                    game='$value[game]', 
                    win='$value[win]', 
                    loose='$value[loose]', 
                    point='$value[point]', 
                    scores='$value[scores]' 
                    WHERE id='$value[id]'");
  }
}