Dave the Golfer Ответов: 2

Как отобразить неотредактируемые данные в форме и прочитать их обратно на сервер


Я заполнил таблицу на веб-странице HTML из таблицы MySQL с помощью цикла. В конце каждой строки я включил флажок. Данные из таблицы хранятся в ячейках таблицы с помощью тип ввода="текст" коробка. Я не хочу, чтобы пользователь изменял какие-либо табличные данные, отображаемые в текстовых полях, но я хочу, чтобы они установили некоторые флажки.
Код для создания таблицы выглядит следующим образом;

$x = 0;
               while ( $db_field = mysqli_fetch_assoc($result) ) {
                  $_SESSION["Opponent"] = $db_field['Opponents'];
                  $uOpponentName = $_SESSION["Opponent"];
                  $_SESSION["Venue"] = $db_field['Venue'];
                  $uVenue = $_SESSION["Venue"];
                  $originalDate = $db_field['Date'];
                  $_SESSION["Date"]  = date("d-m-Y", strtotime($originalDate));
                  $uPlayer = $_SESSION["Player"];
                  $SQL = "SELECT * FROM ".DB_AVAIL." WHERE opponents = '$uOpponentName' AND venue = '$uVenue' AND player_name = '$uPlayer'";
                  $result2 = mysqli_query($db_handle, $SQL);
                  $x=$x + 1;

                  if ($result2->num_rows >0) {
                      echo'<tr>
                    <td style="width: 150px;"><input type="text" name="oppon'.$x.'" size="20" value="'.$_SESSION["Opponent"].'" ></input></td>
                    <td style="width: 37px;"><input type="text" name="ven'.$x.'" size="5" value="'.$_SESSION["Venue"].'" ></input></td>
                    <td style="width: 80px;"><input type="text" name="dat'.$x.'" size="10" value="'.$_SESSION["Date"].'" ></input></td>
                    <td style="width: 100px;" align = "center"><input type="checkbox" name="avail'.$x.'" value="avail" checked="checked"></td>
                    </tr> ';
              }else{
                 echo'<tr>
                    <td style="width: 150px;"><input type="text" name="oppon'.$x.'" size="20" value="'.$_SESSION["Opponent"].'" ></input></td>
                    <td style="width: 37px;"><input type="text" name="ven'.$x.'" size="5" value="'.$_SESSION["Venue"].'" ></input></td>
                    <td style="width: 80px;"><input type="text" name="dat'.$x.'" size="10" value="'.$_SESSION["Date"].'" ></input></td>
                    <td style="width: 100px;" align = "center"><input  type="checkbox" name="avail'.$x.'" value="avail"></td>
                    </tr> ';
                }}} ?>


Чтобы сохранить данные обратно в другую таблицу в зависимости от того был ли установлен флажок я использовал следующий код;
$y = $_SESSION["RowCount"];
for ($x = 1; $x <= $y; $x++) {
    $Already = false;
    if (isset($_POST['avail'.$x.''])) {
        $uPlayerName = $_SESSION["Player"];
        $uOpponent = $_POST['oppon'.$x.''];
        $uVenue = $_POST['ven'.$x.''];
        

//// check to see it player already in the availabilty list for this match
        $SQL = "SELECT `player_name` FROM ".DB_AVAIL." WHERE `opponents`= '$uOpponent' AND `venue`= '$uVenue'";

        $result = $conn->query($SQL);

        if ($result->num_rows >0) {
            while($row = $result->fetch_assoc()) {
                $PlayerName = $row['player_name'];
                    If ($uPlayerName==$PlayerName ){
                        $Already = true;
                        Break;
                    }
            } 
        }
// sql to add a record
If ($Already == false){
    $sql = "INSERT INTO ".DB_AVAIL." (`player_name`, `opponents`, `venue`) VALUES ('$uPlayerName','$uOpponent','$uVenue')";
    if ($conn->query($sql) === FALSE) {
        print "Error adding record: " .  $sql . "<br>" . $conn->error;
    }
}

Все это работает нормально, но текстовые поля открыты для редактирования, чего я не хочу.
Вопрос в том, как я могу отобразить табличные данные в HTML-форме, чтобы они не могли быть отредактированы, но все же могли быть переданы обратно на сервер в PHP для обработки и сохранения по мере необходимости?

Что я уже пробовал:

Я попытался отключить текстовые поля, изменив код следующим образом
<td style="width: 150px;"><input type="text" name="oppon'.$x.'" size="20" value="'.$_SESSION["Opponent"].'" ></input></td>

к
<td style="width: 150px;"><input type="text" name="oppon'.$x.'" size="20" value="'.$_SESSION["Opponent"].'" disable></input></td>

однако это не удалось, так как $_POST['oppon'.$x."] переменная не была сгенерирована HTML-страницей.

2 Ответов

Рейтинг:
9

W∴ Balboos, GHB

Позвольте мне дать вам альтернативу, которая проще: вместо использования <input> или <textarea> - почему бы просто не отобразить текст, например, в <div> ? Если это ячейка таблицы, вы можете просто поместить в нее текст.

Вам нужно будет изо всех сил стараться сделать текст изменчивым в этих элементах - и для нормального использования: пуленепробиваемый!


Dave the Golfer

Я не только хочу отобразить текст, но и должен иметь возможность прочитать его позже, когда флажок будет установлен, чтобы я мог обновить таблицы данных. Если я просто помещу текст в ячейку, как мне прочитать его снова, чтобы обновить таблицы данных?

W∴ Balboos, GHB

Каждый элемент может быть прочитан через DOM, например, как значение, или, в некоторых случаях, как innerHTML. Что касается того, что читать - вы можете связать идентификатор области, содержащей текст, с идентификатором флажка (area1->chk1, area2->chk2). Есть так много способов сделать такие вещи, в зависимости от обстоятельств. Если вы должны использовать форму, то состояние флажка может установить/очистить значение в скрытом элементе формы. Если значение не пусто, сохраните; если пусто, проигнорируйте.

Проявите немного воображения!

Рейтинг:
19

Dave the Golfer

Довольно часто, когда я отправляю вопрос, я сразу же нахожу ответ, хотя я потратил часы, траля сеть.
Я использовал другой входной тег "только для чтения", который делает именно это и по-прежнему создает переменную $_Post.


Richard Deeming

NB: Это не помешает определенному пользователю изменять опубликованные данные с помощью инструментов разработчика браузера. :)