【问题标题】:How to output multiple value?如何输出多个值?
【发布时间】:2014-02-26 09:23:16
【问题描述】:

我需要从我的函数输出多个值并访问外部变量,放入输入隐藏和 POST 变量以启用从 php 访问数据。

数据来自多行表中的用户输入值,即多行计数,其他值来自数据库。

Javascript;

function validateForm() {

$('textarea.pc_1').each(function(event){ 
      var thought= $(this).val();     
      $("input[name='status']").val(thought);
      alert(status.value);
  })
}

上面的 Javascript 函数可以警告多个值,但是当值发布到隐藏的输入时,只有单个值 POST 到 pc1_process.php。我只需要从此函数输出多个值并传递给隐藏的输入。从 pc1_process.php 上的 POST 访问此值。

pc1.php

<script type="text/javascript">
function validateForm() {

$('textarea.pc_1').each(function(event){ 
      var thought= $(this).val();     
      $("input[name='status']").val(thought);
      alert(status.value);
  })
}
</script>
...
...
<form name="myForm" id="contact" method="post" action="../lpc/pc1_process.php" onsubmit="return validateForm()">

<table id="tftable" class="MyTable" style="font-size:12px; color:#333333; width:100%; border-width: 1px; border-color: #729ea5; border-collapse: collapse;" border="1" >
        <thead>
        <tr style="background-color:#acc8cc;">
        <td style="font-size:12px; border-width: 1px; padding: 8px; border-style: solid; border-color: #729ea5;">Issues</td>
        <td style="font-size:12px; border-width: 1px; padding: 8px; border-style: solid; border-color: #729ea5;">Notes <br></td>
        <td style="font-size:12px; border-width: 1px; padding: 8px; border-style: solid; border-color: #729ea5;">Status <br></td>
        </tr>
    </thead>
    <?php 
    if ($info6['datetime_submit'] != null){
    $alert_null = "";   
    $check11 = mysql_query("select *
    from    (
    select * from page1_table union all
    select * from page2_table 
    ) t
    where t.submit = 'No' AND t.userid = '".$_SESSION['userid']."'") or die(mysql_error()); 
    while($row = mysql_fetch_array($check11)) {
        ?>              
    <tr style="background-color:#d4e3e5;">
        <td style="font-size:12px; border-width: 1px; padding: 8px; border-style: solid; border-color: #729ea5;"><?php echo $row["issues"];?></td>
        <td style="font-size:12px; border-width: 1px; padding: 8px; border-style: solid; border-color: #729ea5;"><?php echo $row["notes"];?></td>
        <td style="font-size:12px; border-width: 1px; padding: 8px; border-style: solid; border-color: #729ea5;">
            <textarea class="pc_1" style="border: none;border-color: Transparent;overflow: auto;width: 100%;height: 100%;background-color:#d4e3e5;resize: none; "></textarea>
        </td>
    </tr> 
    <?php }

}?>
</table>

<br><br>    
<input type="hidden" id="status" name="status"/>
<input style="float: right;" type="image" <?php echo $disabled?> src=<?php echo $button_off?> onMouseOver="this.src='../images/submit_button_on.png'" onMouseOut="this.src='../images/submit_button_off.png'">
</form> 

pc1_process.php

<?php
$status = isset($_POST['status'])?filter_input(INPUT_POST, 'status', FILTER_SANITIZE_STRING):"";

echo($status);
?>

【问题讨论】:

  • 我能否建议您重新考虑一下您计划验证的方式。最好在 pc1_process.php 中发布所有内容并在它到达时对其进行验证。在您的 pc1_process 文件中也有您期望的密钥数组,不允许验证您不期望的密钥。

标签: javascript php jquery html sql


【解决方案1】:

你可以这样传递:

function validateForm() {
    var thought = $('textarea.pc_1').map(function(){ 
                        return this.value;
                  }).get();
    $("input[name='status']").val(thought); // <--this holds ',' separated values
}

所以在上面的代码中,var thought 包含一个值数组,例如 ['val1', 'val2', ...n],所以现在将这些值设置为 $("input[name='status']")


.map()ie 6, 7, 8 版本中存在一些问题,因此您可以执行以下操作:

function validateForm() {
    var thought = [];
    $('textarea.pc_1').each(function(){ 
         thought.push(this.value);
    });
    $("input[name='status']").val(thought); // <--this holds ',' separated values
}

【讨论】:

  • 感谢您的回答。 :)
【解决方案2】:

您必须创建多个具有唯一名称的隐藏变量,或者输入字段的名称属性应该是一个数组(name='status[]'),或者通过具有一些唯一标识符将 textarea 的值附加到同一个隐藏变量中,以便您可以将它们分解为每个都具有价值。

如果您将输入名称设置为数组,那么您将在 php 脚本中拥有数组中的所有值,例如 $_POST['status']

在上面的 JS 函数中,您正在为隐藏变量赋值,所以我认为您只获得了 PHP 脚本中的最后一个值。

【讨论】:

  • 感谢您的回答。 :)
【解决方案3】:

为什么要将 textarea 内容复制到隐藏字段中?

如果您将name 属性添加到您的文本区域,您可以在PHP 中访问这些名称。此外,如果您为每个 textarea 指定相同的名称,但名称末尾带有 [],您可以将 textarea 值作为数组访问:

while($row = mysql_fetch_array($check11)) {
?>              
<tr style="background-color:#d4e3e5;">
    <td style="font-size:12px; border-width: 1px; padding: 8px; border-style: solid; border-color: #729ea5;"><?php echo $row["issues"];?></td>
    <td style="font-size:12px; border-width: 1px; padding: 8px; border-style: solid; border-color: #729ea5;"><?php echo $row["notes"];?></td>
    <td style="font-size:12px; border-width: 1px; padding: 8px; border-style: solid; border-color: #729ea5;">
        <textarea name="status[]" class="pc_1" style="border: none;border-color: Transparent;overflow: auto;width: 100%;height: 100%;background-color:#d4e3e5;resize: none; "></textarea>
    </td>
</tr> 
<?php }

pc1_process.php

<?php
$all_statuses = '';
if (isset($_POST['status'])) {
    foreach($_POST['status'] as $status) {
        // Add filtering here
        $all_statuses .= $status;
    }
}
echo($all_statuses);
?>

【讨论】:

  • 感谢您的回答。 :)
猜你喜欢
  • 1970-01-01
  • 2017-11-12
  • 1970-01-01
  • 2016-12-23
  • 1970-01-01
  • 2016-02-22
  • 2012-07-06
  • 1970-01-01
  • 2022-08-21
相关资源
最近更新 更多