如何使用多数组会话2插入数据php javascript mysql

如何使用多数组会话2插入数据php javascript mysql,javascript,php,jquery,mysql,Javascript,Php,Jquery,Mysql,我有一种方法,这种方法之前已经讨论过,并且很成功,但是当多个数据不能进入数据库时,数据只输入一个 这是我的节目 我的PHP表单: <form class="form-horizontal" id="form-produk"> <div class="control-group" > <label class="control-label" for="kelas">Kategori</label> <div c

我有一种方法,这种方法之前已经讨论过,并且很成功,但是当多个数据不能进入数据库时,数据只输入一个

这是我的节目

我的PHP表单

<form class="form-horizontal" id="form-produk">

    <div class="control-group" >
        <label class="control-label" for="kelas">Kategori</label>
    <div class="controls">
            <select class='form-control' name='id_kategori'>
 <?php
          $tampil=mysql_query("SELECT * FROM kategori ORDER BY nama_kategori");
          if ($id_kat==0){
            echo "<option value=0 selected>- Pilih Kategori -</option>";
          }   

          while($w=mysql_fetch_array($tampil)){
            if ($id_kat==$w[id_kategori]){
              echo "<option value=$w[id_kategori] selected>$w[nama_kategori]</option>";
            }
            else{
              echo "<option value=$w[id_kategori]>$w[nama_kategori]</option>";
            }
          }?>
    </select>
    </div>
   </div>
    <div class="control-group">
        <label class="control-label" for="produk">Nama Produk</label>
    <div class="controls">
    <?php if($id_kat > 0){
        ?>
                <input type="text" name="editprod" class="form-control" value="<?php echo $nama_prod;?>"/>
                <?php } else{
                    ?>
                    <input name='add_btn' class="btn btn-primary" value='Tambah Record' id='add_btn' type='button'><br><br>

                 <div id='container1'></div>

       <?php } ?>
                    </div>
                    </div>
</form>

         <script type="text/javascript">
$(document).ready(function() {
         var count = 0;

  $("#add_btn").click(function() {
    count++;
    $('#container1').append(
      '<div class="records">' + '<textarea id="' + count + '" name="' + count + '" type="text" size="100" class="form-control nma_prod"></textarea>' + '<div class="hrgini"><span class="input-group-addon">Rp</span><input style="text-align:right" id="' + count + '" name="' + count + '" class="form-control hrg_prod" type="text" placeholder="Harga Produk"><span class="input-group-addon">,00</span></div>' + '<button class="remove_item btn btn-danger" >Hapus</button>' + '<br><br></div>'
    );
  });

  $('body').on('click', ".remove_item", function(ev) {
    $(this).parents(".records").fadeOut();
    $(this).parents(".records").remove();
  });
        });
</script>
这种方法适用于一个数据,但不适用于多个数据?
有什么建议吗?

您应该在变量周围使用单引号。 也就是说,应该是这样-

echo "<option value='{$w[id_kategori]}' selected>'{$w[nama_kategori]}'</option>";
echo“{$w[nama_kategori]}”;

您似乎将几个
INSERT
语句一个接一个地连接起来。这不适用于
mysql\u query()
。您最好单独发送
INSERT
s。即使您在mysql控制台中尝试此操作,您至少必须用分号分隔语句

顺便说一句,
mysql\ucode>类型的函数已经被弃用了。它们将在下一个PHP版本(7)中消失。它们也容易受到SQL注入的攻击,出于安全原因不应使用它们。考虑将MySQL或PDO切换到数据库访问。
试试这个:

$data   = $_REQUEST['data'];
$data   = json_decode($data, true);
$query  = '';
foreach($data as $item ){
    $kat= $item['kat_prod'];
    $nma_prod = $item['nma_prod'];
    $hrg_prod = $item['hrg_prod'];
    $query = "INSERT INTO `produk` VALUES('','$_POST[kat]','$nma_prod','$hrg_prod')";
    if ($query) {
        $exec = mysql_query($query);
        if ($exec) {
            $out = json_encode(array('msg' => 'Data inserted successfully!'));
        } else {
            die( json_encode(array('msg' => 'Something went wrong!')) );
        }
    } else {
        die( json_encode(array('msg' => 'Nothing to Insert!')) );
    }
}
echo $out;

按照原始代码的方式执行多语句可能是最好的解决方案。当然,这意味着您需要使用
mysqli
而不是
mysql
函数/方法创建db连接

/* mysqli_multi_query example */
$data   = $_REQUEST['data'];
$data   = json_decode($data, true);
$query  = '';

foreach( $data as $item ){

    $kat= $item['kat_prod'];
    $nma_prod = $item['nma_prod'];
    $hrg_prod = $item['hrg_prod'];
    $kat = $_POST['kat'];

    /* string concatenation, terminate each with semi-colon */
    $query .= "INSERT INTO `produk` VALUES ( '', '{$kat}', '{$nma_prod}', '{$hrg_prod}' );";
}

if( $query ) {

    $exec = mysqli_multi_query( $conn, $query );

    if( $exec ) {
        exit( json_encode( array( 'msg' => 'Data inserted successfully!') ) );
    } else {
        exit( json_encode( array( 'msg' => 'Something went wrong!') ) );
    }
} else {
    exit( json_encode( array( 'msg' => 'Nothing to Insert!') ) );
}
或者,您可以继续使用
mysql\u query
(尽管由于sql注入,现在非常不鼓励这样做),并在处理数组的第一个循环中执行每个查询,或者在这样一个单独的循环中执行每个查询

$data = isset( $_REQUEST['data'], $_POST['kat'] ) ? $_REQUEST['data'] : false;

if( $data ){
    $data   = json_decode( $data, true );
    $query  = array();

    foreach( $data as $item ){
        $kat= $item['kat_prod'];
        $nma_prod = $item['nma_prod'];
        $hrg_prod = $item['hrg_prod'];
        $kat = strip_tags( trim( $_POST['kat'] ) );

        $query[]="INSERT INTO `produk` VALUES ( '', '{$kat}', '{$nma_prod}', '{$hrg_prod}' );";
    }

    if( !empty( $query ) ) {

        $msgs=array('msg'=>'multiple messages');

        foreach( $query as $i => $sql ){
            $res = mysql_query( $sql, $conn );
            $msgs[ 'stmt'.$i ]=$res ? 'Data inserted successfully!' : 'Something went wrong!';
        }

        exit( json_encode( $msgs ) );

    } else {
        exit( json_encode( array( 'msg' => 'Nothing to Insert!') ) );
    }
    mysql_close( $conn );
}

mysqli
及其相关方法在您使用准备好的语句时提供了更好的sql注入保护-有很多关于StackOverflow的文章可供选择。

看起来您是在连接sql-每个语句末尾都没有终止分号。我想您可能需要使用
mysqli\u multi\u query
来实现这一点(不过要用分号终止每条语句)@RamRaider抱歉。我看你在评论中胜过我。
/* mysqli_multi_query example */
$data   = $_REQUEST['data'];
$data   = json_decode($data, true);
$query  = '';

foreach( $data as $item ){

    $kat= $item['kat_prod'];
    $nma_prod = $item['nma_prod'];
    $hrg_prod = $item['hrg_prod'];
    $kat = $_POST['kat'];

    /* string concatenation, terminate each with semi-colon */
    $query .= "INSERT INTO `produk` VALUES ( '', '{$kat}', '{$nma_prod}', '{$hrg_prod}' );";
}

if( $query ) {

    $exec = mysqli_multi_query( $conn, $query );

    if( $exec ) {
        exit( json_encode( array( 'msg' => 'Data inserted successfully!') ) );
    } else {
        exit( json_encode( array( 'msg' => 'Something went wrong!') ) );
    }
} else {
    exit( json_encode( array( 'msg' => 'Nothing to Insert!') ) );
}
$data = isset( $_REQUEST['data'], $_POST['kat'] ) ? $_REQUEST['data'] : false;

if( $data ){
    $data   = json_decode( $data, true );
    $query  = array();

    foreach( $data as $item ){
        $kat= $item['kat_prod'];
        $nma_prod = $item['nma_prod'];
        $hrg_prod = $item['hrg_prod'];
        $kat = strip_tags( trim( $_POST['kat'] ) );

        $query[]="INSERT INTO `produk` VALUES ( '', '{$kat}', '{$nma_prod}', '{$hrg_prod}' );";
    }

    if( !empty( $query ) ) {

        $msgs=array('msg'=>'multiple messages');

        foreach( $query as $i => $sql ){
            $res = mysql_query( $sql, $conn );
            $msgs[ 'stmt'.$i ]=$res ? 'Data inserted successfully!' : 'Something went wrong!';
        }

        exit( json_encode( $msgs ) );

    } else {
        exit( json_encode( array( 'msg' => 'Nothing to Insert!') ) );
    }
    mysql_close( $conn );
}