Есть следующее: Код (Text): <input type='hidden' value='".$id."' name='id[]'><input type='text' name='price[]' value='".$price."'> <input type='hidden' value='".$id."' name='id[]'><input type='text' name='price[]' value='".$price."'> <input type='hidden' value='".$id."' name='id[]'><input type='text' name='price[]' value='".$price."'> Передается методом POST в обработчик. Код (Text): $id = $_POST ['id']; $price = $_POST ['price']; Мне надо обновить значения в БД Код (Text): mysql_query ("UPDATE product_info SET price='$price' WHERE id='$id'") Не могу понять как это сделать с помощью foreach. Или здесь другая конструкция требуется?
Я ж надеюсь, что у вас поле "id" или первичный, или уникальный ключ? Если да - смотрим ниже: 1. Объединяете массивы Код (PHP): $allData = array_map( null, $id, $price ); 2. Генерируете запрос: Код (PHP): $query = "INSERT INTO `product_info` (`id`,`price`) VALUES "; $params = array(); foreach($allData as $val){ $params[] = '('.$val[0] .','.$val[1].')'; } $query .= implode(',', $params) . " ON DUPLICATE KEY UPDATE `price` = VALUES(`price`)"; 3. Запускаете запрос и идёте на радостях пить пиво. (*) Обязательно следите за порядком. В примере, объединяя массивы, первое значение - id, а второе - price. При генерировании запроса, значения подставлять соответственно.
Благодарю за участие! Код (Text): Warning: array_map() [function.array-map]: Argument #2 should be an array in ... on line 15 Invalid argument supplied for foreach() in ... on line 19 Выдает такую ошибку ((
Вызвал print_r($allData); получил Код (Text): Array ( [0] => Array ( [0] => 4661 [1] => 0 ) [1] => Array ( [0] => 4660 [1] => 0 ) [2] => Array ( [0] => 4659 [1] => 0 ) [3] => Array ( [0] => 4658 [1] => 0 ) [4] => Array ( [0] => 4657 [1] => 0 ) [5] => Array ( [0] => 4656 [1] => 0 ) [6] => Array ( [0] => 4655 [1] => 0 ) [7] => Array ( [0] => 4654 [1] => 0 ) [8] => Array ( [0] => 4653 [1] => 0 ) [9] => Array ( [0] => 4652 [1] => 0 ) [10] => Array ( [0] => 4651 [1] => 0 ) [11] => Array ( [0] => 4650 [1] => 0 ) [12] => Array ( [0] => 4649 [1] => 0 ) [13] => Array ( [0] => 4648 [1] => 0 ) [14] => Array ( [0] => 4647 [1] => 0 ) [15] => Array ( [0] => 4646 [1] => 0 ) [16] => Array ( [0] => 4645 [1] => 0 ) [17] => Array ( [0] => 4644 [1] => 0 ) [18] => Array ( [0] => 4643 [1] => 0 ) [19] => Array ( [0] => 4642 [1] => 0 ) [20] => Array ( [0] => 4641 [1] => 0 ) [21] => Array ( [0] => 4640 [1] => 0 ) [22] => Array ( [0] => 4639 [1] => 0 ) [23] => Array ( [0] => 4638 [1] => 0 ) [24] => Array ( [0] => 4637 [1] => 0 ) [25] => Array ( [0] => 4636 [1] => 0 ) [26] => Array ( [0] => 4635 [1] => 0 ) [27] => Array ( [0] => 4634 [1] => 0 ) [28] => Array ( [0] => 4633 [1] => 0 ) [29] => Array ( [0] => 4632 [1] => 0 ) ) 0 в значении это так и надо. А вот остальное я не совсем понимаю — правильно или нет
В первом посте просто упростил и изменил имена для простоты восприятия Код (Text): while ($product = mysql_fetch_array ($product_list)) { <input type='hidden' value='".$product['id']."' name='product_id[]'><input type='text' name='vendor_price[]' value='".$product['vendor_price']."' size='6'> } Код (Text): $id = $_POST ['product_id']; $vendor_price = $_POST ['vendor_price']; $allData = array_map(null, $id, $vendor_price); $query = "INSERT INTO `product_info` (`id`,`vendor_price`) VALUES "; $params = array(); foreach($allData as $val){ $params[] = '('.$val[0] .','.$val[1].')'; } $query .= implode(',', $params) . " ON DUPLICATE KEY UPDATE `vendor_price` = VALUES(`vendor_price`)";
Переходите по этой ссылке, нажимаете Run (или F9) для запуска сценария, отправляете форму и убеждаетесь в том, что всё работает нормально. Дальше ищите тридцать три отличия в вашем реальном коде и рассказываете о них. Тогда будем думать.
Всем спасибо за участие. Решил вопрос таким образом (с удовольствием почитаю критические отзывы такого решения): Код (Text): $n=sizeof($_POST['product_id']) ; for($i=0;$i<$n;$i++) { $id =$_POST['product_id'][$i]; $vprice=$_POST['vendor_price'][$i]; mysql_query("UPDATE product_info SET vendor_price='$vprice' WHERE id=$id"); } Зато все работает ))
Это решение "влоб" и первое, что приходит на ум новичкам. Не буду критиковать его, оно имеет право на жизнь, но вот точно покритикую за то, что до сих пор используете устаревшее расширение для работы с базой mysql_*. Переходите на PDO или MySQLi.