【问题标题】:Php missing first row checkbox values in dynamic table, when inserting to mysql?插入到mysql时,php缺少动态表中的第一行复选框值?
【发布时间】:2014-11-19 12:02:03
【问题描述】:

更新,我找到了答案,见下文...

大约 70 行的动态表格,用户输入订单大小并选择一个复选框(有一个值)并提交到另一个表格。除了第一行复选框的值(它们始终为 0.000),第一行的帐户 ID 和订单大小输入正常,只是出于某种原因复选框。第 2-70 行的复选框工作得很好。我自己都糊涂了,有什么想法吗?

//php start
if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form2")) {

mysql_select_db($database_demo_db01, $demo_db01);

//loop through the input values
for ($i = 0, $len = count($_POST['demo_acct_id']); $i < $len; $i++) {

//this trims the empty value from the lot_size column
if(trim($_POST['lot_size'][$i]) !== ''){        

   $insertSQL = sprintf("INSERT INTO demo_order (demo_acct_id_fk, demo_order_size,      demo_order_symbol, demo_order_bid, demo_order_ask) VALUES (%s, %s, %s, %s, %s)",
                   GetSQLValueString($_POST['demo_acct_id'][$i], "int"),
                   GetSQLValueString($_POST['lot_size'][$i], "double"),
                   GetSQLValueString($_POST['pair'][$i], "text"),
                   GetSQLValueString($_POST['checkbox'][$i], "double"),
                   GetSQLValueString($_POST['checkbox2'][$i], "double"));


  $Result1 = mysql_query($insertSQL, $demo_db01) or die(mysql_error());
    }//end loop

  $insertGoTo = "pairs_prices.php";
  if (isset($_SERVER['QUERY_STRING'])) {
    $insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
    $insertGoTo .= $_SERVER['QUERY_STRING'];
  }
  header(sprintf("Location: %s", $insertGoTo));
}
}

<!--html-->
              <td><?php echo $row_p_p['pair']; ?>
                <input name="demo_acct_id[]" type="hidden" id="demo_acct_id" value="<?php echo $row_d_a['demo_acct_id']; ?>">
                <input name="pair[]" type="hidden" id="pair" value="<?php echo $row_p_p['pair']; ?>"></td>
              <td><label for="lot_size"></label>
                <input name="lot_size[]" type="text" id="lot_size" size="5"></td>
              <td><label for="checkbox"></label>
              <input type="hidden" name="checkbox[<?php echo $i; ?>]" value="0">
          <input name="checkbox[<?php echo $i++; ?>]" type="checkbox" class="example" id="checkbox" value="<?php echo $row_p_p['bid']; ?>">

            <?php echo $row_p_p['bid']; ?></td>
          <td><label for="checkbox2"></label>
            <input type="hidden" name="checkbox2[<?php echo $j; ?>]" value="0">
            <input name="checkbox2[<?php echo $j++; ?>]" type="checkbox" class="example" id="checkbox2" value="<?php echo $row_p_p['ask']; ?>" >
            <?php echo $row_p_p['ask']; ?></td>

回答: 在复选框 HTML 中,两个复选框中的每一个都有隐藏的输入,我有这个来检查复选框是否被单击,以便只有选中复选框的选定行才会提交到 db 表。我已将此隐藏字段从复选框值之前移动到复选框值之后。第一行的复选框值现在返回到 db 表。

【问题讨论】:

  • 向我们展示您的 HTML 代码的前两行
  • 你想要哪个位,表单标签还是别的什么?
  • 所以这两行:&lt;input name="checkbox[&lt;?php echo $i++; ?&gt;]" type="checkbox" class="example" id="checkbox" value="&lt;?php echo $row_p_p['bid']; ?&gt;"&gt;&lt;input name="checkbox2[&lt;?php echo $j++; ?&gt;]" type="checkbox" class="example" id="checkbox2" value="&lt;?php echo $row_p_p['ask']; ?&gt;" &gt; 返回零值,对吗? $_POST['checkbox'][0]$_POST['checkbox2'][0]设置,但值为 0 ?
  • $i$j 变量是否已初始化?
  • 复选框在哪里。如果你用 php 打印出你的表格,然后显示整个循环。

标签: php mysql checkbox


【解决方案1】:

只有第一行有问题?

for ($i = 0, $len = count($_POST['demo_acct_id']); $i < $len; $i++) {

改成

for ($i = 1, $len = count($_POST['demo_acct_id']); $i < $len; $i++) {

【讨论】:

  • 数组总是以0 开头。再次阅读问题。他很伤心,他想要第一行,但由于某种原因,他没有得到它的复选框。
  • 对不起,现在这只是错过了第一行的全部内容。第一行根本没有添加到表格中。
  • @lolka_bolka 它不是数组。它是for循环,它可以从任何数字开始。如果您不知道,请不要简单地投反对票。
  • 是的。有 70 行,其中的数组如下:$_POST['demo_acct_id'][]; 这就是他count($_POST['demo_acct_id']); 的原因。我知道,$i 从任何小于计数的地方开始,但你不理解我认为的问题。 Yoo 建议他从$i = 1 开始,跳过第一行。他的问题是没有收到复选框in the first line 的值。所以你的解决方案完全误导了他。
  • 问题已在后期更新。所以这不是我的问题。无论如何我现在需要重写代码。
【解决方案2】:

试试这个:

$len = count($_POST['demo_acct_id']);

for ($i = 0, $i < $len; $i++) {

//this trims the empty value from the lot_size column
if(trim($_POST['lot_size'][$i]) !== ''){        

$insertSQL = sprintf("INSERT INTO demo_order (demo_acct_id_fk, demo_order_size,          demo_order_symbol, demo_order_bid, demo_order_ask) VALUES (%s, %s, %s, %s, %s)",
               GetSQLValueString($_POST['demo_acct_id'][$i], "int"),
               GetSQLValueString($_POST['lot_size'][$i], "double"),
               GetSQLValueString($_POST['pair'][$i], "text"),
               GetSQLValueString($_POST['checkbox'][$i], "double"),
               GetSQLValueString($_POST['checkbox2'][$i], "double"));


 $Result1 = mysql_query($insertSQL, $demo_db01) or die(mysql_error());
 }//end loop

$insertGoTo = "pairs_prices.php";
if (isset($_SERVER['QUERY_STRING'])) {
 $insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
 $insertGoTo .= $_SERVER['QUERY_STRING'];
}
header(sprintf("Location: %s", $insertGoTo));
}
}

【讨论】:

    【解决方案3】:

    您的问题在这里,您使用相同的名称输入。请删除第一个

    <input type="hidden" name="checkbox[<?php echo $i; ?>]" value="0">
    

    。它将您的值替换为 0 。

     <input type="hidden" name="checkbox[<?php echo $i; ?>]" value="0">
     <input name="checkbox[<?php echo $i++; ?>]" type="checkbox" class="example" id="checkbox" value="<?php echo $row_p_p['bid']; ?>">
    

    并删除

    <input type="hidden" name="checkbox2[<?php echo $j; ?>]" value="0">
    

    来自

    <input type="hidden" name="checkbox2[<?php echo $j; ?>]" value="0">
    <input name="checkbox2[<?php echo $j++; ?>]" type="checkbox" class="example" id="checkbox2" value="<?php echo $row_p_p['ask']; ?>" >
    

    注意:如果用户没有选中不会提交的复选框

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-06
      • 1970-01-01
      • 2014-10-31
      • 2014-08-04
      • 2015-02-19
      • 1970-01-01
      • 1970-01-01
      • 2019-05-30
      相关资源
      最近更新 更多