HTML & lt; input & gt; элемент не POSTing значение?

Хорошо, это странно.

Насколько я могу судить, мой код правильный. И это работает в Safari на Mac, Safari на iPhone и Google Chrome на планшете Android. Что это не работать, однако, на Firefox или Internet Explorer; и я не могу на всю жизнь понять, почему!

Проблема в том, что когда я нажимаю <input> тег, и форма отправлена, значение этого тега не отправляется. Еще более странно, значения X и Y являются опубликовано — это тег ввода изображения — но не имеет значения.

Вот соответствующий фрагмент HTML:

<input type='image' name="edit" value="59" class="news-control news-control-hidden" src="assets/edit.png"/></input>

Вот значения, которые POSTed, когда я нажимаю тег, как вывод print_r($_POST) вызов:

Array ( [edit_x] => 29 [edit_y] => 9 )

У меня есть следующий код на моей веб-странице PHP:

<form name="newsform" method="post" action="Admin.php">
<table class="editable-list">
<?php
$entries = get_news_posts();
if (empty($entries)) {
?>
<tr><td><p style='margin: 6px 10px 16px 0px'>No news posts exist.<br><br>Click the button below to create one.</p></td></tr>
<?php
} else
foreach ($entries as $row) {
make_editable_news_item($row['date'], $row['content'], $row['ID'], isset($_POST['edit']) ? $_POST['edit'] : null);
}
if (!isset($_POST['edit'])) {
?>
<tr><td class='news-add-post' colspan='7'>
<input type="submit" name="create_new" value="Create new post"/><br>
</td></tr>
<?php                       }       ?>
</table>
</form>

У меня также есть эта функция:

    function make_editable_news_item($datestamp, $content, $id, $editing_id) {
?>
<tr class="news-item">
<td class="news-controls">
<?php   if ($id == $editing_id) {       ?>
<input type='image' class="news-control" src="assets/undo.png"/></input>
<?php       } else if (!isset($editing_id)) {                   ?>
<input type='image' name="edit" value="<?= $id ?>" class="news-control news-control-hidden" src="assets/edit.png"/></input>
<?php       }       ?>
&nbsp;
</td>
<td class="news-datestamp">
<?= format_datestamp($datestamp) ?>
<?php   if ($id == $editing_id) {       ?>
<div style="background-color: #eee; height: 1px; margin: 6px;"></div>
<div class="news-control-datestamp">
<input name='update_date' class="news-control-datestamp" type="checkbox">
Update
</input>
</div>
<?php       }       ?>
</td>
<td class="news-separator"/>
<td class="news-divider"/>
<td class="news-separator"/>
<td class="news-content">
<?php   if ($id == $editing_id) {       ?>
<textarea name="content" class="news-content"><?= $content ?></textarea>
<?php   } else {    ?>
<div class="news-content"><?= $content ?></div>
<?php       }       ?>
</td>
<td class="news-separator"/>
<td class="news-separator"/>
<td class="news-separator"/>
<td class="news-controls">
<?php   if ($id == $editing_id) {       ?>
<input type='image' name='save' value='<?= $id ?>' class="news-control" src="assets/save.png"/></input>
<?php       } else if (!isset($editing_id)) {                   ?>
<input type='image' name="delete" value="<?= $id ?>" class="news-control news-control-hidden" src="assets/delete.png"/></input>
<?php       }       ?>
&nbsp;
</td>
</tr>
<tr class="news-separator"></tr>
<?php } ?>

Этот код приводит к следующему HTML:

<form name="newsform" method="post" action="Admin.php">
<table class="editable-list">
<tr class="news-item">
<td class="news-controls">
<input type='image' name="edit" value="59" class="news-control news-control-hidden" src="assets/edit.png"/></input>
&nbsp;
</td>
<td class="news-datestamp">     5th Dec 2015<br>11:12pm         </td>
<td class="news-separator"/>
<td class="news-divider"/>
<td class="news-separator"/>
<td class="news-content">
<div class="news-content">...</div>
</td>
<td class="news-separator"/>
<td class="news-separator"/>
<td class="news-separator"/>
<td class="news-controls">
<input type='image' name="delete" value="59" class="news-control news-control-hidden" src="assets/delete.png"/></input>
&nbsp;
</td>
</tr>
<tr class="news-separator"></tr>
<tr><td class='news-add-post' colspan='7'>
<input type="submit" name="create_new" value="Create new post"/><br>
</td></tr>
</table>
</form>

Поэтому вопрос в том, почему Firefox и IE не уважают тег ввода value атрибут?

0

Решение

Предполагается, что входы изображений будут использоваться для карт изображений на стороне сервера.

Они не публикуют свои ценности, они публикуют (как name.x а также name.y (PHP конвертирует . в _ потому что ты не можешь иметь . в имени переменной, чтобы она потерпела неудачу со старым, по умолчанию зарегистрировать глобалы)) координаты пикселя, на который вы нажали.

Если вы хотите передать значение, используйте вместо него обычную кнопку отправки.

<button name="edit" value="59">
<img src="assets/edit.png" alt="Edit: 59">
</button>
2

Другие решения

Других решений пока нет …