从动态创建的输入字段插入适当的数据

时间:2013-12-27 01:50:47

标签: php jquery mysql

我需要将以下输入的数据插入数据库。整个<div class="clone">可以使用jquery进行克隆,并且还会为名称添加+1,例如,下一个创建的div将具有名为name =“npm [] 1”,name =“apm [] 1”等的输入。 /> <div class="list" id="sub">部分列表可以检查的商店子类别(商店可以有多个子类别),并且他们的名字也获得+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新手所以你可以帮我解决这个问题。我需要它为每个商店插入数据,从“商店名称”输入到“商店”中的“联系人”,并在表'shop_subcat'中选择子类别,子类别_id和shop_id,谢谢!

1 个答案:

答案 0 :(得分: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());
}