обновление бд mysql

Тема в разделе "Как сделать...", создана пользователем Runapa, 22 июл 2012.

  1. Runapa

    Runapa Постоялец

    Регистр.:
    30 окт 2010
    Сообщения:
    64
    Симпатии:
    5
    Помогите плиз обновить таблицу.

    Запросом из бд я вытаскиваю данные в форму и вывожу таким способом:

    PHP:
    while ($row mysql_fetch_assoc($result_langs))
                    {
        
    $langs .= "<tr>";
        
    $langs .= "<td>".$row['string']."</td>";
        
    $langs .= "<td><textarea name='name_rus' style='font-size:12px;'>".$row['name_rus']."</textarea></td>";
        
    $langs .= "<td><textarea name='name_eng' style='font-size:12px;'>".$row['name_eng']."</textarea></td>";
        
    $langs .= "<td><textarea name='name_lat' style='font-size:12px;'>".$row['name_lat']."</textarea></td>";
        
    $langs .= "<td><textarea name='name_est' style='font-size:12px;'>".$row['name_est']."</textarea></td>";
        
    $langs .= "</tr>";   
                    }
     
        echo 
    $langs;
     
    А как теперь всё это отправить обратно в бд с внесенными изменениями ?
     
  2. dino

    dino

    Регистр.:
    28 май 2009
    Сообщения:
    550
    Симпатии:
    204
    сам запрос к БД будет выглядеть приблизительно так:
    PHP:
    mysql_query("UPDATE table SET `name_rus`='".$_POST[name_rus]."', `name_eng`='".$_POST[name_eng]."', `name_lat`='".$_POST[name_lat]."', `name_lat`='".$_POST[name_lat]."', `name_est`='".$_POST[name_est]."' ");
    при условии что данные которые вы выводите, обернуты в форму типа:
    PHP:
    $langs .="<form action="" method="post">";
    while (
    $row mysql_fetch_assoc($result_langs))
                    {
        
    $langs .= "<tr>";
        
    $langs .= "<td>".$row['string']."</td>";
        
    $langs .= "<td><textarea name='name_rus' style='font-size:12px;'>".$row['name_rus']."</textarea></td>";
        
    $langs .= "<td><textarea name='name_eng' style='font-size:12px;'>".$row['name_eng']."</textarea></td>";
        
    $langs .= "<td><textarea name='name_lat' style='font-size:12px;'>".$row['name_lat']."</textarea></td>";
        
    $langs .= "<td><textarea name='name_est' style='font-size:12px;'>".$row['name_est']."</textarea></td>";
        
    $langs .= "</tr>"
                    }
    $langs.="<input type="submit" value="submit"></form>";
    ну и естественно в моем примере не учтена проверка безопасности входных данных...
     
  3. Runapa

    Runapa Постоялец

    Регистр.:
    30 окт 2010
    Сообщения:
    64
    Симпатии:
    5
    Что-то этот код обновил всю таблицу последним айди.
     
  4. dino

    dino

    Регистр.:
    28 май 2009
    Сообщения:
    550
    Симпатии:
    204
    Гм... Вы что, с php и mysql совсем не знакомы? Может лучше для начала какие-то книги почитать? Здесь: https://www.nulled.cc/threads/205038/ много рекомендаций для начинающих...
    По существу вопроса - добавьте ид в скрытое поле и примените его в запросе к БД:
    PHP:
    $langs .="<form action="" method="post">";
    while (
    $row mysql_fetch_assoc($result_langs))
                    {
        
    $langs .= "<tr>";
        
    $langs .= "<td><input type='hidden' name='id' value='".$row['id']."'>".$row['string']."</td>";
        
    $langs .= "<td><textarea name='name_rus' style='font-size:12px;'>".$row['name_rus']."</textarea></td>";
        
    $langs .= "<td><textarea name='name_eng' style='font-size:12px;'>".$row['name_eng']."</textarea></td>";
        
    $langs .= "<td><textarea name='name_lat' style='font-size:12px;'>".$row['name_lat']."</textarea></td>";
        
    $langs .= "<td><textarea name='name_est' style='font-size:12px;'>".$row['name_est']."</textarea></td>";
        
    $langs .= "</tr>";
                    }
    $langs.="<input type="submit" value="submit"></form>";
     
    mysql_query("UPDATE table SET `name_rus`='".$_POST[name_rus]."', `name_eng`='".$_POST[name_eng]."', `name_lat`='".$_POST[name_lat]."', `name_lat`='".$_POST[name_lat]."', `name_est`='".$_POST[name_est]."' WHERE `id`='".$_POST['id']."' ");
     
  5. Runapa

    Runapa Постоялец

    Регистр.:
    30 окт 2010
    Сообщения:
    64
    Симпатии:
    5
    Теперь обновляет только последний айди.
    А книжки я читаю, да..

    всё еще актуально.
     
  6. KODEAK

    KODEAK

    Регистр.:
    11 апр 2009
    Сообщения:
    160
    Симпатии:
    15
    конечно он будет обновлять последнюю строку так как запрос находится в не цикла вывода данных
     
  7. dino

    dino

    Регистр.:
    28 май 2009
    Сообщения:
    550
    Симпатии:
    204
    не в том прикол... в $_POST массиве из формы передаются данные только последнего цикла (каждый следующий элемент накладывается на предыдущий так как имена одинаковые )
    Для того, чтоб получить все данные их нужно в многоуровневый массив затолкать...
    PHP:
    $langs .="<form action="" method="post">";
    while (
    $row mysql_fetch_assoc($result_langs))
                    {
        
    $langs .= "<tr>";
        
    $langs .= "<td><input type='hidden' name='id[]' value='".$row['id']."'>".$row['string']."</td>";
        
    $langs .= "<td><textarea name='name_rus[]' style='font-size:12px;'>".$row['name_rus']."</textarea></td>";
        
    $langs .= "<td><textarea name='name_eng[]' style='font-size:12px;'>".$row['name_eng']."</textarea></td>";
        
    $langs .= "<td><textarea name='name_lat[]' style='font-size:12px;'>".$row['name_lat']."</textarea></td>";
        
    $langs .= "<td><textarea name='name_est[]' style='font-size:12px;'>".$row['name_est']."</textarea></td>";
        
    $langs .= "</tr>";
                    }
    $langs.="<input type="submit" value="submit"></form>";
    а полученный многомерный массив растаскать на запросы циклом:
    PHP:
    $k=count($_POST['id']);
    for (
    $i=0$i<$k $i++ ){
    mysql_query("UPDATE table SET `name_rus`='".$_POST[name_rus][$i]."', `name_eng`='".$_POST[name_eng][$i]."', `name_lat`='".$_POST[name_lat][$i]."', `name_lat`='".$_POST[name_lat][$i]."', `name_est`='".$_POST[name_est][$i]."' WHERE `id`='".$_POST['id'][$i]."' ");
    }