2015-04-06 4 views
1

У меня есть таблица HTML и кнопка, которая позволяет пользователю добавлять несколько строк.Добавить данные таблицы HTML в MySQL DB

<table id="component_table"> 
    <thead> 
     <tr> 
      <th>Component</th> 
      <th>Component Type</th> 
      <th>Component Thickness</th> 
     </tr> 
    </thead> 
    <tbody id="component_tb"> 
     <tr> 
      <td><?php echo $roofComponentDropDown ?></td> 
      <td><?php echo $roofComponentTypeDropDown ?></td> 
      <td><input id="component_thickness" name="component_thickness" type="text"></td> 
     </tr> 
    </tbody> 
</table> 
<input type="button" value="+" id="addRows" /> 

Это мои падения спады, которые генерируются для таблицы

//Queries here to get data for the drop down lists that make up the roof construction table... 
$roofComponentQuery = "SELECT * FROM roof_component"; 
$roofComponentData = mysqli_query($dbc, $roofComponentQuery); 

while ($rcRow = mysqli_fetch_array($roofComponentData)) { 
     $roofComponentOptions .="<option value=\"".$rcRow['roof_component_id']."\">" . $rcRow['roof_component_name'] . "</option>"; 
} 

$roofComponentDropDown = "<select name='selectedRoofComponent' id='selectedRoofComponent' onChange='getComponentType(this)'> 
          <option selected='selected' disabled='disabled' value=''>Select Component</option> 
         " . $roofComponentOptions . " 
         </select></br>"; 

$roofComponentTypeDropDown = "<select name='selectedComponentType' id='selectedComponentType'> 
           <option class='toggle_control' selected='selected' disabled='disabled' value=''>Select Type</option> 
          </select></br>"; 

Есть ли способ, чтобы добавить каждый <tr> в массив, а затем перебрать массив с петлей Еогеаспа и вставить каждый <tr> в БД?

Что-то вроде этого, может быть?

$tableRow = array(); 
foreach ($tableRow as $row) { 
    //insert query 
} 
+0

У вас есть форму для отправки таблицы на PHP? – Barmar

+0

@Barmar Да, таблица находится в форме с несколькими другими полями ввода. – Zoxac

+0

Вам нужно будет предоставить дополнительную информацию, схему таблицы mysql и полный код PHP – perodriguezl

ответ

1

Дайте имена <select>, заканчивая на [].

$roofComponentDropDown = "<select name='selectedRoofComponent[]' id='selectedRoofComponent' onChange='getComponentType(this)'> 
          <option selected='selected' disabled='disabled' value=''>Select Component</option> 
         " . $roofComponentOptions . " 
         </select></br>"; 
$roofComponentTypeDropDown = "<select name='selectedComponentType[]' id='selectedComponentType'> 
           <option class='toggle_control' selected='selected' disabled='disabled' value=''>Select Type</option> 
          </select></br>"; 

Тогда элементы $_POST будут массивы, которые вы можете перебираем.

foreach ($_POST['selectedRoofComponent'] as $index => $component) { 
    $componentType = $_POST['selectedComponentType'][$index]; 
    // INSERT $component and $componentType into database 
} 
+0

Это хороший ответ, но он не даст ОП структуру, о которой он просил, которая представляет собой единый массив $ tableRow, который он может перебирать. Кроме того, есть некоторый скачок веры, необходимый в отношении того, к какой строке относится индекс каждого элемента. Если что-то пойдет на сторону клиента при создании новых строк, он окажется в данных не в тех местах. – billynoah

+0

Он сказал «что-то вроде этого», я думаю, что мой ответ - это что-то вроде этого. Он не должен быть единственным массивом, просто он может перебирать его. – Barmar

+0

@ Бонусные баллы Barmar (избегая задавать другой вопрос): Я выполнил ваш ответ и, похоже, работает так, как должен. Однако я пытаюсь добавить '[]' в поле ввода 'component_thickness', и я выполнил' $ componentThickness = $ _POST ['component_thickness'] [$ index]; 'но я получаю только последнее значение, которое я ввел в . – Zoxac

0

Сначала убедитесь, что каждый <tr> и впоследствии вновь созданный <tr> имеет уникальный идентификатор строки. Затем используйте это, чтобы создать имена назначений индекса массива для ваших элементов в каждом <td>, которые представлены в форме.

Возможно, что-то вроде <select name='tableRow[rowId][selectedRoofComponent]' id='selectedRoofComponent' onChange='getComponentType(this)'>, это должно дать вам массив с соответствующей структурой в ваших данных POST.

rowId В этом случае должна быть переменная, которая либо генерируется вашим javascript, либо отображается php при загрузке страницы. Таким образом, в PHP это может выглядеть примерно так:

"<select name='tableRow[" . $rowId . "][selectedRoofComponent]' id='selectedRoofComponent' onChange='getComponentType(this)'>" 

или яваскрипта

"<select name='tableRow[" + rowId + "][selectedRoofComponent]' id='selectedRoofComponent' onChange='getComponentType(this)'>" 

Чтобы дать вам что-нибудь более конкретное, чем это я должен был бы увидеть JavaScript, а также.

Смежные вопросы