2015-04-13 3 views
0

Я создал таблицу, в которой пользователь может добавлять как столбцы, так и строки, поэтому обе они неизвестны. Все поля для них содержат поля ввода для ввода пользователем данных. (игнорируйте x, они - ссылки на связанные страницы). TableКак передать многомерные массивы через форму в PHP?

PHP for the table (строка 46, где я передаю массив)

Я решил, что лучший способ передать их для ввода в базу данных MySQL через многомерный массив. Я слышал, что могу это сделать, но я не могу найти какую-либо документацию для моей жизни.

Когда пользователь нажимает представить, все данные должны быть введены в таблицу следующим образом:
(где заголовок = cem_param_id и продукт (левая сторона) = cem_prod_id) Database

Как я могу идти о выполнении это?

Я знаю, что MySQL устарел. Я все еще участвую в обновлении.

+0

Uhm, MySql в любом случае не «устарел», откуда вы это слышали? (возможно, это я, кто на неправильной стороне, заметьте) –

+0

@DamienPirsy Не устаревший как таковой, он устарел.Должен ли использоваться PDO или MySQLi вместо – MrAxlee

+0

@MrAxlee Динамическая строка или столбцы будут иметь текстовое поле или флажок? – Butterfly

ответ

0

Я передал имя с входов в качестве массива;

<input type='checkbox' name='prod_matrix[".$ceprod_id."][".$ceparam_id."]'> 

где $ ceprod_id является идентификатором продукта и $ ceparam_id является идентификатором параметра (заголовки)

Я тогда поймал эту с помощью петли 2 Foreach:

$prod_matrix = $_POST['prod_matrix']; 
    foreach($prod_matrix as $prodid => $product) 
    { 
     echo $prodid; 
     foreach ($product as $paramid => $value) 
     { 
      echo $paramid; 
      echo $value; 
     } 
     echo "<br>"; 
    } 

где $ значения является данные, введенные в поле (флажки дают значение «on», если они отмечены, и ничего не пропускают, если они не отмечены)

Затем я использовал эту информацию для построения запроса.

1

Поскольку мы не можем найти решение в один шаг и сделать себе ясно вы с формой, как показано ниже:

<?php 
    $dbCon = new PDO("mysql:host=localhost;database=test", 'root', ''); 
    if(isset($_POST) && !empty($_POST)) { 
     echo '<pre>'; print_r($_POST); 
     die; 
    } 

?> 

Html Вид:

<!DOCTYPE html> 
<html> 
<title>Stack HTML</title> 
<link rel="stylesheet" href="../repo/css/bootstrap.css" type="text/css" /> 
<script src="https://code.jquery.com/jquery-2.1.3.js"></script> 
<script src="../repo/js/bootstrap.js"></script> 
<script src="../repo/js/jquery.validate.js"></script> 
<head> 
</head> 
<body> 
    <div class="container"> 
     <form method="post"> 
      <table class="table"> 
       <tr> 
        <td><input type="checkbox" name="row[1][1]" /></td> 
        <td><input type="checkbox" name="row[1][2]" /></td> 
        <td><input type="checkbox" name="row[1][3]" /></td> 
       </tr> 
      </table> 
      <input type="submit" name="submit" value="Submit" class="btn btn-primary" /> 
      <input type="button" name="submit" value="Add Horizontal" class="btn btn-success" /> 
      <input type="button" name="submit" value="Add Vertical" class="btn btn-info" /> 
     </form> 
    </div> 
<script> 
    $(function(){ 
     $(document).on('click', '.btn-success', function(){ 
      var tableColumns = $('.table tr:eq(0)>td').length; 
      var tableRow = $('.table tr').length; 
      var NewRowNumber = tableRow+1; 

      var htmlElement = '<tr>'; 
      for(i=1; i<=tableColumns; i++){ 
       htmlElement += '<td><input type="checkbox" name="row['+NewRowNumber+']['+i+']" /></td>'; 
      } 
      htmlElement += '</tr>'; 
      $('.table').append(htmlElement); 
     }); 
     $(document).on('click', '.btn-info', function(){ 
       console.log($(this)) 
      var RowCount = 1; 
      $('.table tr').each(function() { 
       var Column = $(this).find('td').length; 
       $(this).append('<td><input type="checkbox" name="row['+RowCount+']['+Column+']" /></td>') 
       RowCount++; 
      }); 
     }); 
    }) 
</script> 
</body> 
</html> 

Кроме того с вами будут иметь динамическая строка также?

+0

Это так, и да, строка тоже динамична. – MrAxlee

+0

@MrAxlee Это точно так же, как и выше? Проверить обновленный? – Butterfly

+0

http://i.imgur.com/xP8HeVp.png (большинство из этих полей не связаны) Параметры вверху, продукты слева. – MrAxlee

0

Вот решение:

Submitting a multidimensional array via POST with php

На представлении, вы получите массив, как будто созданы так:

$_POST['topdiameter'] = array('first value', 'second value'); 
    $_POST['bottomdiameter'] = array('first value', 'second value'); 

Однако, я хотел бы предложить изменив имена формы этого формат:

name="diameters[0][top]" 
    name="diameters[0][bottom]" 
    name="diameters[1][top]" 
    name="diameters[1][bottom]" 
    ... 

Используя этот формат, гораздо проще перебирать значения.

if (isset($_POST['diameters'])) 
{ 
    echo '<table>'; 
    foreach ($_POST['diameters'] as $diam) 
    { 
     // here you have access to $diam['top'] and $diam['bottom'] 
     echo '<tr>'; 
     echo ' <td>', $diam['top'], '</td>'; 
     echo ' <td>', $diam['bottom'], '</td>'; 
     echo '</tr>'; 
    } 
    echo '</table>'; 
} 
Смежные вопросы