Как создать кнопку редактирования для каждой строки из 2d-массива в PHP

#php #mysql

#php #mysql

Вопрос:

У меня есть 2d-массив в php, который отображает содержимое таблицы, и я смог создать значок редактирования для каждой строки. Однако у меня возникли проблемы с извлечением данных из выбранной строки.

Вот как я заполнил свой массив:

 <?php
//use query to retrieve columns
$sql = "SHOW COLUMNS FROM $table_name";
$result1 = mysqli_query($conn, $sql);// contains the query that creates 2d

while ($record = mysqli_fetch_array($result1)) { //returns current row 1d 
  $fields[] = $record['0'];//takes first element from record called fields (table names)
}

//retrieve the table content since data table has rows and columns
//lets use 2d array
$data2dArr = array();

//retrieve all columns without listing them explicitly, for the sort
if ($dir == 0) {
    $query = "SELECT * FROM  $table_name ORDER BY $fields[$cn]";  //ascending
} else {
    $query = "SELECT * FROM  $table_name ORDER BY $fields[$cn] DESC"; //descending
}
$result2 = mysqli_query($conn, $query);

while ($line = mysqli_fetch_array($result2, MYSQL_ASSOC)) {
  $i = 0;  // counter
  //each element in array line 
  foreach ($line as $col_value) {
    $data2dArr[$i][] = $col_value; // is stored in col value, dataarr used for display
    $i  ;
  }
}

?>

  

Сначала я напечатал значения в моем 2d-массиве следующим образом:

 <?php
for ($j = 0; $j < count($data2dArr[0]); $j  ) {
 ?>
    <tr>
        <?php
        for ($k = 0; $k < count($fields); $k  ) {
        ?>
            <td><?php print $data2dArr[$k][$j]; print $j;? </td>

        <?php
        }
        //added the Edit button here
        ?>
         <th><input type="image" src="images/edit.png" onclick="openForm()"/</th>
        <?php
 }
 ?>

  

В моем edit.php файл, у меня есть тот же массив, что и выше, но внутри 2-го цикла for, содержит:

 <td><input name="field<?php echo $k ?>" id="field<?php echo $k ?>" placeholder="<?php print $data2dArr[$k][$j] ?>" class="full-width" type="text"> </td
  

цель состоит в том, чтобы распечатать выбранную строку x, содержащую столбцы y, но приведенное выше решение выводит все элементы. Я знаю, что это потому, что все содержимое моей таблицы помещается в мой ввод<> для каждой итерации, чего я не могу понять, так это как печатать только поля столбца из выбранной строки.

Например, из таблицы с именем Student

 student_number | name | class| major  |
22             | Rick |  3   | CS     | editButton 
32             | Ross |  5   | Math   | editButton 
  

Если я выберу номер студента из второй строки, я ожидаю, что мой заполнитель ввода будет иметь |32|Ross|5|Math

Я хотел бы знать, как мне это сделать? Любой совет был бы очень полезен.

Комментарии:

1. Вам удобно показывать образец вашего массива?

2. Хорошо, я добавил, где создается массив

Ответ №1:

Ваш вопрос довольно длинный и запутанный, поэтому я предполагаю, что у вас проблема с печатью определенного поля в массиве?

Вы можете попробовать:

 foreach($data2dArr as $key => $value){
    print $data2dArr[$key]["student_number"]."|".$data2dArr[$key]["name"]."|".$data2dArr[$key]["class"]."|".$data2dArr[$key]["major"];
}
  

Лучше показывать меньше вашего кода и кратко, но четко объяснять, чего вы пытаетесь достичь

Комментарии:

1. Если у меня есть кнопка редактирования для каждой строки, как мне извлечь данные из этой строки?

2. вы имеете в виду, как вы должны печатать строку с кнопкой редактирования вместе ?

3. print '<td><input name="field'.$value["student_number"].'" id="field'.$value["student_number"].'" placeholder=".$data2dArr[$key]["student_number"].'|'.$data2dArr[$key]["name"].'|'.$data2dArr[$key]["class"].'|'.$data2dArr[$key]["major"].'" class="full-width" type="text"> </td>'