За последние 24 часа нас посетили 20699 программистов и 1106 роботов. Сейчас ищет 391 программист ...

Не получается обновить сразу несколько записей PHP+MySQL

Тема в разделе "PHP и базы данных", создана пользователем New_neo, 1 мар 2016.

  1. New_neo

    New_neo Новичок

    С нами с:
    15 ноя 2015
    Сообщения:
    77
    Симпатии:
    3
    Вывожу записи из таблицы
    Код (PHP):
    1. while ($row = mysql_fetch_array($res)) {
    2.             
    3.     echo "<form method=\"post\" action= \"edit.php\"  name=\"edit_form\">\n";
    4.     echo "<input type=\"hidden\" name=\"id\" value=\"".$row["id"]."\" />\n";
    5.     //echo "<table border=\"1\" cellpadding=\"0\" cellspacing=\"0\">\n";
    6.     echo "<tr>\n";
    7.     echo "<td>".$row["id"]."</td>\n";
    8.         echo "<td>".$row['name']."</td>\n";
    9.     echo "<td>".$row['email']."</td>\n";
    10.     echo "<td>".$row['theme']."</td>\n";
    11.         echo "
    12.         <td style='text-align: center;'>
    13.         <a href='' class='spoiler_links'>
    14.         <input type='button' value='Показать' onclick='dawn(this)'>
    15.         </a>
    16.         <div class='spoiler_body'>
    17.         
    18.         ".$row['message']."</div></td>\n";
    19.    
    20.     echo "<td>";
    21.         include('spt.php');
    22.         echo "</td>\n";
    23.     echo "<td>";
    24.         include('spt2.php');
    25.         echo "</td>\n";
    26.         
    27.         echo "<td><input size='7' readonly type=\"text\" value=\"".$row['dreg']."\" name=\"dreg\"/></td>\n";
    28.     echo "<td><input  size='7' readonly type=\"text\" value=\"".$row['drun']."\" name=\"drun\"/>
    29.     <input type=checkbox name=top[]  value=".$row['id'].">
    30.     
    31.     </td>\n";
    32.     echo "<td colspan=\"2\" align=\"center\"><input type=\"submit\" name=\"submit_edit\" class=\"buttons\" value=\"Сохранить\" /></td>\n";
    33.     echo "</form>\n\n";
    34. }
    35. echo "</tr></td></table>";
    36.       echo "</tr>\n";
    37.  
    После сохраняю
    Код (PHP):
    1. if(isset($_POST['submit_edit']))
    2. {
    3. $tech1=$_POST['tech1']; 
    4. $tech2=$_POST['tech2'];
    5. //$otv=$_POST['otv'];
    6. $dreg=$_POST['dreg'];
    7. $drun=$_POST['drun'];
    8. $id = $_POST['id'];
    9.  
    10.  
    11. $query = "UPDATE table SET tech1='$tech1', tech2='$tech2', drun='$drun',
    12. dreg='$dreg' WHERE `id`='$id'";
    13. /* Выполняем запрос. Если произойдет ошибка - вывести ее. */
    14. mysql_query($query) or die (mysql_error());
    15. //die($query);
    16.  
    Все сохраняет, но только по одной записи, а нужно сразу несколько. Подскажите как. Пожалуйста. Я думаю что нужно как-то через массив , только как правильно? Заранее спасибо!

    Подсказка от модератора:
    Любой код или текст конфигурации пишите между тегом [code=php] и [/code].
    Используйте отступы в коде для форматирования текста.
    Это помогает быстрее понять вас, увеличивает шанс на получение ответа.
    Что выделять? Например: PHP, HTML, CSS, JavaScript, SQL, XML, .htaccess, ini, регулярные выражения, код шаблонизаторов, результаты array/object dump и т. д.
     
  2. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.632
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    имеешь массив данных $arr, пусть длина массива 5, тогда
    Код (PHP):
    1. $length = count($arr);
    2. for($i=0; $i<$length; $i++){
    3.     // тут будет сам запрос обновления данных
    4. } 
     
  3. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.068
    Симпатии:
    1.231
    Адрес:
    там-сям
    Мы апдейтим, указывая id записи, как … WHERE id = :id. Значит нам надо обеспечить приход нескольких записей с разным id, логично?

    Задача раскладывается на две:
    1. добиться, чтобы в POST приходили данные в массиве, проиндексированном по id
    2. исполнить update с этими записями

    Первое делается так: имена инпутов должны выглядеть как-то так
    Код (PHP):
    1. <input name="dreg[12]">
    2. <input name="drun[12]">
    Где 12 это значение id для данной записи. Тогда var_export($_POST) будет выглядеть примерно так:
    Код (PHP):
    1.   'dreg' => array(
    2.     '12' => 'xxx',
    3.     '13' => 'yyy',
    4.     ...
    5.   ),
    6.   'drun' => array( 
    7.     '12' => 'a b c',
    8.     '13' => 'ololo',
    9.     ...
    10.   ),
    11.   ...
    12. ); 
    И можно будет делать цикл по записям.
     
  4. New_neo

    New_neo Новичок

    С нами с:
    15 ноя 2015
    Сообщения:
    77
    Симпатии:
    3
    А что значит
    Код (PHP):
    1. <input name="dreg[12]">
    2. <input name="drun[12]"> 
    почему именно
    Код (PHP):
    1. "dreg[12]"
    ?

    Подсказка от модератора:
    Любой код или текст конфигурации пишите между тегом [code=php] и [/code].
    Используйте отступы в коде для форматирования текста.
    Это помогает быстрее понять вас, увеличивает шанс на получение ответа.
    Что выделять? Например: PHP, HTML, CSS, JavaScript, SQL, XML, .htaccess, ini, регулярные выражения, код шаблонизаторов, результаты array/object dump и т. д.
     
  5. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.902
    Симпатии:
    969
    это произвольные имена полей сущности - дрег и дрюн - а в скобках для идентификации их отношения к конкретной сущности - её идентификатор.
     
  6. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.068
    Симпатии:
    1.231
    Адрес:
    там-сям
    New_neo, что тебе непонятно: что такое запись или что такое id? слова drun и dreg взяты из твоего текста.

    Добавлено спустя 1 минуту 31 секунду:
    Код (PHP):
    1. echo "<input name=\"dreg[{$row['id']}]\" value=\"{$row['dreg']}\" … ";
     
  7. New_neo

    New_neo Новичок

    С нами с:
    15 ноя 2015
    Сообщения:
    77
    Симпатии:
    3
    Теперь все ясно! Я просто не понял сразу
    Код (PHP):
    1. [12] 
    А скобки обязательно ?{ }
    Код (PHP):
    1. dreg[{$row['id']}] 
    Подсказка от модератора:
    Любой код или текст конфигурации пишите между тегом [code=php] и [/code].
    Используйте отступы в коде для форматирования текста.
    Это помогает быстрее понять вас, увеличивает шанс на получение ответа.
    Что выделять? Например: PHP, HTML, CSS, JavaScript, SQL, XML, .htaccess, ini, регулярные выражения, код шаблонизаторов, результаты array/object dump и т. д.
     
  8. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.902
    Симпатии:
    969
    да, обязательно. без них ты не сможешь встроить в строку значение ключа массива. я бы даже рекомендовал всегда встраивать переменные обрамляя фигурными скобками.
     
  9. New_neo

    New_neo Новичок

    С нами с:
    15 ноя 2015
    Сообщения:
    77
    Симпатии:
    3
    А можно ?
    Код (PHP):
    1. dreg[.$row['id'].]  
     
  10. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.902
    Симпатии:
    969
    попробовал? получилось? можно?
     
  11. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
  12. New_neo

    New_neo Новичок

    С нами с:
    15 ноя 2015
    Сообщения:
    77
    Симпатии:
    3
    как теперь выполнить запрос с массивами
    Код (PHP):
    1. dreg[{$row['id']}]  
    ? подскажите пожалуйста в коде

    Код (PHP):
    1. if(isset($_POST['submit_edit']))
    2. {
    3. $tech1=$_POST['tech1']; 
    4. $tech2=$_POST['tech2'];
    5. //$otv=$_POST['otv'];
    6. $dreg=$_POST['dreg'];
    7. $drun=$_POST['drun'];
    8. $id = $_POST['id'];
    9.  
    10.  
    11. $query = "UPDATE table SET tech1='$tech1', tech2='$tech2', drun='$drun',
    12. dreg='$dreg' WHERE `id`='$id'";
    13. /* Выполняем запрос. Если произойдет ошибка - вывести ее. */
    14. mysql_query($query) or die (mysql_error());
    15. //die($query); 
     
  13. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.902
    Симпатии:
    969
    ну а сам? посмотри какой теперь ПОСТ приходит, подумай как его итерировать.
     
  14. New_neo

    New_neo Новичок

    С нами с:
    15 ноя 2015
    Сообщения:
    77
    Симпатии:
    3
    Пост приходит теперь массивом! Теперь его нужно я так думаю сделать:
    Код (PHP):
    1. <span class="syntaxdefault">$id&nbsp;</span><span class="syntaxkeyword">AS&nbsp;</span><span class="syntaxdefault">$KEY</span>
    Только как правильно сделать нет мощности в голове. Помогите! Пожалуйста.
     
  15. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.902
    Симпатии:
    969
    пост всегда приходит массивом. как и гет. как и сервер. как и сессн. как и энвайрмент. не даром у этих штук официальное название - суперглобальный массив.

    тебе надо проитерировать пост-массив. давай покажи идеи как ты это будешь делать. будем считать что тред в разделе новичков. если хочешь чтоб за тебя подумали - готовь кошелек в разделе "фриланс" или запас надежд в разделе "за меня"
     
  16. New_neo

    New_neo Новичок

    С нами с:
    15 ноя 2015
    Сообщения:
    77
    Симпатии:
    3
    Идея такова
    Код (PHP):
    1. $length = count($id);
    2. for($i=0; $i<$length; $i++){
    3.    
    4.  
    5. foreach($id AS $key)
    6. {
    7. $query = "UPDATE table SET tech1='$tech1', tech2='$tech2' WHERE `id`='$key'";
    8.  
    9. mysql_query($query) or die (mysql_error());
    10. }
    11. } 
    Только вот он сохраняет все записи одинаково!
     
  17. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.902
    Симпатии:
    969
    ну как пишешь так и работает. что мешаешь отладить?
     
  18. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
  19. New_neo

    New_neo Новичок

    С нами с:
    15 ноя 2015
    Сообщения:
    77
    Симпатии:
    3
    Нет там все нормально! Только там два массива. Их каким-то образов нужно разложить вместе на ключи. Посоветуйте как?
     
  20. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.902
    Симпатии:
    969
    можно через for или foreach.
     
  21. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    вы накой учите человека делать запросы в цикле? :)
     
  22. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.902
    Симпатии:
    969
    не, Дим, его никто не учит запросы в цикле делать. пусть для начала научится массив итерировать. само формирование запроса ему пока рано. да и вообще с его потугами - пусть запросы в цикле делает. тем более что он еще не дошел до самих запросов. пока он не может даже данные принять.
     
  23. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.068
    Симпатии:
    1.231
    Адрес:
    там-сям
    подсказка: в тех массивах ключ один и тот же. делай форич по одному из массивов, а используй все массивы.
     
  24. New_neo

    New_neo Новичок

    С нами с:
    15 ноя 2015
    Сообщения:
    77
    Симпатии:
    3
    А можно подробнее по поводу -
    в тех массивах ключ один и тот же. делай форич по одному из массивов, а используй все массивы.[/quote]
    типа использовать как
    Код (PHP):
    1. $length = count($id);
    2. for($i=0; $i<$length; $i++){
    3.    
    4.  
    5. foreach($id AS $key)
    6. {
    7. $query = "UPDATE table SET tech1='$key', tech2='$tech2' WHERE `id`='$key'";
    8.  
    9. mysql_query($query) or die (mysql_error());
    10. }
    11. } 
    12.  
    13.  
    Правильно я понял?
     
  25. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.902
    Симпатии:
    969
    нет, не правильно. выведи массив ПОСТ и подумай о каких ключах шла речь.