【问题标题】:Make POST by href link通过 href 链接进行 POST
【发布时间】:2014-01-17 13:46:56
【问题描述】:

我正在尝试通过 href 链接发帖。我正在使用包含这些链接的下拉菜单。问题是,无论单击哪里,我都会得到与第一个相同的结果。我希望每个链接都发布到从具有该 ID 的查询中获得的结果,而不是发布到第一个。

<li>
  <?php  $rows=query("SELECT * FROM filmi") ?>
    <?php foreach($rows as $r):?>
      <form name="myform" method="post" action="description.php">
        <input type="hidden" name="id" value="
        <?=$r["id"]?>"/>
      </form>   
      <a href="description.php" onclick="document.forms['myform'].submit(); return false;">
        <?=$r["titulli"]?>
      </a>
  <?php endforeach?>    
</li>

【问题讨论】:

    标签: javascript php


    【解决方案1】:

    我得到与第一个相同的结果

    那是因为您有多个具有相同名称的表单。因此,您对 document.forms['myform'] 的 JavaScript 引用始终会找到该名称的第一个。

    尝试使名称更具动态性。在您的foreach 循环中,将一些唯一的记录值(记录的ID 应该很好)附加到name="myform",然后附加到对该元素的JavaScript 引用。这应该使表单名称唯一并允许 JavaScript 引用您想要的特定表单。

    【讨论】:

      【解决方案2】:

      每次运行 Foreach 循环时,您都会打开一个新表单。您还为每个交互使用相同的输入字段名称。

      试试这个:

      <li>
          <?php  $rows=query("SELECT * FROM filmi") ?>
           // Your form is opened and closed outside of the Foreach() loop.
           // This means all of your hidden fields will print within the same form.
           <form name="myform" method="post" action="description.php">
           <?php foreach($rows as $r):?>
                 //  If you're expecting more than one id, you'll need to 
                 //  post your form using array syntax.  Each "id" will be posted
                 //  to PHP in incremented fashion.
                 <input type="hidden" name="id[]" value="<?=$r["id"]?>"/>                                           
      
            <a href="description.php" onclick="document.forms['myform'].submit(); return false;">   
          <?=$r["titulli"]?></a>                                          
          <?php endforeach?>  
              </form> 
          </li>
      

      【讨论】:

      • 我不知道“数组语法”在这里是合适的术语。如果有更好的方法,请告诉我。
      【解决方案3】:

      document.forms['myform'].submit() 将提交名为“myform”的表单。您正在以该名称创建 $rows 表单,因此只会提交第一个表单。

      我建议以不同的方式命名每一个:(查看表单名称和 onclick 事件)

      <li>
        <?php  $rows=query("SELECT * FROM filmi") ?>
          <?php foreach($rows as $r):?>
            <form name="myform<?=$r["id"]?>" method="post" action="description.php">
              <input type="hidden" name="id" value="<?=$r["id"]?>" />
            </form><a href="description.php" onclick="document.forms['myform<?=$r["id"]?>'].submit(); return false;">
              <?=$r["titulli"]?>
            </a>
        <?php endforeach?>    
      </li>
      

      或者,如果他们总是一个接一个,只需发布​​ previousSibling。

      <li>
        <?php  $rows=query("SELECT * FROM filmi") ?>
          <?php foreach($rows as $r):?>
            <form method="post" action="description.php">
              <input type="hidden" name="id" value="<?=$r["id"]?>" />
            </form><a href="description.php" onclick="this.previousSibling.submit(); return false;">
              <?=$r["titulli"]?>
            </a>
        <?php endforeach?>    
      </li>
      

      【讨论】:

        【解决方案4】:

        这是因为您的所有表单都具有相同的名称,因为您需要做您想做的事情来使表单(标签名称)动态化。像这样的名字:

        <?php $i = 0;?>
        <?php foreach($rows as $r):?>
            <form name="myform<?php print $i;?>" method="post" action="description.php">
               <input type="hidden" name="id" value="<?=$r["id"]?>"/>                                           
            </form> 
            <a href="description.php" onclick="document.forms['myform<?php print $i;?>'].submit(); 
        return false;">
        <?php $i++;?>
        

        【讨论】:

          猜你喜欢
          • 2010-09-21
          • 1970-01-01
          • 2012-11-28
          • 2020-06-18
          • 1970-01-01
          • 2012-12-17
          • 2012-07-24
          • 2020-11-16
          • 1970-01-01
          相关资源
          最近更新 更多