表单操作和独特ID的困难

时间:2011-06-01 08:40:18

标签: php html

我在foreach中有这个代码,列出了唯一代码链接:

<a id="<?php echo $id_to ?>" href="<?php echo ADDRESS; ?>messageSent.php?id=<?php echo $id_to ?>" class="charcoal_link" style="line-height: 20px;" onclick="showMessageArea(this); return false;" >
  <?php echo $uniqueCode1?><span class="pink_text"><?php echo $uniqueCode2?></span><?php echo $uniqueCode3?>
</a>      
<form id="message_area" style="display:none"  method="post" action="<?php echo ADDRESS; ?>messageSent.php?id=<?php echo $id_to ?>">                                
   <textarea name="message" rows="10" cols="20"></textarea>
   <input name="Submit" type="submit" value="Send"></input>
</form>

这是我查看页面源时得到的结果:

<a href="http://www-rainbowcode-mobi/messageSent.php?id=36" class="charcoal_link" style="line-height: 20px;" onclick="showMessageArea(this); return false;" > 
  KUZELJA<span class="pink_text">000</span>RC
</a>      
<form id="message_area" style="display:none"  method="post" action="http://www-rainbowcode-mobi/messageSent.php?id=36">                                
   <textarea name="message" rows="10" cols="20"></textarea> 
   <input name="Submit" type="submit" value="Send"></input> 
</form> 
<a href="http://www-rainbowcode-mobi/messageSent.php?id=38" class="charcoal_link" style="line-height: 20px;" onclick="showMessageArea(this); return false;" > 
  ALANZIM<span class="pink_text">000</span>RC
</a>      
<form id="message_area" style="display:none"  method="post" action="http://www-rainbowcode-mobi/messageSent.php?id=38">                                
  <textarea name="message" rows="10" cols="20"></textarea> 
  <input name="Submit" type="submit" value="Send"></input> 
</form> 

问题是当操作触发并且页面转到messageSent并且我再次查看页面源$id_to不是我点击的链接的ID。无论我点击哪个链接,它都会占用第一个链接的ID?

这里是messageSent页面源(我点击了ID为38 NOT 36的链接): 我有一个print_r($_REQUEST),它给出了:

Array
(
   [id] => 36
   [message] => bj,nbgj,
   [Submit] => Send
)

function showMessageArea(link)
{
  var message_area = document.getElementById('message_area');
  message_area.parentNode.removeChild(message_area);
  link.parentNode.insertBefore(message_area, link.nextSibling);
  message_area.style.display="block";
}

4 个答案:

答案 0 :(得分:2)

问题确实是非独特的ID。

尝试将$to_id附加到表单ID,以便它们是唯一的(例如<form id="message_area_<?php echo $to_id; ?>" ...)。

然后更新showMessageArea函数来执行此操作:

var message_area = document.getElementById('message_area_'+this.id);

这样您就可以使用所需的表单元素。

作为重构建议,我建议您使用单个表单,并将id参数设为<input type='hidden' name='id' id='message_id' value=''>,并将此值设置为showMessageArea(...),如下所示:

document.getElementById('message_id').value = this.id;

答案 1 :(得分:1)

在php语句之后你不应该有分号吗?

编辑:

我认为问题在于有两个id为“message_area”的元素,所以它总是引用第一个。尝试只有一个表单,并在单击其中一个链接时设置该表单的操作。

答案 2 :(得分:1)

我不知道这是否会解决,因为我看不到问题,但您可以尝试以下代码:

<a id="<?php echo $id_to ?>" href="<?php echo ADDRESS; ?>messageSent.php class="charcoal_link" style="line-height: 20px;" onclick="showMessageArea(this); return false;" >
  <?php echo $uniqueCode1?><span class="pink_text"><?php echo $uniqueCode2?></span><?php echo $uniqueCode3?>
</a>
<form id="message_area" style="display:none"  method="post" action="<?php echo ADDRESS; ?>messageSent.php?id=<?php echo $id_to ?>">
   <textarea name="message" rows="10" cols="20"></textarea>
   <input type="hidden" name="id" value="<?php echo $id_to ?>" />
   <input name="Submit" type="submit" value="Send" />
</form>

然后尝试print_r($_POST)

编辑:

好的,在您的评论Helloise之后,我相信以下内容可能有效:

<a id="messageid_<?php echo $id_to ?>" href="javascript:void(0);" class="charcoal_link" style="line-height: 20px;" onclick="showMessageArea(this,'<?php echo $id_to ?>'); return false;" >
    <?php echo $uniqueCode1?><span class="pink_text"><?php echo $uniqueCode2?></span><?php echo $uniqueCode3?>
</a>      
<form id="message_area" style="display:none"  method="post" action="<?php echo ADDRESS; ?>messageSent.php">                                
    <textarea name="message" rows="10" cols="20"></textarea>
    <input name="Submit" type="submit" value="Send" />
    <input type="hidden" id="message_id" name="id" value="" />
</form>

<script type="text/javascript">
    function showMessageArea(link,messageId)
    {
        document.getElementById('message_id').value=messageId;
        message_area.parentNode.removeChild(message_area);
        link.parentNode.insertBefore(message_area, link.nextSibling);
        document.getElementById('message_area').style.display="block";
    }
</script>

所以,这里的主要观点是如你所说的那样有一个表单,但是将我们正在使用的id传递给javascript函数。从那里,您可以设置隐藏输入的值,然后将其包含在POST值中。

答案 3 :(得分:1)

尝试这样的事情:

快速阅读之后......

  • $之前您遗失的ADDRESS。它应该是$ADDRESS。我假设这是一个变量(忽略这个,忽略它只是一个常量)
  • 你的错误的分号后面有很多行。

    <a  id="<?php echo $id_to; ?>" 
        href="<?php echo $ADDRESS;?>messageSent.php?id=<?php echo $id_to; ?>" 
        class="charcoal_link"
        style="line-height: 20px;"
        onclick="showMessageArea(this); return false;"
        <?php echo $uniqueCode1;?>
        <span class="pink_text">
            <?php echo $uniqueCode2?>
        </span>
        <?php echo $uniqueCode3;?>
    ></a>      
    
    <form id="message_area" style="display:none"  method="post" action="<?php echo $ADDRESS; ?>messageSent.php?id=<?php echo $id_to; ?>">                          
        <textarea name="message" rows="10" cols="20"></textarea>
        <input name="Submit" type="submit" value="Send"></input>
    </form>