Элементы размерного массива не вставляются в одну строку БД

0

Я начинаю со следующего:

<form action="" method="post" enctype="multipart/form-data" id="form">
 <?php foreach($attributes as $attribute){ ?>
  <input type="checkbox" name="attribute[][attr_id]" value="<?php echo $attribute['attribute_id']; ?>">
  <input type="text" name="attribute[][attr_name]"> value="<?php echo $attribute['attribute_name']; ?>">
 <?php } ?>
</form>

Таким образом, каждый атрибут $ имеет флажок и текстовый ввод; всякий раз, когда кто-то проверяет (один или несколько полей) и вставляет текст (только в отмеченные элементы), я хочу получить в БД [attr_id] и [attr_name] для конкретного элемента.

Поэтому я продолжаю:

if(isset($_POST['attribute'])){
 foreach($_POST['attribute'] as $attribute){
    $attr_id = $attribute['attr_id'];
    $attr_name = $attribute['attr_name'];

    "INSERT INTO " . DB_PREFIX . "attribute_xref SET productid = '" . $productid . "', attribute_id='". $attr_id ."', attribute_name='" . $attr_name . "'";
  }
 }

Но результат немного отличается от того, что я ожидал. Каждый раз, когда поле проверяется и вводится его ввод текста, их значения отправляются в две разные строки БД:

productid   --   attribute_id   --   attribute_name
10          --       102        --        empty
10          --        0         --       somename

В вышеприведенной второй строке атрибут_id имеет нулевое значение, которое не проверяется.

Я не могу получить всю картину, где моя ошибка.

  • 0
    Не на 100% об основной проблеме, я бы предположил, что цикл php foreach подбирает каждый вход отдельно, но вы должны действительно изучить параметризованные запросы. Подобное объединение SQL-кода представляет собой ужасную угрозу безопасности. Для получения дополнительной информации обратитесь к разделу «SQL-инъекция».
  • 0
    Форма используется только пользователями группы на панели администрирования, поэтому у меня есть непараметрический запрос, но, конечно, это не профессиональный подход.
Показать ещё 1 комментарий
Теги:
multidimensional-array

1 ответ

0
Лучший ответ

В заключение. Трудный ответ заключался в том, чтобы добавить идентичный числовой индекс к ассоциативным входам следующим образом:

<form action="" method="post" enctype="multipart/form-data" id="form">
  <?php foreach($attributes as $attribute){ ?>
    <input type="checkbox" name="attribute[i][attr_id]" value="<?php echo $attribute['attribute_id']; ?>">
    <input type="text" name="attribute[i][attr_name]"> value="<?php echo $attribute['attribute_name']; ?>">
  <?php } ?>
</form>

где "i" в моем случае будет принимать переменное число из атрибута "attribute_id":

<input type="checkbox" name="attribute[<?php echo $attribute['attribute_id']; ?>][attr_id]" value="<?php echo $attribute['attribute_id']; ?>">
<input type="text" name="attribute[<?php echo $attribute['attribute_id']; ?>][attr_name]"> value="<?php echo $attribute['attribute_name']; ?>">

Надеюсь, мой ответ поможет кому-то и в будущем.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню