【问题标题】:How to deal with with array and form (PHP and JQuery)?如何处理数组和表单(PHP 和 JQuery)?
【发布时间】:2017-09-14 11:14:25
【问题描述】:

我有一个 MySQL 数据库表,它的每一行都有一个唯一的 ID 标识符:

id       text        cat
4        abc         1
233      bbb         2
45       efa         1

使用 PHP,我展示了一个 HTML 表格,您可以在其中看到 TEXT 和 CAT 字段。 表格的每一行都使用“while”循环显示。 如您所见,我还将 ID 存储在数组 $val 中。

    <?php
    ....
    $val = array();
    while($objResult = mysql_fetch_array($objQuery)){
    $val[] = $objResult["id"];
    ?>
    <table>
     <tr>
      <td><?php echo $objResult["text"];?></td>
      <td><?php echo '<a href="#" id="open">'.$objResult["cat"].'</a>';</td>
     <tr>
     <?php
      }
     ?>
    </table>

现在是棘手的部分。 使用 JQuery,我希望能够单击 html 表中的 CAT 单元格并打开一个对话框窗口,我可以在其中更改 CAT 的值。 这是表格:

<form action="modcat.php" method="POST" id="modcat">
    <table>
        <tr>
            <td>
                <select id="cat">
                    <option value="a">a</option>
                    <option value="b">b</option>
                    <option value="c">c</option>
                </select>
                <input type="hidden" name="val" value="<?php
                for ($i = 0; $i < 1000; $i++) {
                    echo $val[$i];
                }
                ?>">
            </td>
        </tr>
    </table>
</form>

<script>
    $(document).ready(function () {
        $("a#open").click(function () {
            $('#finestra').dialog("open");
            return false;
        });
        $('#finestra').dialog({
            modal: true,
            autoOpen: false,
            buttons: [{
                    text: "modifica",
                    click: function () {
                        submitform();
                        $(this).dialog("close");
                    }
                }, {
                    text: "annulla",
                    click: function () {
                        $(this).dialog("close");
                    }
                }]
        });
        function submitform() {
            $('#modcat').submit();
        }
    });
</script>

如您所见,我正在尝试向表单发送 ID 的相应值(通过隐藏输入)。 事实证明,我将数组 $val 中所有表的所有 ID 放在一起。 我怎样才能将选择的表单发送到表单?

【问题讨论】:

  • stop using mysql_* functions These extensions 已在 PHP 7 中被删除。了解 PDO 和 @987654325 的 prepared 语句@ 并考虑使用 PDO,it's really pretty easy
  • 你不应该在一个 DOM 中多次使用相同的id。改用类。因为如果你用相同的值定义 id 超过 1 次,那么 jquery 将考虑 DOM 中从顶部开始的第一个 id
  • 我知道我的语法不是最新的。我将研究 PDO。谢谢。
  • Himanshu,你能给我举个例子吗?
  • 您甚至还没有尝试构建代码来操作数据库中的值...查看 JS AJAX 以读取/写入 MySQL 数据库。哦,如果你使用 mysql_* 那么你 100% 开放攻击。它是安全的。甚至不要用它来学习......至少在mysql上使用MySQLi_*。

标签: php jquery forms while-loop


【解决方案1】:

你可以将id添加到html的某个地方,在click函数中检索它,并在提交之前将它添加到表单中。

在这里,我将 id 添加为数据属性,我还将 a 元素上的 id 更改为类,因为您呈现的 html 将包含多个 a 元素,并且 id 应该是唯一的

while($objResult = mysql_fetch_array($objQuery)):?>

   <table>
     <tr>
      <td><?= $objResult['text'];?></td>
      <td>
          <a href="#" class="open" data-id="<?=$objResult['id'];?>">
              <?=$objResult['cat'];?>
          </a>
      </td>
     <tr>
   </table>
<?php endwhile;

对于表单,不要预先填充隐藏字段,只需给它一个 id 以便在 js 中定位:

<form action="modcat.php" method="POST" id="modcat">
    <table>
        <tr>
            <td>
                <select id="cat">
                    <option value="a">a</option>
                    <option value="b">b</option>
                    <option value="c">c</option>
                </select>
                <input type="hidden" name="val" id="hidden-id">
            </td>
        </tr>
    </table>
</form>

然后在你的 js 中更新 data 属性的值:

$(document).ready(function () {
    $("a.open").click(function () {
        var clickedLink = $(this); //get clicked link
        var id = clickedLink.data('id'); //extract id from data attribute
        $('#hidden-id').val(id); //update hidden field value with id
        $('#finestra').dialog("open");
        return false;
    });
    ...

【讨论】:

  • 它可以工作,稍作改动:&lt;a href="#" class="open" data-id="'.$objResult["id"].'"&gt;'.$objResult["categoria"].'&lt;/a&gt;
  • 太棒了,你已经成功了。关于语法,我更喜欢只回显变量,而不是 html,并且更喜欢短回显标签 &lt;?= 而不是 &lt;?php echo 因此改变 - 你的方式我也很好,它只是偏好
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多