【问题标题】:Proper data insert from dynamically created input fields从动态创建的输入字段中正确插入数据
【发布时间】:2013-12-27 01:50:46
【问题描述】:

我需要将以下输入中的数据插入数据库。整个 <div class="clone"> 可以用 jquery 克隆,它还为名称添加 +1,例如下一个创建的 div 将具有名为 name="npm[]1"、name="apm[]1" 等的输入。
@ 987654322@ part list 可以检查的商店的子类别(商店可以有多个子类别),它们的名称也会+1。这样可以吗?

<div class="clone">
    <label>Shop name</label><input type="text" name="npm[]0" id="npm" required>
    <label>Address</label><input type="text" name="apm[]0" id="apm" required>
    <label>City</label><input type="text" name="mipm[]0" id="mipm" required>
    <label>Working hours</label><input type="text" name="rv[]0" id="rv" required>
    <label>Tel</label><input type="text" name="ktf[]0" id="ktf" required>
    <label>Mob</label><input type="text" name="ktm[]0" id="ktm" required>
    <label>E-mail</label><input type="text" name="kea[]0" id="kea" required>
    <label>Contact person</label><input type="text" name="ipko[]0" id="ipko" required>

    <a id="select" class="ctpct">Select shop subcategory</a>
      <div class="list" id="sub">
        <?php
         $a="select a.id,a.cat,b.x,b.subcat,b.cat_id from cat a
            inner join
                subcat b
                    on a.id = b.cat_id
                        where b.cat_id !=1
                            order by a.id";

         $res = mysql_query($a) or die(mysql_error());

         $cat = '';

         while ($re = mysql_fetch_array($res))
         {
          if( $cat === '' )
           {
             $cat = $re["cat"];
             echo "<div class='catdis'>";
             echo "<h2>$cat</h2>";
           }
          elseif( $cat !== $re["cat"] )
           {
             $cat = $re["cat"];
             echo "</div>";
             echo "<div class='catdis'>";
             echo "<h2>$cat</h2>";
           }

           $subcat= $re["subcat"];
           $id= $re["x"];

           echo "<input type='checkbox' name='subcat[]0' value='$id'> $subcat<br />";

         }

       ?>
     </div>
</div>

PHP部分:

foreach ($_POST as $key => $value) {
$values = mysql_real_escape_string($value);

$query2 = "INSERT INTO shops(n, a, c, wh, tel, mob, mail, con) VALUES ('$values')";
$rs2=mysql_query($query2) or die(mysql_error());
}

现在,我的 php 部分打印了这个“列数与第 1 行的值计数不匹配”,这可能是因为在那个克隆 div 下我有更多的输入,正常的。
我是 php 新手,所以请你帮我解决这个问题。我需要它为每个商店插入数据,从输入“商店名称”到“联系人”表中的“商店”,并在“商店子猫”表中使用子类别 ID 和商店 ID 选择子类别
谢谢!

【问题讨论】:

    标签: php jquery mysql


    【解决方案1】:

    您应该为输入字段命名,例如name="apm[]"。 PHP 特别对待以[] 结尾的名称,它将所有输入转换为一个数组。所以你可以这样做:

    foreach ($_POST['apm'] as $apm) {
        ...
    }
    

    处理所有这些输入。

    您的name="apm[]0" 不遵循此模式,因此不起作用。

    另外,从您的输入中删除 id 属性。 ID 必须是唯一的,当您克隆 DIV 时,您会创建重复项。

    要解决 SQL 错误,您需要修复查询。您列出要插入的 7 列,因此您必须提供 7 个值。

    $input_count = count($_POST['npm']);
    for ($i = 0; $i < $input_count; $i++) {
        $n = mysql_real_escape_string($_POST['npm'][$i]);
        $a = mysql_real_escape_string($_POST['apm'][$i]);
        // Repeat above pattern for all the other inputs
        $query2 = "INSERT INTO shops(n, a, c, wh, tel, mob, mail, con) 
                   VALUES ('$n', '$a', '$c', '$wh', '$mob', '$mail', '$con')";
        $rs2=mysql_query($query2) or die(mysql_error());
    }
    

    【讨论】:

    • 谢谢,但我仍然收到列数错误。我重命名了输入字段。除了 foreach 之外,php 部分中的其他所有内容都相同吗?
    • 这是一个 SQL 错误。您列出要插入的 7 列,但 VALUES ('$values') 中只有一个值。
    • 我需要以某种方式命名该数组以获取所有值吗?
    • 它有效,谢谢。生病尝试为子类别做它
    猜你喜欢
    • 2020-07-23
    • 2015-06-21
    • 2021-01-26
    • 2017-11-16
    • 2016-01-04
    • 1970-01-01
    • 1970-01-01
    • 2021-01-23
    • 2014-12-13
    相关资源
    最近更新 更多